簡體   English   中英

MS Excel VBA-選擇多個不同的動態范圍

[英]MS Excel VBA - Selecting multiple distinct dynamic ranges

我需要將數據復制到彼此不相鄰的各個列中,這些列將具有可變的行數(但該變量的每一列將具有相同的值)。

到目前為止,我的代碼如下:

 Set MyXL = CreateObject("Excel.Application")
 MyXL.Workbooks.Add
 MyXL.Worksheets(1).Name = SheetName 

 Set shtData = Worksheets("Data")
 rngDataRowCount = shtData.Range("A1048576").End(xlUp).Row
 Set rngData = shtData.Range("A1:I" & rngDataRowCount)
 rngData.Copy

 MyXL.Worksheets(SheetName).Activate
 MyXL.Worksheets(SheetName).Paste
 Range("A1").Select

只要各列彼此相鄰,它就可以正常工作,但不允許我添加其他列。

我希望可以做類似的事情:

     Set rngData = shtData.Range("A1:I, N1:N, P1:R" & rngDataRowCount)

但是此聲明失敗。 或者,有什么方法可以設置多個范圍,然后追加到剪貼板? 任何幫助,當然,贊賞。

編輯:為了澄清我正在嘗試實現的功能,讓我們說我有下表:

 _________________________________________________________
 | col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 |
 _________________________________________________________
 | q    | w    | e    | r    | t    | y    | u    | i    |
 _________________________________________________________
 | q    | w    | e    | r    | t    | y    | u    | i    |
 _________________________________________________________

我希望能夠選擇一個范圍,例如col1,col2,col5和col8,這樣它就可以一次性復制那些列中所有填充的單元格,以便粘貼可以實現以下目的:

 _____________________________
 | col1 | col2 | col5 | col8 |
 _____________________________
 | q    | w    | t    | i    |
 _____________________________
 | q    | w    | t    | i    |
 _____________________________

我認為這可能對您來說是一個主意,只是使用循環即可。

編輯以使其清楚:結果,您將分別復制每一列。 列到副本的順序將保留。 如果您保持恆定的目標范圍規則,則每列將以相同順序復制到適當的范圍內。

Sub Answer()
    Dim shtData As Worksheet
    Set shtData = Worksheets("Data")
    Dim rngDataRowCount
    rngDataRowCount = shtData.Range("A1048576").End(xlUp).Row
    Dim rngData As Range

    '<--start of modification
    Dim rngCol As Range
    Set rngData = shtData.Range("A1:I" & rngDataRowCount & _
                    ",N1:N" & rngDataRowCount & _
                    ",P1:R" & rngDataRowCount)

'<---variant A- keep columns separated into destination range
    For Each rngCol In rngData.Columns
         rngCol.Copy rngCol.Offset(0, 20)   'here, 20 columns to right
    Next
**'here edited**

'<---variant B- copy columns into new location, united, no loop
         rngData.Copy Range("zz1")           'here, set destination as single top-left cell
End Sub

一個技巧-如果您將列復制到其他Range中,請使用所顯示的Range語法。 Range.Copy destinationRange

暫無
暫無

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

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