考えられる方法はいくつかありますが、どれがあなたに最適かはわかりません。私の最初の、おそらく最も単純な提案は次のとおりです。
Set rngData = shtData.Range(Columns(1), Columns(2), Columns(5))
set rngData = Intersect(rngData, shtData.Rows("5:10"))
ただし、現在の範囲はとにかく機能しません。代わりに次のようなものを使用できます。
Set rngData = shtData.Range("A:B, E:E")
または、この方法よりも列の数値インデックスを保持する必要がある場合 (完全なコード):
Set rngData = Union(shtData.Columns(1), shtData.Columns(2), shtData.Columns(5))
set rngData = Intersect(rngData, shtData.Rows("5:10"))
編集 - 拡張および説明:以下のサブルーチンと内部のコメントを参照してください
Sub Test_Selection()
'Variant A- select range from column 1 to 5
ActiveSheet.Range(Columns(1), Columns(5)).Select
'Variant B- select range of columns: 1, 2 and 5
With ActiveSheet
Union(.Columns(1), .Columns(2), .Columns(5)).Select
End With
'This will not work
ActiveSheet.Range(Columns(1), Columns(2), Columns(5)).Select
End Sub
したがって、上記のバリアント B は、次のように連続しない範囲を選択できます。
最後に、興味のある方のために、Intesect について説明します。この手順により、次の図に示すような結果が得られます。
Sub Final_Combination()
Dim shtData As Worksheet
Set shtData = ActiveSheet
Dim rngData As Range
Set rngData = Union(shtData.Columns(1), shtData.Columns(2), shtData.Columns(5))
Set rngData = Intersect(rngData, shtData.Rows("5:10"))
'or simply combined in one line of code
Set rngData = Intersect(Union(shtData.Columns(1), _
shtData.Columns(2), _
shtData.Columns(5)), _
Rows("5:10"))
rngData.Select
End Sub