我每周都会收到一份 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 函数,但它只适用于数值。我附上了每个步骤的图片,因为我觉得我解释得不好。
答案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
根据您的截图,是代码和描述列