配列の一括変更
Excel VBAで「配列の中身をまとめて変更したい」とき、1つずつループで処理する方法もありますが、一括変更のパターンを覚えておくと効率的です。初心者向けに、コード例とテンプレートをかみ砕いて説明します。
基本の考え方
- Rangeを配列に読み込む → 配列内で変更 → 一括書き戻し
- ループでまとめて変更(例:全要素を2倍、文字列に接頭辞を付ける)。
- Replaceや関数を使って一括変換。
- 巨大配列でも高速:セルを直接操作せず、配列で処理するのが鉄則。
テンプレ1:数値配列を一括で2倍にする
Sub Array_BulkChange_Numeric()
Dim arr As Variant
arr = Array(10, 20, 30, 40, 50)
Dim i As Long
For i = LBound(arr) To UBound(arr)
arr(i) = arr(i) * 2
Next i
' 結果確認
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
End Sub
VB- ポイント: 全要素を一括で変更。小規模ならこれで十分。
テンプレ2:文字列配列に接頭辞を付ける
Sub Array_BulkChange_String()
Dim arr As Variant
arr = Array("りんご", "みかん", "バナナ")
Dim i As Long
For i = LBound(arr) To UBound(arr)
arr(i) = "商品:" & arr(i)
Next i
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
End Sub
VB- 結果:
- 商品:りんご
- 商品:みかん
- 商品:バナナ
テンプレ3:シートの値を配列に読み込み → 一括変更 → 書き戻し
Sub Array_BulkChange_Range()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A2:A10")
Dim v As Variant: v = rg.Value
Dim r As Long
For r = 1 To UBound(v, 1)
v(r, 1) = "No." & v(r, 1) ' 接頭辞を付ける
Next r
' 一括書き戻し
rg.Value = v
End Sub
VB- ポイント:
- Rangeを配列に読み込むと二次元配列になる。
- 配列内で変更してから一括で書き戻すと高速。
テンプレ4:条件付きで一括変更(例:100以上なら「大」)
Sub Array_BulkChange_Condition()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("C2:C10") ' 数量列
Dim v As Variant: v = rg.Value
Dim r As Long
For r = 1 To UBound(v, 1)
If v(r, 1) >= 100 Then
v(r, 1) = "大"
Else
v(r, 1) = "小"
End If
Next r
rg.Value = v
End Sub
VB- ポイント: 条件判定も配列内でまとめて処理できる。
テンプレ5:Replaceで文字列を一括変換
Sub Array_BulkChange_Replace()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("B2:B10") ' 商品名列
Dim v As Variant: v = rg.Value
Dim r As Long
For r = 1 To UBound(v, 1)
v(r, 1) = Replace(v(r, 1), "りんご", "Apple")
Next r
rg.Value = v
End Sub
VB- ポイント: 文字列置換も配列内で一括処理。
例題で練習
'例1:数値配列を2倍
Sub Example1()
Array_BulkChange_Numeric
End Sub
'例2:文字列配列に接頭辞を付ける
Sub Example2()
Array_BulkChange_String
End Sub
'例3:シートの値を一括変更
Sub Example3()
Array_BulkChange_Range
End Sub
'例4:条件付きで「大」「小」に変換
Sub Example4()
Array_BulkChange_Condition
End Sub
'例5:文字列を置換
Sub Example5()
Array_BulkChange_Replace
End Sub
VB初心者向けポイント
- セル直操作は遅い: 巨大データは必ず配列に読み込んで処理。
- 一括書き戻しが鉄則:
Range.Value = 配列で一瞬。 - 条件付き変更も簡単:
If文を配列ループに組み込む。 - 文字列処理はReplace: 日本語データの置換にも便利。
- UBound/LBoundで範囲確認: 配列サイズを動的に扱うときは必須。
