簡體   English   中英

我需要 ARRAYFORMULA() 來使用另一行中的條件來決定要計算的內容

[英]I need ARRAYFORMULA() to use conditions in another row to decide what to calculate

這是我在 G5 中的公式=ARRAYFORMULA(IF(AND(J5:J17=true,H5:H17=false),E5:E17*F5:F17*1.075,IF(AND(J5:J17=true,H5:H17=TRUE),0,IF(and(J5:J17=false,H5:H17=false),E5:E17*F5:F17,IF(and(J5:J17=false,H5:H17=true),0)))))

如果列 H、I 和 J 全部為假,則此方法有效,但是一旦我開始將 H、I 或 J 中的任何內容設置為真,公式就會停止工作。

在此處輸入圖像描述

在此處輸入圖像描述

感謝您的幫助,我真的被這個難住了。

認為您可以將公式一直簡化為:

=arrayformula(E5:E17*F5:F17*not(H5:H17)*if(J5:J17,1.075,1))

幾點建議:

  • 您要實現的目標歸結為:'在每一行上,給我 colE 中單元格的值 * colF 中單元格的值,如果勾選了 colJ 中的單元格,則乘以 1.075,除非 colH 中的單元格是勾選,在這種情況下給我 0。
  • 您不需要根據 TRUE/FALSE 評估復選框,因為它們本身包含 TRUE/FALSE(因此公式中的 =TRUEs 和 =FALSEs 是多余的)
  • AND/OR 在 arrays 中並沒有按照您最初希望的方式工作,因為它們正在聚合函數(即它們接受 arrays 作為設計輸入)並將它們包裝在 ARRAYFORMULA 中以嘗試讓它們逐行評估輸入 arrays行或逐列不起作用。 從歷史上看,這個問題的答案是使用 Boolean 代數(其中 AND 是 * & OR 是 +,FALSE=0 和 TRUE<>0),正如我在這里所做的那樣,這通常是最緊湊的表示,但最近它是根據其他答案之一,也可以使用 MAP 逐個元素地處理 arrays(在這種情況下仍然可以使用 AND/OR)
  • 如果你想返回 TRUE/FALSE (1/0) 以外的值作為邏輯評估的結果(比如你想要 TRUE=1.075 & FALSE=1 的 colJ),你只需要真正使用 IF 語句; 否則你可以省略它們而只使用布爾值。

利用:

 =ARRAYFORMULA(IF((J5:J17=true)*(H5:H17=false), E5:E17*F5:F17*1.075,
  IF((J5:J17=true)*(H5:H17=TRUE), 0,
  IF((J5:J17=false)*(H5:H17=false), E5:E17*F5:F17,
  IF((J5:J17=false)*(H5:H17=true), 0)))))

您可以嘗試使用 MAP 進行此操作:

=MAP(J5:J17,H5:H17,E5:E17,F5:F17,LAMBDA(j,h,e,f,
IF(AND(j=true,h=false),e*f*1.075,IF(AND(j=true,h=TRUE),0,IF(and(j=false,h=false),e*f,IF(and(j=false,h=true),0))))))

暫無
暫無

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

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