繰り返し処理
よく使う繰り返し処理をまとめます。
並んだセルから順番に読み取り合計する
例) A1~A10の数値を合算する
Dim total As Long, i As Long
For i = 1 To 10
total = total + Cells(i, 1).Value
Next
iを1から10まで順に増加させながら セルの値をtotalに加算しています。
また、単純に1ずつ増やす以外の方法もできます。
For i = 1 To 10 Step 2 '1,3,5... と1つおきに増やす
For i = 10 To 1 Step -1 '10,9,8... と1つずつ小さくしていく
並んだセルから順番に読み取る&別のセルに書き込む
例) A列の値を順に表示。B列にコピーする (今回は10行目まで)
Dim r as Range
For Each r in Range("A1:A10")
Debug.Print r.Value
r.Offset(0, 1).Value = r.Value
Next
rにはA1セルから順に入力されます。 Debug.Printにてrの値を、イミディエイトウィンドウに出力します r.Offset(0, 1)は rのセルから行方向、列方向にずらす数を指定します。この場合は列を+1するのでB列になります
VLOOKUPのように2つの表を参照する
例) A列にID, B列に名前が入力されており、 E列にIDが順不同に並んでいるとします。このときF列にA,B列に定義された名前を表示したい場合
Dim dic As Object: Set dic = CreateObject("Scripting.Dictionary")
Dim r As Range
' A列のIDに対する名前を辞書として保存
For Each r In Range("A1:A10")
dic(r.Value) = r.Offset(0, 1).Value
Next
' F列に、E列のIDからわかる名前を dicから取得する
For Each r In Range("E1:E10")
r.Offset(0, 1).Value = dic(r.Value)
Next
dic はディクショナリ(もしくは連想配列)です。ディクショナリは一意のキー(key)に対する値(value)をプログラム実行中のみ保存しておくことができます。
Dictionaryで利用できる関数一覧
' keyが存在するかチェック
If dic.Exists(value) Then
' valueがある時の処理
Debug.Print dic(value)
Else
' valueが含まれていない時の処理
End If
' 辞書に含まれるkeyの個数
Debug.Print dic.Count
' 辞書のkeyを1つずつ取り出す
Dim i As Long
For i = 0 To dic.Count - 1
Debug.Print dic.Keys(i)
Next
Dim key as Variant
For Each key in dic
Debug.Print key, dic(key)
Next
' 辞書の初期化
dic.RemoveAll
並んだセルから順番に読み書き (数字で指定する方法)
例) A列の値を順に表示
Dim i as Long
For i = 1 to 10
Debug.Print Cells(i, 1).Value
Cells(i, 2).Value = Cells(i, 1).Value 'B列にA列の値をコピー
Next
iに参照したい行番号を指定します。 Cells(1,1) は Range(“A1”) と同じです。