範囲の値を取得
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 コードを作成してみてください。