使隐藏行的单元格变为空白

我是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 

感谢您的帮助! 金

我总是喜欢用长整数循环,避免ActiveCells。 closures屏幕更新以及如果它会很长。

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

更新:我只是testing这个,它的工作原理:

  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 

如果没有公式,并且你想要一个非循环解决scheme,那么你可以简单地运行这个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 ,对于隐藏的行是true的。 现在true返回单元格值,而false只返回一个简单的空string。 INDEX只是为了强制Evaluate返回一个数组,然后简单地设置范围。 一个计算中没有任何循环的一切:D