未完了の作業指示書のステータスを毎週 CSV ファイルで受け取ります。これには、完了プロセスのさまざまなステップに関連付けられた 3 文字のステータス コードが含まれます。
ステータス コードの代わりに、わかりやすい言葉での定義を配置する必要があります。
私のスプレッドシートはこれを自動的に行いますが、私が現在行っているスプレッドシートのやり方は、非常に非効率的だと感じています。これを実行するシート自体が 75 MB を超え、全体の処理速度を低下させています。
現在のシートは、CSV のステータス コードが [@[SO コード] に、コードの静的リストが行 1 に表示される 16 列のグリッドになっています。他の各行は 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)
等
したがって、各ステータス コードには 1 ~ 16 の番号が割り当てられ、16 x [オープンな作業指示書の数] のグリッドに表示されます。
の最後の列は次のとおりです。
=SUBTOTAL(9,E2:T2)
=SUBTOTAL(9,E3:T3)
=SUBTOTAL(9,E4:T4)
等
最後に、次のような行がトラッカーに入力されます。
=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])
それ以外の場合は、数式で何を行うかを指定してください。
究極の最適化:
繰り返しますが、問題をよく理解している場合は、2 枚のシートは必要なく、1 枚だけで済みます。
CSVのコードに対して=CHOOSE関数を直接使用してみましたが、数値に対してしか機能しません
VLOOKUP()
実際、次のようにを使用するだけで、コードを直接入力できます。
=VLOOKUP(<code>,$J:$K,2,false)
どこ
<code>
説明を取得したいコードです$J:$K
スクリーンショットによると、コードと説明の列があります