0

我需要复制不同列中的数据,这些列不相邻并且行数可变(但该变量的每列值相同)。

到目前为止,我的代码如下:

 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    |
 _____________________________
4

1 回答 1

1

我认为这对您来说可能是一个想法,只是为了使用循环。

编辑清楚:因此,您将分别复制每一列。将保留列到副本的顺序。如果您保持不变的目标范围规则,则每列都将以相同的顺序复制到适当的范围中。

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.Copy destinationRange

于 2013-04-16T05:52:26.753 回答