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

时间:2017-07-10 10:40:18

标签: excel vba excel-vba excel-formula

我希望单元格按增量顺序编号,具体取决于过滤器。我发现最简单的方法是检查上面的行是否隐藏,然后将其自身编号为1(如果隐藏,前一个单元格值+ 1,如果没有隐藏)。
我试图使用公式

来实现这一目标
=IF(COUNTA(ADDR)>SUBTOTAL(103, ADDR), 1, ADDR+1)

ADDR 的定义如下:

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

SUBTOTAL 函数返回 #VALUE ,因为它不能包含3-D引用。
尝试将
SUBTOTAL() 替换为 AGGREGATE()同样的问题。

尝试使用 VALUE() 函数将 ADDR 字符串转换为值。

我尝试使用 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

非常感谢能通过 FORMULAS 获取此功能,而不是 VBA

2 个答案:

答案 0 :(得分:1)

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

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

这可以在A列中,当您在B,C等上进行过滤时,它只会对可见行进行编号

您可能还需要查看here,以获取其他说明。

修改 假设您有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列中的编号将显示可见的行号。

答案 1 :(得分:0)

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

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

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