仅插入公式可见单元格

我有3列的数据

AB&C,其中列A上的一个筛选器处于活动状态,我想要应用一个代码,以便公式应用于列C – 从第二个可见行到最后一个可见行。

这是我写的代码,但是如果我改变范围(“C:C”)或范围(“C2:C”),它不起作用

Sub Test() Dim rng As Range Range("C1").Select Set rng = Application.Intersect(ActiveSheet.UsedRange, Range("**C2:C2000**")) rng.Select Selection.Formula = "=RC[-1]+RC[-2]" End Sub 

有了一个积极的AutoFilter方法 ,大概你的第一行包含列标题标签,数据低于。 Range.CurrentRegion属性比Worksheet.UsedRange属性更适合这种情况。

带有xlCellTypeVisible的Range.SpecialCells方法将引用可见的单元格。 我发现工作表的SUBTOTAL函数提供了一个很好的非破坏性的方法,在尝试访问它们之前看到有可见的单元格。

几个With … End With语句将帮助您逐步隔离您正在查找的单元格。

 Sub test() 'note that not a single var is necessary With Worksheets("Sheet1") '<~~ surely you know what worksheet you are on With .Cells(1, 1).CurrentRegion With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0) '<~~one row down If CBool(Application.Subtotal(103, .Cells)) Then 'there are visible cells With .Columns(3).SpecialCells(xlCellTypeVisible) .Cells.FormulaR1C1 = "=RC[-1]+RC[-2]" End With End If End With End With End With End Sub 

我已经使用了Range.FormulaR1C1属性 (而不是你原来的Range.Formula属性 ),你使用的是xlR1C1而不是xlA1公式语法。