ネストされたIFおよびCHOOSE式を改善する

ネストされたIFおよびCHOOSE式を改善する

未完了の作業指示書のステータスを毎週 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 関数を直接使用してみましたが、数値に対してしか機能しません。説明が不十分だと感じたので、各手順の写真を添付し​​ました。

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])

それ以外の場合は、数式で何を行うかを指定してください。

究極の最適化:

繰り返しますが、問題をよく理解している場合は、2 枚のシートは必要なく、1 枚だけで済みます。

CSVのコードに対して=CHOOSE関数を直接使用してみましたが、数値に対してしか機能しません

VLOOKUP()実際、次のようにを使用するだけで、コードを直接入力できます。
=VLOOKUP(<code>,$J:$K,2,false)

どこ

  • <code>説明を取得したいコードです
  • $J:$Kスクリーンショットによると、コードと説明の列があります

関連情報