Excel VBA 逆引き集 | 配列の一括変更

Excel VBA
スポンサーリンク

配列の一括変更

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で範囲確認: 配列サイズを動的に扱うときは必須。
タイトルとURLをコピーしました