首页 文章

如何使用vba在excel上选择包含数据的范围

提问于
浏览
0

如何修改下面的代码以从任何工作表中选择数据并将它们复制到另一个工作表,例如从工作表(“uno”)中选择和复制数据并将它们粘贴到工作表(“duo”) . 因为下面的代码仅在活动表上选择数据

Set tbl = ActiveCell.CurrentRegion 
tbl.Resize(tbl.Rows.Count, tbl.Columns.Count).Select

我有一个代码可以将数据从任何工作表复制到另一个工作表

Worksheets("uno").Range("A5:T5,A7:T56,W5,Y5,W7:W56,Y7:Y56").Copy _
Worksheets("duo").Range("B4")

但我想复制一个带有数据的范围并忽略空白单元格,因为范围 A5:T5 它并不总是具有数据的所有单元格具体地是该范围的最后一个单元格,其中有两个或三个,并且在范围 A7:T56 上也是相同的 .

我的问题是如何选择一个带数据的范围并忽略 A7:T56 范围内的空白单元格具体上是最后一行和最后一列有空白单元格

2 回答

  • 0

    好吧,对于第一部分,“代码仅在活动表上选择数据", you just need to activate the correct sheet (for example: "工作表("uno") . 激活") before executing "设置tbl = ActiveCell.CurrentRegion” .

  • 0

    我不确定我是否理解正确,但这些是我的想法:

    如果您不想激活工作表“uno”,则需要创建对该工作表的引用以直接访问它:

    Dim wkb As Excel.Workbook
    Dim wks As Excel.Worksheet
    Set wkb = Excel.Application.Workbooks("<name of your workbook>")
    Set wks = wkb.Worksheets("uno")
    

    如果您现在使用以下代码:

    wks.Range("<your range>").Copy
    

    您刚刚复制了所选单元格,现在可以将其粘贴到任何您想要的位置 .

    至于避免空单元格的部分:

    一般来说,在将它们添加到范围之前,您需要创建一种检查相关单元格是否为空的方法 .

    就个人而言,我会避免试图复制整个范围 . 相反,我会:1)逐个循环遍历您范围内的所有相关单元格2)每个单元格检查它是否为空3)如果为空,则转到下一个单元格4)如果不为空,则复制该单元格并粘贴到目标工作表5)当你到达最后一个单元格之后的单元格时,跳转到下一个相关单元格6),退出循环

    我会使用上面定义的wks对象 . 请注意,Range对象可以视为字符串的集合,因此您可以使用For ... Next循环进行迭代(For Each循环不保证索引顺序) . 这样的事情应该做:

    Dim rng As Range
    Set rng = wks.Range("<your range>")
    
    Dim numOfItems As Integer, itm, i As Integer
    numOfItems = rng.Count
    
    For i = 1 To numOfItems
    
        itm = rng.item(i)
    
        If itm <> "" Then
    
            'set value of the corresponding cell in your target worksheet to itm
            '<relevant cell>.Value = itm
        Else
            'do nothing
        End If
    Next i
    

    我希望它至少有点帮助 .

相关问题