簡體   English   中英

VBA-通過列號設置范圍時如何設置開始和結束行

[英]VBA - How to set the start and end row when setting a range by column numbers

假設我按列號設置多個不同列的范圍,如下所示:

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"))

可能的方法很少,但我不確定哪種方法最適合您。 我的第一個也是最簡單的建議是:

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

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM