使隐藏行的单元格变为空白
我是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