使隐藏行的单元格为空

时间:2017-09-15 17:54:48

标签: excel vba excel-vba

我是VBA的新手,我正在尝试优化电子表格以便工作。

最终,我正在尝试编写一个查找隐藏行的脚本。如果隐藏了一行,则该行中“O”列中的单元格应为空白。这就是我所拥有的(这不起作用,可能完全错误):

Dim rng As Range
Dim c As Range

Set rng = Range("A1:A1500")
For Each c In rng
    If c.EntireRow.Hidden = True Then
        ActiveCell.Offset(0, 14).Activate
        ActiveCell.Value = ""
    End If
Next c

感谢您的帮助! 金

3 个答案:

答案 0 :(得分:2)

我总是喜欢用长整数循环并避免使用ActiveCells。如果它会很长,也会关闭屏幕更新。

Dim c As Long

For c = 1 To 1500
    If Rows(c).Hidden = True Then
        Cells(c, "O") = ""
    End If
Next c

答案 1 :(得分:1)

更新:我刚刚对此进行了测试并且有效:

  Dim rng As Range
  Dim c As Range

  Set rng = Range("A1:A1500")
  For Each c In rng
    If c.EntireRow.Hidden = True Then
      Range("O" & c.Row).Value = ""
    End If
  Next

答案 2 :(得分:0)

如果没有公式并且你想要一个非循环解决方案,你只需运行这个1-liner:

Range("O1:O1500") = Evaluate("INDEX(IF(SUBTOTAL(103,OFFSET(O1,ROW(O1:O1500)-1,)),O1:O1500,""""),)")

OFFSET只会返回很多#VALUE!,但仍有单格参考。这是让SUBTOTAL输出数组(而不是单个值)的关键,其中选项3只返回数组内所有项目的1,而option + 100将排除隐藏的行。在IF中使用此内容对于可见行只有true,对于隐藏行只有false。现在true返回单元格值,而false只返回一个简单的空字符串。 INDEX仅用于强制Evaluate返回一个数组,然后只为该范围设置数组。一次计算中的所有内容都没有任何循环:D