答案1
我有一个公式,当你把它放到标题为“更改”的灰色行中时,它就会起作用
它是一件奇妙的东西,它看起来像这样:
=INDEX(Values, SMALL(INDEX((Values<>0)*ROW(Values), 0), ROWS(Values)) - ROW(StartValue) + 1,1)- INDEX(Values, SMALL(INDEX((Values<>0)*ROW(Values), 0), COUNTIF(Values, "")+1) - ROW(StartValue)+1,1)
在哪里
Values
是值的范围,在我的例子中是H5:H9
StartValue
是值范围内的第一个单元格,对我来说这是H5
怎么运行的
- 该语句
INDEX((Values<>0)*ROW(Values), 0)
返回一个数组,0
当单元格为空白时,返回单元格的行号,当单元格不为空白时,返回单元格的行号 - 该
SMALL()
函数按升序对这些进行排序,然后返回数组中与其第二个参数相对应的值
因此在下面的示例电子表格中,INDEX((Values<>0)*ROW(Values), 0)
返回
0
6
7
8
0
SMALL()
排序后看起来如下:
0
0
6 <- Row of first nonzero value, second argument to SMALL(): =COUNTIF(Values, "")+1 = 3
7
8 <- Row of last nonzero value, second argument to SMALL(): ROWS(Values) = 5
- 现在我们知道了行,我们使用
INDEX()
来获取值。该行将- ROW(StartValue) + 1
返回的行转换SMALL()
为索引 - 因此,我们剩下第一次调用时最近的非零值,
INDEX()
并从中减去第二次调用时最远的非零值INDEX()
截屏
链接至电子表格
这里是下载此示例电子表格的链接。我通常使用 FormulaChop 来解释这些公式,但它不适用于 ROW() 函数。(完整披露:我编写了 FormulaChop)。因此,我提供了一个可以工作的公式版本,您可以在 FormulaChop 选项卡上看到它。
答案2
使用 A 列(A2:A3001)中的日期、B 列中的名称和 C 列中的值,将要查找的名称放在 F2 中,并在 G2 中使用此公式。
=SUMIFS(C:C, B:B, F2, A:A, AGGREGATE(14, 7, (A$2:A$3001)/(B$2:B$3001=F2), 1))-
SUMIFS(C:C, B:B, F2, A:A, AGGREGATE(15, 7, (A$2:A$3001)/(B$2:B$3001=F2), 1))
答案3
答案4
这可能是你正在寻找的 图片显示结果如下
公式就是这样的,使用起来非常简单 图片显示公式
如何创建公式?按 Alt+F11 并复制粘贴以下内容
公共函数 Diff2(n1 作为 Double,n2 作为 Double,n3 作为 Double,n4 作为 Double,n5 作为 Double)
索引1 = 0 索引2 = 0
'查找第一个数字 如果 n1 > 0 则 FirstNum = n1 index1 = 1 ElseIf n2 > 0 则 FirstNum = n2 index1 = 1 ElseIf n3 > 0 则 FirstNum = n3 index1 = 3 ElseIf n4 > 0 则 FirstNum = n4 index1 = 4 End If
'查找第二个数字 如果 n5 > 0 则 SecNum = n5 index2 = 5 ElseIf n4 > 0 则 SecNum = n4 index2 = 4 ElseIf n3 > 0 则 SecNum = n3 index2 = 3 ElseIf n2 > 0 则 SecNum = n2 index2 = 2 End If
'错误检查 如果 (index1 = 0) 或 (index2 = 0) 或 (index1 - index2 = 0) 则 Diff2 = "ERROR" 否则 Diff2 = SecNum - FirstNum End If
结束函数