改进嵌套的 IF 和 CHOOSE 公式

改进嵌套的 IF 和 CHOOSE 公式

我每周都会收到一份 CSV 文件中的未结工单状态。其中包括与完成流程中不同步骤相关的 3 个字母的状态代码。

我需要用通俗易懂的语言定义来代替状态代码。

我的电子表格会自动执行此操作,但我觉得我现在使用的电子表格效率真的很低。执行此操作的电子表格本身就超过 75 MB,并且使整个系统陷入停滞状态。

我当前工作表的工作方式是一个 16 列网格,其中包含来自 [@[SO Codes] 的 CSV 的状态代码和第 1 行的代码静态列表。其他每行都是 16 个,其中包含:

=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根据您的截图,是代码和描述列

相关内容