自动编号取决于行或列被隐藏

我希望单元格根据filter以增量顺序编号。 我发现最简单的方法是检查上面的行,如果它是隐藏或不,然后编号自己从1,如果隐藏和前一个单元格值+ 1,如果不隐藏。
我试图用公式来实现这一点

=IF(COUNTA(ADDR)>SUBTOTAL(103, ADDR), 1, ADDR+1) 

ADDR 的定义如下:

 =ADDRESS(ROW()-1,COLUMN(), 4, TRUE) 

SUBTOTAL 函数返回 #VALUE 因为它不能包含三维引用。
尝试用 AGGREGATE() replace SUBTOTAL() 函数同样的问题。

试图使用 VALUE() 函数将 ADDR string 转换 为值。

我试图使用 VBA

 Public Function IsHid(i As Integer) Dim re As Range, x As Integer Set re = Range("A" & i) If re.EntireRow.Hidden Then Set re = Range("A" & i + 1) re = 1 Else x = re.Value + 1 Set re = Range("A" & i + 1) re = x End If End Function 

上述函数返回 #VALUE
下面的函数也返回 #VALUE

 Public Function IsHid(i As Integer) If Excel.ThisWorkbook.ActiveSheet.Rows(i).Hidden Then Cells(i + 1, 1).Value = 1 Else Cells(i + 1, 1).Value = Cells(i, 1).Value + 1 End If End Function 

非常感谢,如果这个function可以通过 FORMULAS 而不是 VBA

使用小计与计数(A)结合:

=SUBTOTAL(3,B$2:B2)并粘贴。

这可以在列A中,并且只在B,C等上过滤时才会对可见行进行编号

您也可以在这里看看,以获得更多解释。

编辑:假设你有Sheet1,并填写范围A:G。 在A列中,您需要问题中所述的编号。 然后范围A1将保存一个标题(例如FilteredID)和范围B:G将保存您的其他值。

在范围A2中,您将公式=Subtotal(3, B$2:B2) ,在范围A3中这将是=Subtotal(3, B$2:B3) ,在A4 =Subtotal(3, B$2:B4)等等。现在,当你在列B,C,D等上过滤,所以你将有不可见的行,列A中的编号将显示可见的行号。

例如,假设您想要在第2行和A列中开始编号,并且您有Excel 2010或更高版本:

 =AGGREGATE(4,5,A$1:A1)+1 

只要根据需要调整开始单元格。