行や列の連続したセルを繰り返して処理したい!Excelマクロ(VBA)のFor~Next文
[ この記事の内容は Office 2019/2021、Microsoft 365 でも使えます ]
Excelのデータは、行と列のセルが集まってできています。
例えば、連続したセルの値を取得する時、
Dim gyou1 = Cells(1,1).Value ' 1行目のセルの値 Dim gyou2 = Cells(2,1).Value ' 2行目のセルの値 Dim gyou3 = Cells(3,1).Value ' 3行目のセルの値
のように一つ一つ指定しても良いですが、たくさんの行がある時は大変です。
面倒くさいですし。
そんな時、For~Next文を使うと繰り返し処理が簡単にできますよ。
For~Next文の使い方
[書式]
For カウント用の変数 = 開始番号 to 終了番号
[繰り返したい内容を書く]
Next
カウント用の変数は、カウントするための変数です。
そのままですね。
適当に数字型の変数を定義しておけば問題ありません。
例えばこんな感じ。
Dim gyou As Integer
gyouという変数を数字型(Integer)で宣言しています。
プログラムの本などでは、i や j や k などの文字が使われることが多いようですが、gyou や gyou_no など、わかりやすい文字で良いと思います。
開始番号と終了番号は、繰り返し処理を行う開始と終了の番号です。
例えば、
For gyou = 1 to 5 とすると、1から5までで5回、
For gyou = 1 to 10 とすると、1から10までで10回、
For gyou = 3 to 8 とすると、3から8までで6回、
繰り返します。
繰り返す時、カウント用の変数にはその時の番号が入っています。
上の例であれば、
For gyou = 1 to 5 の場合、gyouには「1, 2, 3, 4, 5」、
For gyou = 3 to 8 の場合、gyouには「3, 4, 5, 6, 7, 8」
が入ります。
このカウント用の変数をうまく使うことで、Excelの行や列の値を取得したり設定したりできるのです。
STEPというのも使えます
ちなみにですが、終了番号の後に
STEP 間隔を開けたい番号
とすると、
1, 2, 3・・・ではなく、1, 3, 5・・・のように番号を飛ばすこともできます。
例えば、
For gyou = 1 to 10 step 2 の場合、gyouには「1, 3, 5, 7, 9」
For gyou = 0 to 10 step 3 の場合、gyouには「0, 3, 6, 9」
が入ります。
STEPを省略すると、「STEP 1」と同じ意味になります。
ですので、普通は指定しなくても大丈夫ですよ。
For~Next文を使ったサンプルプログラム
以下のような表があります。
名前毎に点数が入っていますね。
3列目(C列)に、A列とB列の文字を使って
○○さんはXX点です
という文字を設定してみましょう。
このプログラムを実行します。
Function test2() '変数を定義する Dim gyou As Integer '行の番号 '3~7行目を見ていきます For gyou = 3 To 7 '各行の3列目(C列)に「○○さんはXX点です」という文字を設定します Cells(gyou, 3).Value = Cells(gyou, 1).Value & "は" & Cells(gyou, 2).Value & "点です" Next End Function
簡単に説明します。
gyou変数には、3, 4, 5, 6, 7の番号が入ります。
gyou変数が3の場合、
Cells(gyou, 1).Value は Cells(3, 1).Value となり、3行目で1列目(A列)のセルの値(Aさん)が取得できます。
同じく、
Cells(gyou, 2).Value は Cells(3, 2).Value となり、3行目で2列目(B列)のセルの値(60)が取得できます。
これらの文字をつなげると、
Cells(gyou, 1).Value & “は” & Cells(gyou, 2).Value & “点です”
は
“Aさん” & “は” & “60” & “点です”
になります。
その結果、”Aさんは60点です“という文字が Cells(gyou, 3) に設定されます。
Cells(gyou, 3)は、Cells(3, 3) ですので、3行目の3列目(C列)ですね。
以降、gyou変数が 4, 5, 6, 7 の場合も同じようになります。
実行結果です。
結果列に表示されました!
(おまけ)Forの中にForを書くと、行と列が一度に扱える!
先ほどの例では、一つのFor文で行方向に値を取得しました。
Excelには「列」もありますので、同時に扱えると便利そうです。
そんな時は、Forの中にForをもう一つ書きます。
先ほどの表を少し変更して、点数を3列にしてみました。
算数・理科・社会ごとに点数が入ってますね。
3列目の「結果」に、3科目の合計点数を表示してみましょう。
このプログラムを実行します。
Function test3() '変数を定義する Dim gyou As Integer '行の番号 Dim retsu As Integer '列の番号 Dim goukei As Integer '合計 '合計を初期化する hyouji = 0 '3~7行目を見ていきます For gyou = 3 To 7 'ある行で「2~4列目」を見ていきます For retsu = 2 To 4 'ある行の「2~4列目の数字」を足します。 goukei = goukei + Cells(gyou, retsu).Value Next '各行の5列目(E列)に「○○さんは合計XX点です」という文字を設定します Cells(gyou, 5).Value = Cells(gyou, 1).Value & "は合計" & goukei & "点です" '次の行で使うために合計を0にしておく goukei = 0 Next End Function
簡単に説明します。
「For retsu = 2 To 4」から「Next」の部分で、「2~4列目」の値を取得しています。
ここ、Forの中にForが入ってますね。
ここで大事なことを。
「カウント用の変数」は、Forごとに別なものを使うのがポイントです!
今回は、列の値を取得したいので、retsu変数を追加してます。
gyou変数には、3, 4, 5, 6, 7 が入ります。
例えば、gyou変数が3の時、
もう一つのFor文によって、retsu変数は 2, 3, 4 という値が入っていきますので、
Cells(gyou, retsu).Value と書いておけば、
Cells(3, 2).Value は 算数の点数である 60、
Cells(3, 3).Value は 理科の点数である 80、
Cells(3, 4).Value は 社会の点数である 90
が入ります。
これらを合計すると 230 となります。
以降、gyou変数が 4, 5, 6, 7 の場合も同じようになります。
実行結果です。
行と列の値をうまく使って表示できてますね。
まとめ
いかがでしたでしょうか?
For~Next文を使うと、Excelで行と列の値をうまく扱うことができます。
Forを2つ使うのでちょっと頭が混乱しがちですが、落ち着いてじっくり考えると大丈夫ですよ。
使いこなせるととても便利です!
一度、お試しくださいね。
コメント
トラックバックは利用できません。
コメント (0)
この記事へのコメントはありません。