Excel:计算自动过滤表中单元格和单元格之间的差异

标签 excel vba filter subtotal

我有一个表,其中 A 列包含递增的数值,B 列是一堆名称。我需要根据名称过滤表格,并使用当前行中 A 列中的值与上面的单元格之间的差异更新 C 列。

For example, I'd like to have something like this
哪个,
when filtered according to the Name column, should update the difference like so

我尝试以几种不同的方式使用 SUBTOTAL 函数,但无济于事。理想情况下,一旦更改表中的过滤器,它就会更新。我尝试在 VBA 中执行此操作,但到目前为止,我已经获得了仅使用硬编码过滤条件进行过滤的宏。

excel 公式/python/vba 中的解决方案都受到欢迎并非常感谢!

如果这个问题不符合标准,我提前道歉,因为我是新来的:) 提前谢谢你!

@JvdV:This是我试图实现你的公式的结果,This是过滤后的。

最佳答案

修改后的答案

因此,在您的解释之后,我研究了一个公式,该公式将为您提供当前行 B 值减去之前 A 值出现的 B 值的差值。

=IFERROR(B2-LOOKUP(2,1/($A$1:A1=A2),$B$1:B2),0)

获取您的样本数据,它看起来像这样:

enter image description here

然后当你应用过滤器时,它看起来像这样:

enter image description here

因此,使用此解决方法时,您在未应用过滤器时没有正确的值,但在这种情况下,我假设您对 时的差异感兴趣是 过滤!

公式输入单元格C2并被拖了下来。

编辑

如果这不是您想要的答案,而您 在未过滤时需要这些值,请使用如下 UDF:
Public Function LastVisibleCell(CL As Range) As Long

Dim RW As Long, X As Long
RW = CL.Row - 1
On Error GoTo 1

If RW > 1 Then
    For X = RW To 1 Step -1
        If ActiveSheet.Rows(X).EntireRow.Hidden Then
        Else
            LastVisibleCell = Cells(CL.Row, 2).Value - Cells(X, 2).Value
            Exit For
        End If
    Next X
Else
1:    LastVisibleCell = 0
End If

End Function

从单元格 C2 调用它喜欢:=LastVisibleCell(A2)并向下拖动。当您应用过滤器时,单元格将更新。

请注意,这将需要很长时间才能更新大型数据集!

关于Excel:计算自动过滤表中单元格和单元格之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51855502/

相关文章:

vba - 将 excel 默认光标更改为箭头指针

python通过包含几个键值对作为条件的dict过滤dict列表

vba使用另存为而不打开文件

excel - 多用户共享Excel文件并自动刷新

java - 是否有任何库可以将 XLSX 文件转换为 CSV?

c# - BindingSource 按日期过滤

mysql - 如何跨组过滤表格及其内容

sql - 循环有条件导出表 SAS(大量变量)

excel - 想在 VBA 中创建多个 if 语句

vba - VBA 错误处理有哪些好的模式?