改進巢狀 IF 和 CHOOSE 公式

改進巢狀 IF 和 CHOOSE 公式

我收到 CSV 文件形式的未結帳工作訂單的每週狀態。這包括與完成過程中不同步驟相關的 3 字母狀態代碼。

我需要用簡單語言定義來取代狀態代碼。

我的電子表格會自動執行此操作,但我覺得我現在的電子表格效率確實很低。執行此操作的工作表本身就超過 75 MB,並且使整個過程陷入困境。

我目前的工作表的工作方式是一個 16 列網格,其中包含來自 CSV 的狀態代碼 [@[SO Codes] 和第 1 行的靜態程式碼清單。

=IF([@[SO Codes]]=Table3[[#Headers],[AA]],1,0)
=IF([@[SO Codes]]=Table3[[#Headers],[CA]],2,0)
=IF([@[SO Codes]]=Table3[[#Headers],[CAN]],3,0)
ETC

因此,每個狀態代碼都會分配一個從 1 到 16 的數字,該數字顯示在 16x[開啟的工單數量] 網格上。

最後一欄是:

=SUBTOTAL(9,E2:T2)
=SUBTOTAL(9,E3:T3)
=SUBTOTAL(9,E4:T4)
ETC

最後,它會輸入我的追蹤器,其中的線條如下所示: =CHOOSE([@Status],IF([@Status]=J2,L2),IF([@Status]=J3,L3),IF([@Status]=J4,L4),IF([@Status]=J5,L5),IF([@Status]=J6,L6),IF([@Status]=J7,L7),IF([@Status]=J8,L8),IF([@Status]=J9,L9),IF([@Status]=J10,L10),IF([@Status]=J11,L11),IF([@Status]=J12,L12),IF([@Status]=J13,L13),IF([@Status]=J14,L14),IF([@Status]=J15,L15),IF([@Status]=J16,L16),IF([@Status]=J17,L17))

其中 L 列是明文代碼定義列表,J3 從狀態代碼計算器取得小計。

我忍不住必須有一種更優雅、更有效的方法來做到這一點。有什麼見解嗎?我嘗試直接對 CSV 中的程式碼使用 =CHOOSE 函數,但它僅適用於數值。我已經包含了每個步驟的圖片,因為我覺得我解釋得不好。

CSV 程式碼計算器 在此輸入影像描述

追蹤器 在此輸入影像描述

答案1

這個選擇公式可以寫為

=Vlookup([@Status],$J$2:$L$17,3,False)

不確定我明白剩下的問題是什麼。

答案2

程式碼計算器:

您可以使用單一表來代替長表MATCH()
=MATCH([@[SO CODES]],TableHelper[code list],0)
在此輸入影像描述

追蹤器

在這裡我不確定我是否正確理解了你原來的公式。

=CHOOSE([@Status],IF([@Status]=J2,L2),IF([@Status]=J3,L3)...- 如果發生什麼事[@Status]<>J2?還是這是一個不切實際的場景?如果是,那麼只需使用一個簡單的INDEX()函數:
=INDEX($L$2:$L$17,[@Status])

否則,請指定您的公式應該做什麼。

最終優化:

再說一遍,如果您很好地理解了您的問題:您甚至不需要雙層紙,只需一張即可。

我嘗試直接在 CSV 中的程式碼上使用 =CHOOSE 函數,但它僅適用於數值

事實上,您可以直接輸入代碼,只需使用VLOOKUP(),如下所示:
=VLOOKUP(<code>,$J:$K,2,false)

在哪裡

  • <code>是您想要取得其描述的程式碼
  • $J:$K根據您的螢幕截圖是代碼和描述列

相關內容