答案1
我有一個公式,當您將其放入任何標題為“更改”的灰色行時,該公式就會起作用
這是一個 doozie,它看起來像這樣:
=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 作為雙精度型,n2 作為雙精度型,n3 作為雙精度型,n4 作為雙精度型,n5 作為雙精度型)
索引 1 = 0 索引 2 = 0
'找出第一個數字If n1 > 0 then FirstNum = n1 index1 = 1 ElseIf n2 > 0 then FirstNum = n2 index1 = 1 ElseIf n3 > 0 then FirstNum = n3 index1 = 3 ElseIf n4 > 0 then FirstNum = n4 index1 = 44 index1 = 44 index1 = 44 index1 = 44 index1 = 44 index1 = End If
'找第二個數字If n5 > 0 then SecNum = n5 index2 = 5 ElseIf n4 > 0 then SecNum = n4 index2 = 4 ElseIf n3 > 0 then SecNum = n3 index2 = 3 ElseIf n2 > 0 then SecNum = n2 End If
'錯誤檢查 If (index1 = 0) Or (index2 = 0) Or (index1 - index2 = 0) then Diff2 = "ERROR" Else Diff2 = SecNum - FirstNum End If
結束功能