範囲の値を取得

にメンテナンス済み

VBA を活用するシチュエーションとして、最も一般的なのは、Excel ワークシートの操作です。

特定のセル、もしくは範囲の値を取得することは、Excel を使ったデータ処理の基本です。

例えば、関数だけでは解決できないような複雑な条件でデータを処理する場合、VBA を使ってデータを取得し、それを基に処理を行うことが有効です。

また、Excel 以外からデータを取得し、Excel で処理する場合も、VBA を使ってデータを取得することができます。

このページでは、VBA を使ってワークシート内の特定の範囲の値を取得する方法について解説します。

範囲の値を取得する方法

特定のセル、もしくは範囲の値を取得するには、WorksheetオブジェクトのRangeプロパティを使います。

範囲の値を取得する
Dim ws As Worksheet

' ワークシートを取得する
Set ws = ThisWorkbook.Worksheets("Sheet1")

' A1セルの値を取得する
Dim cellValue As Variant
cellValue = ws.Range("A1").Value

' A1:C10範囲の値を取得する
Dim rangeValues As Variant
rangeValues = ws.Range("A1:C10").Value

Rangeプロパティの引数として、関数で指定するようなアドレスを文字列で指定します。

同じくWorksheetクラスのCellsプロパティを使って、範囲の開始セルと終了セルを指定することもできます。

範囲の値を取得する
' A1セルからC10セルまでの範囲の値を取得する
Dim rangeValues As Variant
rangeValues = ws.Range(ws.Cells(1, 1), ws.Cells(10, 3)).Value

特定の範囲を取得する具体例

特定の範囲のデータを取得する

以下のコードは、開いたワークブックの特定のシートから、指定した範囲のデータを配列として取得する例です。

Sub GetRangeValues()
    Dim ws As Worksheet
    Dim targetRange As Range
    Dim data As Variant

    ' ワークシートを取得する
    Set ws = Thisworkbook.Worksheets("Sheet1")

    ' 特定の範囲を指定する
    Set targetRange = ws.Range("A1:C10")

    ' 範囲のデータを配列として取得する
    data = targetRange.Value

    ' 配列データを処理する(ここでは単に出力するだけ)
    Dim i As Long, j As Long
    For i = LBound(data, 1) To UBound(data, 1)
        For j = LBound(data, 2) To UBound(data, 2)
            Debug.Print data(i, j)
        Next j
    Next i
End Sub

このコードを実行すると、SalesDataシートのA1:C10範囲のデータが配列として取得され、デバッグウィンドウに A1, A2, A3, … の順に、セルの内容が出力されます。

範囲のデータを基に処理を行う

取得したデータをさらに処理することもできます。たとえば、特定の条件に基づいてデータをフィルタリングし、別のシートに出力することができます。

Sub FilterAndOutputData()
    ' ...(前のコードを続ける)

    ' データをフィルタリングして新しいシートに出力する
    Dim outputWs As Worksheet
    Set outputWs = wb.Worksheets.Add
    outputWs.Name = "FilteredData"

    Dim outputRow As Long
    outputRow = 1

    ' 条件に合致するデータのみ出力
    For i = 1 To UBound(data, 1)
        If data(i, 3) > 1000 Then ' 3列目の値が1000を超える場合
            For j = 1 To UBound(data, 2)
                outputWs.Cells(outputRow, j).Value = data(i, j)
            Next j
            outputRow = outputRow + 1
        End If
    Next i
End Sub

このコードは、3 列目の値が 1000 を超える行のみを新しいシートに出力します。

まとめ

冒頭でも述べたように、VBA を使ってワークシート内の特定の範囲の値を取得することは、Excel を使ったデータ処理の基本です。

その中でも特に利用頻度が高いのが、今回解説したRangeプロパティを使った方法です。

ぜひ、これを基にして、自分の業務に合わせた VBA コードを作成してみてください。

#コマンドプロンプト #バッチファイル #引数 #コマンドライン #コマンド