Excel宏VBA - 选择要复制到新工作表的多个列和行

时间:2013-12-26 22:05:23

标签: excel

我在excel中编写宏的问题。我试图获得excel自动复制工作表的内容在a3:f3,k3,m3:n3,s3,u3:ab3范围内,然后每行包含其中的数据,直到它遇到一个空行。我可以让它做一个专栏,但我无法弄清楚如何做我需要的奇异范围。任何提示或帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

试试这个:

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

执行代码后,数据在Sheet 2中将如下所示。

sample2

希望这是你的开始。
随意使用它以满足您的需求。

答案 1 :(得分:1)

以下方法使用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

答案 2 :(得分:0)

让您了解多个范围和每个范围(单元格)的内容:

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