今回は離れたセル範囲を同時に指定する方法を紹介したいと思います。
離れたセル範囲を同時に取得する方法
離れたセル範囲を同時に指定するにはUnion
を使用します。
Union(Range("セル範囲1"), Range("セル範囲2"), ...)
まずUnion(
を書きます。
するとArg1,Arg2...
とのように表示されるので、指定したいセル範囲をそれぞれカンマ区切りで記述していきます。
例えばA・C・E列を対象にする場合、以下のように記述します。
Union(Range("A1:A5"), Range("C1:C5"), Range("E1:E5"))
セル範囲を指定した後にSelect
を指定することでA・C・E列が選択状態になるのが分かるかと思います。
Union(Range("A1:A5"), Range("C1:C5"), Range("E1:E5")).Select
このようにUnion
を使用することで一度に複数のセル範囲を指定することができるようになるわけです。
注意点
私が躓いた所の共有になるのですが、Union
で複数セル範囲を指定しそれをVariant
型に格納しても、初めに指定したセル範囲しか取得できない、というのがありました。
先ほどの例で言うと、A・C・E列を指定してもA列の内容しか格納できない、という感じですね。
Dim ary_RngVals As Variant
'A1:A5の値しか格納できない
ary_RngVals = Union(Range("A1:A5"), Range("C1:C5"), Range("E1:E5"))
こういう場合はDo Loop
なりFor
なりを使って格納するのがよさそうです。
'Do Until版
'A1:A5,C1:C5,E1:E5を取得する
Sub test_GetRngVals_DoUntil()
Dim i As Long
Dim ary_RngVals As Variant
ReDim ary_RngVals(1 To 3, 1 To 5)
i = 1
Do Until IsEmpty(Range("A1").Offset(i - 1, 0))
ary_RngVals(1, i) = Range("A1").Offset(i - 1, 0)
ary_RngVals(2, i) = Range("C1").Offset(i - 1, 0)
ary_RngVals(3, i) = Range("E1").Offset(i - 1, 0)
i = i + 1
Loop
End Sub
'For版
'A1:A5,C1:C5,E1:E5を取得する
Sub test_GetRngVals_For()
Dim i As Long
Dim ary_RngVals As Variant
ReDim ary_RngVals(1 To 3, 1 To 5)
For i = 1 To 5
ary_RngVals(1, i) = Range("A1").Offset(i - 1, 0)
ary_RngVals(2, i) = Range("C1").Offset(i - 1, 0)
ary_RngVals(3, i) = Range("E1").Offset(i - 1, 0)
Next i
End Sub
まとめ
今回は離れたセル範囲を同時に取得する方法を紹介しました。
Union
を使用することでまとめてセル範囲を指定することができるようになるので是非覚えておきましょう!
このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント