2013-04-16 95 views
0

我需要复制各个列中不相邻的数据并且数据行数可变(但该变量对每列都有相同的值) 。MS Excel VBA - 选择多个不同的动态范围

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

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

回答

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

+0

这假定我的专栏总是列的固定量(这里为20)除了对不对?在这种情况下是什么的益处: ( “A1:我” &rngDataRowCount&_ “N1:N” &rngDataRowCount&_ “P1:R” &rngDataRowCount) 超过: (“A1: R“&rngDataRowCount) – db579

+0

据我所知你没有连续的列范围,在Range(”A:R“)中有一些缺失,你只需要其中的一部分。好处是,您可以在'rngData'变量中设置所需的列,并且仅复制每个列与该范围分开的列。可能有一些替代技术取决于你喜欢设置'rngData'的方式。 –

+0

哦,我看到了 - 如果我设置范围有任何方法,我可以一次复制所有列而不是单独复制?感谢您通过 – db579