簡體   English   中英

減去兩個數組的結果在Excel中超過某個值

[英]Countif the Result of Subtracting Two Arrays Exceeds a Certain Value in Excel

我是數組公式的新手,並且遇到以下情況:

我有以下矩陣:

F   G   H   I   J  ...  R   S   T   U   V
1   0   0   1   1                       
    0   1       1       1   2   3   1   2
2   0   2   3   1       2   0   1   0   0
2   1   0   0   1       0   0   3   0   0

我的目標是計算行數,在該行中,列F:J的總和與列R:V的總和之差大於閾值。 至關重要的是,應僅包括具有完整數據的行:應忽略第1行(其中F1:J1列只有值)和第2行(其中F2:J2列只有一些值)。

如果閾值= 2.5,則解為1。即,第3行是唯一具有完整數據的行,其中F3:J3(8)之和與R3:V3之和(3)之和大於2.5(例如5> 2.5)。

我試圖基於@Tom Sharpe@QHarr的教導,以相當可悲的方式整理以下公式:

=COUNT(IF(SUBTOTAL(9,OFFSET(F1,ROW(F1:F4)-ROW(F1),0,1,COLUMNS(F1:J1)))-SUBTOTAL(9,OFFSET(R1,ROW(R1:R4)-ROW(R1),0,1,COLUMNS(R1:V1)))>2.5,IF(AND(SUBTOTAL(2,OFFSET(F1,ROW(F1:F4)-ROW(F1),0,1,COLUMNS(F1:J1)))=COLUMNS(F1:J1),SUBTOTAL(2,OFFSET(R1,ROW(R1:R4)-ROW(R1),0,1,COLUMNS(R1:V1)))=COLUMNS(R1:V1)),SUBTOTAL(9,OFFSET(F1,ROW(F1:F4)-ROW(F1),0,1,COLUMNS(F1:J1)))),IF(AND(SUBTOTAL(2,OFFSET(F1,ROW(F1:F4)-ROW(F1),0,1,COLUMNS(F1:J1)))=COLUMNS(F1:J1),SUBTOTAL(2,OFFSET(R1,ROW(R1:R4)-ROW(R1),0,1,COLUMNS(R1:V1)))=COLUMNS(R1:V1)),SUBTOTAL(9,OFFSET(R1,ROW(R1:V1)-ROW(R1),0,1,COLUMNS(R1:V1))))))

但是,即使我編輯矩陣以使F4:J4和R4:v4之和之間的差異也超過2.5,它似乎總是產生1的值。 可悲的是,我正在努力理解原因,並希望對此事給予任何指導。

嘗試這個:

=SUMPRODUCT((MMULT(F1:J4-R1:V4,--(ROW(INDIRECT("1:"&COLUMNS(F1:J4)))>0))>2.5)*(MMULT((LEN(F1:J4)>0)+(LEN(R1:V4)>0),--(ROW(INDIRECT("1:"&COLUMNS(F1:J4)))>0))=(COLUMNS(F1:J4)+COLUMNS(R1:V4))))

在此處輸入圖片說明

也許,用X1說(假設您已經標記了列):

=COUNTIF(Y:Y,TRUE)

在Y1中,無論您選擇什么截止值(例如2.5 ),在Y2中:

=((COUNTBLANK(F2:J2)+COUNTBLANK(R2:V2)=0)*SUM(F2:J2)-SUM(R2:V2))>Y$1

復制下來以適合。

我認為這可以做到,將您的AND乘以(*):

=SUMPRODUCT(--((SUBTOTAL(9,OFFSET(F1,ROW(F1:F4)-ROW(F1),0,1,COLUMNS(F1:J1)))-SUBTOTAL(9,OFFSET(R1,ROW(R1:R4)-ROW(R1),0,1,COLUMNS(R1:V1)))>2.5)*(SUBTOTAL(2,OFFSET(F1,ROW(F1:F4)-ROW(F1),0,1,COLUMNS(F1:J1)))=COLUMNS(F1:J1))*(SUBTOTAL(2,OFFSET(R1,ROW(R1:R4)-ROW(R1),0,1,COLUMNS(R1:V1)))=COLUMNS(R1:V1))>0))

可以簡化一點,但是時間短一點。

作為一個沒有易失函數的單元格中的數組公式:

=SUM((MMULT(--(LEN(F2:J5)*LEN(R2:V5)>0),--TRANSPOSE(COLUMN(F2:J2)>0))=5)*(MMULT(F2:J5-R2:V5,TRANSPOSE(--(COLUMN(F2:J2)>0)))>2.5))

應該做的把戲:D

只是另一種選擇...

=IF(NOT(OR(IFERROR(MATCH(TRUE,ISBLANK(F1:J1),0),FALSE),IFERROR(MATCH(TRUE,ISBLANK(R1:V1),0),FALSE))), SUBTOTAL(9,F1:J1)-SUBTOTAL(9,R1:V1), "Missing Value(s)")

![![![我的結果

我的方法與您嘗試從@TomSharp改編的方法有些不同,因為我正在驗證單元格中是否有數據(不是空白),然后執行計算,否則返回錯誤消息。 這仍然是一個數組函數調用,因此當您輸入公式時,請按ctrl+shft+enter

開頭if()的條件部分檢查是否每個范圍的單元格都不為空: if a match( true= isblank(cell))表示單元格為空白(壞),如果沒有匹配項...即沒有空白單元格,比賽將返回#NA“錯誤”(好)。 假是好=發現錯誤? 號((即無空白單元格))

然后,閾值條件變為:

=COUNTIF(X1:X4,">"&Threshold)' Note: no Array formula here

我給閾值(單元格W6 )指定了讀取能力的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM