【Excel VBA】離れたセル範囲を同時に指定する方法を紹介【Union】

Excel
スポンサーリンク

今回は離れたセル範囲を同時に指定する方法を紹介したいと思います。

スポンサーリンク

離れたセル範囲を同時に取得する方法

離れたセル範囲を同時に指定するにはUnionを使用します。

Union(Range("セル範囲1"), Range("セル範囲2"), ...)

まずUnion(を書きます。
するとArg1,Arg2...とのように表示されるので、指定したいセル範囲をそれぞれカンマ区切りで記述していきます。

離れたセル範囲を同時に取得する方法_1

例えば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
離れたセル範囲を同時に取得する方法_2

このようにUnionを使用することで一度に複数のセル範囲を指定することができるようになるわけです。

スポンサーリンク

注意点

私が躓いた所の共有になるのですが、Unionで複数セル範囲を指定しそれをVariant型に格納しても、初めに指定したセル範囲しか取得できない、というのがありました。

先ほどの例で言うと、A・C・E列を指定してもA列の内容しか格納できない、という感じですね。

注意点_1
Dim ary_RngVals             As Variant

'A1:A5の値しか格納できない
ary_RngVals = Union(Range("A1:A5"), Range("C1:C5"), Range("E1:E5"))
注意点_2

こういう場合は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
注意点_3
スポンサーリンク

まとめ

今回は離れたセル範囲を同時に取得する方法を紹介しました。

Unionを使用することでまとめてセル範囲を指定することができるようになるので是非覚えておきましょう!

このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!

コメント

タイトルとURLをコピーしました