ExcelmacrosVBA – select多个列和行来复制到新的工作表

我在Excel中编写我的macros有一个问题。 我试图让Excel自动复制工作表的内容在a3:f3,k3,m3:n3,s3,u3:ab3 ,然后每行都有数据在其下面,直到它到达一个空行。 我可以把它做一个单一的列,但我不知道如何做我需要的奇怪范围。 任何提示或帮助,将不胜感激。

尝试这个:

 Sub test() Dim my_range As Range Dim ws As Worksheet Set my_range = ThisWorkbook.Sheets("Sheet1").Range("A3:F3,K3,M3:N3,S3,U3:AB3") Set ws = ThisWorkbook.Sheets("Sheet2") Do If Application.WorksheetFunction.CountA(my_range) > 0 Then my_range.Copy ws.Range("A" & ws.Rows.Count).End(xlUp).Offset(1, 0) Set my_range = my_range.Offset(1, 0) Else Exit Do End If Loop End Sub 

这将复制Sheet2中最后一个空行中的Range("A3:F3,K3,M3:N3,S3,U3:AB3")中的值。

Sheet1中的示例数据:

SAMPLE1

执行代码后,数据将如图2所示。

SAMPLE2

希望这个得到你的开始。
玩它,以满足您的需求。

下面的方法使用Find来确定感兴趣列中最后使用的行,然后将结果范围复制到新工作表的单元格A3

 Sub DetermineRange() Dim ws As Worksheet Dim rng1 As Range Dim rng2 As Range Set rng1 = Range("a3:f3,k3,m3:n3,s3,u3:ab3") Set rng2 = rng1.EntireColumn.Find("*", [a1], , , , xlPrevious) Set rng1 = Intersect(rng1.EntireColumn, Rows(rng1.Row & ":" & rng2.Row)) Set ws = Sheets.Add rng1.Copy ws.[a3] Application.CutCopyMode = False End Sub 

有些东西让你开始了多个范围和每个范围内的范围(单元格):

 Sub DisplayRanges() Dim oItem As Variant, aRanges As Variant, oRng As Range aRanges = Array("a3:f3", "k3", "m3:n3", "s3", "u3:ab3") For Each oItem In aRanges Debug.Print "oItem: " & oItem For Each oRng In ActiveSheet.Range(oItem) Debug.Print vbTab & oRng.Address Next Next End Sub