器用貧乏の独り言

器用貧乏なおっさんが気の向くままに。

【VBA】配列の使い方をサンプルコードで紹介!

◇前置き

今日は、Excel VBAで配列を活用する方法について紹介します。

配列は、大量のデータを効率的に処理するための強力なツールです。

サンプルコードを交えながら、具体的な事例を紹介します。

◇配列を使ったデータの平均値計算

データシートにたくさんの数値がある場合、通常はセルから値を取得して平均値を計算しますが、これは時間がかかります。

しかし、配列を使えば、一度に複数の値を読み込んで高速に平均値を計算できます。

Sub 配列を使った平均値計算()
    Dim dataRange As Range
    Dim dataArray() As Variant
    Dim sum As Double
    Dim average As Double
    Dim count As Long
    Dim cellValue As Variant

    Set dataRange = Range("A2:A1000") ' データが入っている範囲を指定
    dataArray = dataRange.Value      ' データを配列に一括読み込み

    count = 0
    sum = 0

    For Each cellValue In dataArray
        If IsNumeric(cellValue) Then
            sum = sum + cellValue
            count = count + 1
        End If
    Next cellValue

    If count > 0 Then
        average = sum / count
        MsgBox "平均値は: " & average
    Else
        MsgBox "データが見つかりませんでした。"
    End If
End Sub

◇配列を使ったデータの一括処理

データシートから値を読み込んで、配列に格納し、あとで一括で処理することも可能です。

以下の例では、データを配列に読み込み、2倍にしてシートに戻すシンプルな処理を行います。

Sub 配列を使った一括処理()
    Dim dataRange As Range
    Dim dataArray() As Variant
    Dim resultArray() As Variant
    Dim i As Long

    Set dataRange = Range("A2:A1000") ' データが入っている範囲を指定
    dataArray = dataRange.Value      ' データを配列に一括読み込み

    ReDim resultArray(1 To UBound(dataArray, 1), 1 To UBound(dataArray, 2))

    For i = 1 To UBound(dataArray, 1)
        ' 2倍にして結果をresultArrayに格納
        resultArray(i, 1) = dataArray(i, 1) * 2
    Next i

    ' 結果をシートに一括出力
    Range("B2").Resize(UBound(resultArray, 1), UBound(resultArray, 2)).Value = resultArray
End Sub

◇配列を使った複数条件のフィルタリング

特定の条件に合致するデータだけを抽出する場合も、配列を使って効率的に処理できます。

以下の例では、特定の条件を満たすデータだけを別のシートに抽出します。

Sub 配列を使ったデータフィルタリング()
    Dim dataRange As Range
    Dim dataArray() As Variant
    Dim filteredArray() As Variant
    Dim i As Long
    Dim j As Long
    Dim condition As Double

    Set dataRange = Range("A2:C1000") ' データが入っている範囲を指定
    dataArray = dataRange.Value      ' データを配列に一括読み込み

    ReDim filteredArray(1 To UBound(dataArray, 1), 1 To UBound(dataArray, 2))

    condition = 100 ' 100より大きいデータだけを抽出

    j = 1
    For i = 1 To UBound(dataArray, 1)
        If dataArray(i, 3) > condition Then
            ' 条件に合致するデータをfilteredArrayに格納
            filteredArray(j, 1) = dataArray(i, 1)
            filteredArray(j, 2) = dataArray(i, 2)
            filteredArray(j, 3) = dataArray(i, 3)
            j = j + 1
        End If
    Next i

    ' 結果を別のシートに一括出力
    Sheets("フィルタリング結果").Range("A2").Resize(j - 1, UBound(dataArray, 2)).Value = filteredArray
End Sub

◇最後に

これらのサンプルコードをベースに様々なデータ処理をおこなうことができます。

データ数が少ないと配列の有難みを感じづらいのですが、データ数が膨大になってくると配列の有用性がよく分かります。

この記事も誰かの役に立つと嬉しいです。