web-dev-qa-db-ja.com

Excelで同等のケース関数

興味深い課題があります-Excelで次のデータのチェックを実行する必要があります。

|   A  -   B  -   C  -  D   |
|------|------|------|------|
|  36  |   0  |   0  |   x  |
|   0  |  600 |  700 |   x  |
|___________________________|

あなたは私の驚くほど悪いASCIIアートを言い訳する必要があります。したがって、隣接するセルに対してチェックを実行し、必要に応じて値を変換するには、D列(x)が必要です。基準は次のとおりです。

列Bが0より大きい場合、すべてがうまく機能し、コーヒーを飲むことができます。それがその要件を満たさない場合、A1をテーブルに従って変換する必要があります。たとえば、32 = 1420Dに配置します。残念ながら、Aと変換先の関係はないため、計算の作成は問題外です。

このシナリオではcaseまたはswitchステートメントは完璧ですが、Excelのネイティブ関数ではないと思います。たくさんの=IF()ステートメントをつなぎ合わせるのもちょっとおかしいと思いますが、それは悪い考え(私の人生の話)であると判断する前に約4回行いました。

49
Nic

VLOOKUP !の仕事のように聞こえます!

32-> 1420型のマッピングをいくつかの列に配置し、VLOOKUP関数を使用して検索を実行できます。

56
Blorgbeard

元の問題(解決してから長いと思われます)を参照せずに、ごく最近、データを変更することなくChoose関数をselect caseステートメントとまったく同じように動作させるきちんとしたトリックを発見しました。キャッチは1つだけです。選択条件の1つだけが、いつでも真になります。

構文は次のとおりです。

CHOOSE( 
    (1 * (CONDITION_1)) + (2 * (CONDITION_2)) + ... + (N * (CONDITION_N)),
    RESULT_1, RESULT_2, ... , RESULT_N
)

条件1からNの1つのみが真であると仮定すると、他のすべては0であり、数値が適切な結果に対応することを意味します。

すべての条件が相互に排他的であることを100%確信できない場合は、次のようなものを好むかもしれません。

CHOOSE(
    (1 * TEST1) + (2 * TEST2) + (4 * TEST3) + (8 * TEST4) ... (2^N * TESTN)
    OUT1, OUT2, , OUT3, , , , OUT4 , , <LOTS OF COMMAS> , OUT5
)

とは言っても、Excelが関数で使用できる引数の数に上限がある場合、すぐにヒットします。

正直に言うと、それを解決するのに何年もかかったとは信じられませんが、私はそれを見たことがありません。

編集:以下の@aTrustyからのコメントごとに:次の形式の式を使用することにより、カンマの愚かな数字を排除することができます(その結果、選択ステートメントは最大254のケースで機能します)。

CHOOSE(
    1 + LOG(1 + (2*TEST1) + (4*TEST2) + (8*TEST3) + (16*TEST4),2), 
    OTHERWISE, RESULT1, RESULT2, RESULT3, RESULT4
)

LOG句の2番目の引数に注意してください。これは、基数2に配置し、全体を機能させます。

編集: David's answer ごとに、2016年のオフィスで仕事をするのに十分な運が良ければ、実際のswitchステートメントがあります。読みにくいだけでなく、これはスイッチの効率を得るだけでなく、振る舞い!

21
tobriand

切り替え機能は、Excel 2016/Office 365で利用可能になりました

SWITCH(式、値1、結果1、[デフォルトまたは値2、結果2]、…[デフォルトまたは値3、結果3])

example:
=SWITCH(A1,0,"FALSE",-1,"TRUE","Maybe")

Microsoft -Officeサポート

14
david

これを試して;

=IF(B1>=0, B1, OFFSET($X$1, MATCH(B1, $X:$X, Z) - 1, Y)

どこ
X =インデックスを作成する列
Y =探している値を取得するためのインデックス付き列の左側(-Y)または右側(Y)の列数
Z = 0完全一致の場合(エラーを処理する場合)

8
BKimmel

このソリューションを使用して、1文字のカラーコードを説明に変換しました。

=CHOOSE(FIND(H5,"GYR"),"Good","OK","Bad")

基本的に、配列でデコードしようとしている要素を検索し、CHOOSE()を使用して関連するアイテムを選択します。 VLOOKUP()のテーブルを作成するよりも少しコンパクトです。

2
Robert

私は答えるのが少し遅れていることを知っていますが、この短いビデオはあなたに大いに役立つと思います。

http://www.xlninja.com/2012/07/25/Excel-choose-function-explained/

基本的に、choose関数を使用しています。彼はビデオでそれを非常によく説明しているので、20ページをタイプする代わりにそれをさせます。

彼の別のビデオでは、データ検証を使用して、限られた範囲から選択できるドロップダウンを作成する方法を説明しています。

http://www.xlninja.com/2012/08/13/Excel-data-validation-using-dependent-lists/

2つを組み合わせて、ドロップダウンの値をchoose関数のインデックスとして使用できます。彼はそれらを組み合わせる方法を示しませんでしたが、彼のビデオが良いので、あなたはそれを理解できると確信しています。問題が発生した場合はお知らせください。回答を更新して表示します。

1
Francis Rodgers

Excelバージョン(Excel-2016より前)にSWITCHステートメントがない場合、VBA実装は次のとおりです。

Public Function SWITCH(ParamArray args() As Variant) As Variant
    Dim i As Integer
    Dim val As Variant
    Dim tmp As Variant

    If ((UBound(args) - LBound(args)) = 0) Or (((UBound(args) - LBound(args)) Mod 2 = 0)) Then
        Error 450       'Invalid arguments
    Else
        val = args(LBound(args))
        i = LBound(args) + 1
        tmp = args(UBound(args))

        While (i < UBound(args))
            If val = args(i) Then
                tmp = args(i + 1)
            End If
            i = i + 2
        Wend
    End If

    SWITCH = tmp
End Function

期待どおりに機能します。たとえば、GoogleスプレッドシートのSWITCH関数のドロップイン置換です。

構文:

=SWITCH(selector; [keyN; valueN;] ...  defaultvalue)

どこ

  • セレクターはキーと比較される任意の式です
  • key1、key2、...は、セレクターと比較される式です
  • value1、value2、...は、セレクターが対応するキーと等しい場合にのみ選択される値です(のみ)
  • セレクタに一致するキーがない場合、defaultvalueが使用されます

例:

=SWITCH("a";"?")                       returns "?"
=SWITCH("a";"a";"1";"?")               returns "1"
=SWITCH("x";"a";"1";"?")               returns "?"
=SWITCH("b";"a";"1";"b";TRUE;"?")      returns TRUE
=SWITCH(7;7;1;7;2;0)                   returns 2
=SWITCH("a";"a";"1")                   returns #VALUE!

それを使用するには、Excelを開き、[開発ツール]タブに移動し、[Visual Basic]をクリックして[ThisWorkbook]を右クリックし、[挿入]、[モジュール]の順に選択して、最後にコードをエディターにコピーします。マクロフレンドリーなExcelブック(xlsm)として保存する必要があります。

1
gaborsch

これは古い投稿への応答であることを理解しています

Index()/ Match()と組み合わせたIf()関数が好きです:

=IF(B2>0,"x",INDEX($H$2:$I$9,MATCH(A2,$H$2:$H$9,0),2))

If関数は列bの内容を比較し、0より大きい場合はxを返します。そうでない場合は、Index()関数によって識別され、Match()によって選択された配列(情報のテーブル)を使用して、に対応します。

Index配列の絶対位置は$H$2:$I$9(ドル記号)に設定されているので、数式がコピーされても指す場所は変わりません。返される値を持つ行は、Match()関数によって識別されます。 Match()には、Vlookup()が必要とするソートリストを調べる必要がないという付加価値があります。 Match()は、1より小さい、0正確、-1より大きい値を持つ値を見つけることができます。完全なMatch()配列$H$2:$H$9の後にゼロを入れて、完全に一致するものを見つけました。列には、返されるIndex()配列の値が入力されます。配列の戻り値が2番目の列にあったため、2を入力しました。インデックス配列の下は次のようになりました。

32   1420

36   1650

40   1790

44   1860

55   2010

リストで検索する「a」列の値は、この例の最初の列にあり、返される対応する値は右側にあります。ルックアップ/参照テーブルは、ワークブック内の任意のタブに配置できます-別のファイルに配置することもできます。 -Book2はファイル名で、Sheet2は「その他のタブ」名です。

=IF(B2>0,"x",INDEX([Book2]Sheet2!$A$1:$B$8,MATCH(A2,[Book2]Sheet2!$A$1:$A$8,0),2))

Bの値が0より大きいときにxが返されないようにするには、「空白」/ null相当のxを削除するか、0を設定します。

以下は、xが削除された関数の始まりです。

=IF(B2>0,"",INDEX...
1
Dan

Microsoftは、SWITCH、IFS、およびIFVALUESをCHOOSE only機能に置き換えました。

=CHOOSE($L$1,"index_1","Index_2","Index_3")
0
Pit J

古い場合でも、これはよくある質問のようですので、別の解決策を投稿します。これは非常にエレガントだと思います。

http://fiveminutelessons.com/learn-Microsoft-Excel/using-multiple-if-statements-Excel

IF関数のみを使用しているため、エレガントです。基本的に、これは次のように要約されます。

if(conditionテーブルから値を選択/使用、if (conditionテーブルから別の値を選択/使用する...

等々

HLOOKUPやVLOOOKUPよりも優れた、美しい動作

しかし...警告-Excelで処理できるネストされたifステートメントの数には制限があります。

0
Chiwda

Office 2019またはOffice 365を使用している場合、IFSと呼ばれるCASE関数と同様に機能する新しい関数があります。 Microsoftのドキュメントの機能の説明は次のとおりです。

IFS関数は、1つ以上の条件が満たされているかどうかを確認し、最初のTRUE条件に対応する値を返します。 IFSは、ネストされた複数のIFステートメントの代わりに使用でき、複数の条件で読みやすくなっています。

使用例は次のとおりです。

=IFS(A2>89,"A",A2>79,"B",A2>69,"C",A2>59,"D",TRUE,"F")

デフォルトの結果を指定することもできます:

デフォルトの結果を指定するには、最終的なlogical_test引数にTRUEを入力します。他の条件のいずれも満たされない場合、対応する値が返されます。

デフォルトの結果機能は、上記の例に含まれています。

詳細については Microsoftのサポートドキュメント をご覧ください。

0