1

次のように、列番号で複数の異なる列の範囲を設定するとします。

Set rngData = shtData.Range(Columns(1), Columns(2), Columns(5))

しかし、範囲をたとえば行 5 から開始し、行 10 で終了したいだけです。

これを Set rngData ステートメントで指定できますか? どんな助けにも感謝します

編集。

KazJaw のおかげで、これは私のために働いた解決策です:

    Dim shtData, rngData
    Set shtData = Worksheets("Data")
    Set rngData = Union(shtData.Columns(1), shtData.Columns(2), shtData.Columns(5))
    Set rngData = Intersect(rngData, shtData.Rows("5:10"))
4

1 に答える 1

2

考えられる方法はいくつかありますが、どれがあなたに最適かはわかりません。私の最初の、おそらく最も単純な提案は次のとおりです。

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

ここに画像の説明を入力

于 2013-04-17T08:48:21.060 に答える