Excel(エクセル)の操作が楽になる方法と便利な使い方を紹介しています。

行や列の連続したセルを繰り返して処理したい!Excelマクロ(VBA)のFor~Next文

[ この記事の内容は Excel2013 でも使えます ] 
 
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)

  1. この記事へのコメントはありません。

Excel2010,2013クイックアクセスツールバーのおすすめコマンド「セルの操作」9個

Excel2010,2013で少しでも画面を広く使いつつ「ALT+数字キー」のショートカットも使う方法


最近のコメント

だーしゅ
IT関係のお仕事してます。
Excel大好き。

 

[当ブログについて]