和風スパゲティのレシピ

日本語でコーディングするExcelVBA

データを1行ずつループする - For~Nextステートメント

データを1行ずつループして処理する方法を解説します。

For~Nextステートメントを使用します。

基本構文

For カウンタ変数 = 初期値 To 最終値

    ' ここにループしたい処理

Next

サンプルコード

Dim ws処理シート As Worksheet
Set ws処理シート = ThisWorkbook.Worksheets("○○")

Dim 最終行 As Long
最終行 = ws処理シート.Cells(ws処理シート.Rows.Count, 1).End(xlUp).Row

' すべての行をループ
Dim R As Long
For R = 2 To 最終行
    
    ' 処理例:C列=A列×B列
    ws処理シート.Cells(R, 3) = ws処理シート.Cells(R, 1) * ws処理シート.Cells(R, 2)
    
Next

解説

データを1行ずつループするには、
For~Nextステートメントを使用します。

使用した変数を1ずつ加算してループする機能ですので、
上記のコードはRが2,3,4,…,最終行までループします。


このループを使う場合はワークシートをちゃんと変数に入れておきましょう。

ThisWorkbook.Worksheets("○○")をいちいち書くのは冗長ですし、
かと言ってWorksheets("○○")と書いてしまうと、
なにかの拍子にアクティブブックが変わると不具合になります。


また、Forループに使用するカウンタ変数の名前も重要で、
よく見かける「i」は避けた方が良いです。


この「i」はカウンタを意味するイテレーターの頭文字なのですが、
なんでもiを使っているとWorksheets(i)など他のカウンタと被ってしまいます。

For i = 1 To Worksheets.Count
    For i = 2 To 最終行
        Worksheets(i).Cells(i, 1) = 1 ' ← こうは書けない
    Next
Next

 
結果Cells(j, 1)などj、kを単に登場順に当て始めてしまうと、
どの変数が何のためのものかわからず訳が分からなくなります。
 

変数名を付ける際は、

Dim R as long
ws処理シート.Cells(R, 1)
Dimas long
ws処理シート.Cells(, 1)

など、見るだけでなんの変数かわかるように名付けましょう。

これだけでコードが読みやすくなり、変数の取り違えを防げます。


「カウンタ変数は何のカウンタかわかるように命名する」
というルールでコーディングしていきましょう。

よろしければこちらもどうぞ。
www.limecode.jp