【问题标题】:How to NOT skip empty rows or cells in vba?如何不跳过 vba 中的空行或单元格?
【发布时间】:2010-07-21 06:47:27
【问题描述】:

有没有办法为每个循环执行一个 vba,循环一个范围但包括空单元格/行。

问题:当我从其他工作表复制行时,循环会自动跳过“A”列中空白的单元格并完全跳过整行,因此我会丢失该行中的一些数据,因为只有A 列是空白的。

例如。

 For Each cell In wks.Range("A2", "A1000")
    cell.EntireRow.Copy Destination:=Worksheets("Master").Range("A65536").End(xlUp).Offset(1, 0)     
 Next cell

【问题讨论】:

标签: vba excel


【解决方案1】:

我认为问题出在您正在使用的 End() 方法中使用偏移选择。当单元格为空时,扩展这样的范围选择会停止。尝试像这样明确指定所需的范围行。

ThisWorkbook.ActiveSheet.Range("E10:E20").Copy _
  ThisWorkbook.ActiveSheet.Range("F10:F20")

当然,对 col 和 row 进行硬编码不适用于您的情况,您将希望使用 wks 变量而不是 activesheet,但只需将行和 col 的字母和数字替换为正确的值通过连接。可能更接近于这个:

Dim fromCol as String, toCol as String, fromRow as String, toRow as String
' populate your 4 variables through your own logic here 

    wks.Range(fromCol & fromRow ":" & fromCol & toRow).Copy _
      wks.Range(toCol & fromRow & ":" & toCol & toRow)

祝你好运!

【讨论】:

  • 谢谢!我实际上并没有完全使用这种方法,但事实证明你的想法非常好。我用过:---
    For Each wks In ThisWorkbook.Worksheets If wks.Name "Master" Then wks.Range("A2:A1000").EntireRow.Copy Destination:=Worksheets("Master"). Range("A65536").End(xlUp).Offset(1, 0) End If Next wks
【解决方案2】:

这将找到 Master 中任何列的最后使用的行并粘贴到下一行。 Master必须至少填充一个单元格,否则会出错

Sub test()

    Dim cell As Range
    Dim wks As Worksheet
    Dim rNext As Range
    Dim wsMaster As Worksheet

    Set wsMaster = Worksheets("Master")
    Set wks = Sheet1

    For Each cell In wks.Range("A2", "A1000")
        Set rNext = wsMaster.Cells(wsMaster.Cells.Find("*", _
            wsMaster.Range("A1"), , , , xlPrevious).Row, 1).Offset(1, 0)
        cell.EntireRow.Copy Destination:=rNext
    Next cell

End Sub

它使用查找 A1 之前的下一个单元格的技术。它会查找作为通配符的“*”,并查找上一个单元格,它应该是电子表格中的最后一个单元格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多