Excel VBA | 中級・上級 VBA 総合セット(100問)

VBA
スポンサーリンク

VBA 配列・コレクション・Dictionary 練習問題(10問)+ 解答解説

ここでは 配列・コレクション・Dictionary をテーマにした中級~上級者向けの演習問題を 10 問用意し、模範コードと解説を添えています。
「大量データを配列で処理」「コレクションでオブジェクト管理」「Dictionaryで高速検索」など、実務で役立つテクニックを網羅しています。


Q1. Range(“A1:A10”) を配列に読み込み、平均値を求めよ

解答例

Sub AverageArray()
    Dim arr As Variant
    Dim i As Long, total As Double
    
    arr = Range("A1:A10").Value
    
    For i = 1 To UBound(arr, 1)
        If IsNumeric(arr(i, 1)) Then total = total + arr(i, 1)
    Next i
    
    Debug.Print "平均値 = " & total / UBound(arr, 1)
End Sub
VB

解説:
Range を配列に読み込むと二次元配列になる。UBound(arr,1) で行数を取得。


Q2. 配列を For Each で処理し、文字列を出力せよ

解答例

Sub ArrayForEach()
    Dim arr As Variant, item As Variant
    arr = Array("東京", "大阪", "名古屋")
    
    For Each item In arr
        Debug.Print item
    Next item
End Sub
VB

解説:
配列を For Each で処理する場合、取り出し変数は Variant 型でないとエラーになる。


Q3. 配列を逆順に処理せよ

解答例

Sub ReverseArray()
    Dim arr As Variant
    Dim i As Long
    arr = Array("A", "B", "C", "D")
    
    For i = UBound(arr) To LBound(arr) Step -1
        Debug.Print arr(i)
    Next i
End Sub
VB

解説:
UBoundLBound を使えば逆順処理が可能。


Q4. コレクションに文字列を追加し、全要素を出力せよ

解答例

Sub CollectionExample()
    Dim col As New Collection
    col.Add "Apple"
    col.Add "Banana"
    col.Add "Cherry"
    
    Dim item As Variant
    For Each item In col
        Debug.Print item
    Next item
End Sub
VB

解説:
Collection は順序付きのデータ構造。Add で追加、For Each で処理。


Q5. コレクションから特定要素を削除せよ

解答例

Sub CollectionRemove()
    Dim col As New Collection
    col.Add "A"
    col.Add "B"
    col.Add "C"
    
    col.Remove 2   '2番目の要素を削除
    
    Dim item As Variant
    For Each item In col
        Debug.Print item
    Next item
End Sub
VB

解説:
Collection はインデックス番号で Remove が可能。


Q6. Dictionary に顧客コードと顧客名を格納し、検索せよ

解答例

Sub DictionaryExample()
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    dict("C001") = "田中商事"
    dict("C002") = "佐藤工業"
    
    If dict.Exists("C001") Then
        Debug.Print "C001 = " & dict("C001")
    End If
End Sub
VB

解説:
Dictionary はキーと値のペアで管理。Exists で存在確認ができる。


Q7. Dictionary を使って重複データを削除せよ

解答例

Sub RemoveDuplicates()
    Dim arr As Variant
    Dim dict As Object
    Dim i As Long
    
    arr = Array("A", "B", "A", "C", "B")
    Set dict = CreateObject("Scripting.Dictionary")
    
    For i = LBound(arr) To UBound(arr)
        dict(arr(i)) = 1
    Next i
    
    Dim key As Variant
    For Each key In dict.Keys
        Debug.Print key
    Next key
End Sub
VB

解説:
Dictionary はキーが一意なので、重複を自動的に排除できる。


Q8. 配列を Dictionary に変換し、インデックス番号を値として格納せよ

解答例

Sub ArrayToDict()
    Dim arr As Variant, dict As Object
    Dim i As Long
    
    arr = Array("X", "Y", "Z")
    Set dict = CreateObject("Scripting.Dictionary")
    
    For i = LBound(arr) To UBound(arr)
        dict(arr(i)) = i
    Next i
    
    Debug.Print "Y のインデックス = " & dict("Y")
End Sub
VB

解説:
キー=配列要素、値=インデックス番号とすれば高速検索が可能。


Q9. 二次元配列を処理し、合計を求めよ

解答例

Sub Sum2DArray()
    Dim arr As Variant
    Dim i As Long, j As Long, total As Double
    
    arr = Range("B2:D10").Value
    
    For i = 1 To UBound(arr, 1)
        For j = 1 To UBound(arr, 2)
            If IsNumeric(arr(i, j)) Then total = total + arr(i, j)
        Next j
    Next i
    
    Debug.Print "合計 = " & total
End Sub
VB

解説:
二次元配列は (行, 列) でアクセス。大量データ処理に有効。


Q10. Dictionary の Keys を配列に変換して処理せよ

解答例

Sub DictKeysToArray()
    Dim dict As Object, keys As Variant
    Dim i As Long
    
    Set dict = CreateObject("Scripting.Dictionary")
    dict("A") = 1
    dict("B") = 2
    dict("C") = 3
    
    keys = dict.Keys
    
    For i = LBound(keys) To UBound(keys)
        Debug.Print keys(i)
    Next i
End Sub
VB

解説:
dict.Keys は配列として取得できる。キー一覧を処理するのに便利。


✅ 総まとめ

  • 配列 → 大量データを一括処理(一次元・二次元・逆順など)
  • Collection → 順序付きデータ管理(Add/Remove/For Each)
  • Dictionary → キーと値で高速検索、重複排除、マッピングに最適
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました