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

时间:2014-12-25 23:45:09

标签: excel-vba vba excel

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

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 :(得分:0)

嗯,对于第一部分,“代码仅选择活动表上的数据”,您只需激活正确的工作表(例如:“工作表(”uno“)。 “)在执行” Set tbl = ActiveCell.CurrentRegion “之前。

答案 1 :(得分: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

我希望它至少有一点帮助。