忽略每个VBA的空单元格

时间:2015-08-19 13:26:28

标签: excel vba excel-vba

我在循环中遇到问题(我在每个工作表中使用列并将它们复制到常用列中)在VBA中。我不想忽视空洞......任何想法?贝娄是我的代码

Application.ScreenUpdating = False
lastRowMaster = 1

For Each Ws In Sheets(Array("1L", "5L"))

        lastRow = Ws.Range("A" & Rows.Count).End(xlUp).row
        Ws.Range("A1:A" & lastRow).Copy Destination:=Worksheets("Podatki plana").Range("A" & lastRowMaster)
        lastRowMaster = Worksheets("Podatki plana").Range("A" & Rows.Count).End(xlUp).row + 1

Next

Application.ScreenUpdating = True
MsgBox "Done!"

3 个答案:

答案 0 :(得分:3)

我修改了这行代码:

Ws.Range("A1:A" & lastRow).Copy Destination:=Worksheets("Podatki plana").Range("A" & lastRowMaster)

对此:

Ws.Range("A1:A" & lastRow).SpecialCells(xlCellTypeConstants).Copy Destination:=Worksheets("Podatki plana").Range("A" & lastRowMaster)

使用.SpecialCells(xlCellTypeConstants)限定符仅选择其中包含值的单元格。您可以将xlCellTypeConstants更改为xlCellTypeFormulasthis MSDN article上列出的任何选项。

这样做的好处是您不必遍历每个单元格,这是一个非常好的解决方案,但会带来性能损失。

在Excel 2013中测试。

答案 1 :(得分:0)

当单元格不为空时,可能只是将每个目标单元格设置为原始单元格,如此

Application.ScreenUpdating = False
lastRowMaster = 1
lastRow = Ws.Range("A" & Rows.Count).End(xlUp).row
nextRow = 1
For Each Ws In Sheets(Array("1L", "5L"))     
    for i = 1 to lastRow
        if Not IsEmpty(Ws.Cells(i, 1)) then        
            Worksheets("Podatkiplana").cells(nextRow, 1) = Ws.cells(i,1)
            nextRow = nextRow + 1
        end if
    next i
Next

Application.ScreenUpdating = True
MsgBox "Done!"

答案 2 :(得分:0)

Application.ScreenUpdating = False
lastRowMaster = 1

For Each Ws In Sheets(Array("1L", "5L"))

        lastRow = Ws.Range("A" & Rows.Count).End(xlUp).row
        For i = 1 to lastrow
            lastRowMaster = Worksheets("Podatki plana").Range("A" & rows.Count).End(xlUp).row + 1
            If ws.cells(i, 1)<> "" Then Worksheets("Podatki plana").Cells(lastRowMaster, 1) = ws.cells(i,1) 

        next i  
Next

Application.ScreenUpdating = True
MsgBox "Done!"
相关问题