列の範囲 (A1、B1、C1、D1) があります。これらの列には 1 から 20 までの値があります。F1 に次のような数式があります。
コード:
=if($A1>7,"U",if($B1>7,"X",If($C1>7,"Y",if($D1>7,"Z",""))))
この数式は、これらのセル (A1、B1、C1、または D1) のいずれかが 7 より大きい場合に、U、X、Y、および Z の値を入力します。
ただし、7 より大きいセルが 2 つある場合は処理できません。
7 より大きい列が 2 つある場合、最終結果は U、X、Y、または Z (カンマ区切り) のペアになるようにするにはどうすればよいですか。
ありがとう。
答え1
これは数式でも可能ですが、かなり長くなるので、VBAの方がおそらく良い解決策です。また、これは次のようなケースには対応できません。三つ値は 7 より大きいです。ただし、とにかく数式の方法を示します。
7 より大きいセルが 1 つだけある、より単純なケースから始めましょう。
F1 の式は次のとおりです。
=IF(COUNTIF($A$1:D$1,">7")>1,"Double",IF($A1>7,"U",IF($B1>7,"X",IF($C1>7,"Y",IF($D1>7,"Z","")))))
COUNTIF() 部分は、範囲 A1:D1 内の 7 より大きいセルの数をカウントします。その合計が 1 より大きい場合、IF() は "Double" を返します。これは、後で来るより大きな数式のプレースホルダーにすぎません。合計が 1 より大きくない場合、数式はネストされた IF() ステートメントを使用して、7 より大きいセルのコードを表示します。
2つのセルが7より大きい場合、ネストされたIF()は機能しません。どの列が7より大きいかを知る必要があります。このデータがある場合、
まず、7 より大きい列をリストする配列を作成します。この式は
(A1:D1>7)*COLUMN(A1:D1)
それを行います。最初の部分は(A1:D1>7)
、どのセルが 7 より大きいかを尋ね、配列 {TRUE,FALSE,TRUE,FALSE} を評価します。2 番目の部分は、A1:D1 の列番号、つまり {1,2,3,4} です。この 2 つの配列を乗算すると、論理値 TRUE と FALSE が 1 と 0 に変換されるため、結果は配列 {1,0,3,0} となり、これは値が 7 より大きい列番号です。
これで、これらの番号を使用して、INDEX() を使用して列コードを検索できるようになりました。
INDEX({"U","X","Y","Z"},LARGE((A1:D1>7)*COLUMN(A1:D1),2))
ここで、LARGE() は、列番号の配列で 7 より大きい 2 番目に大きい値 (1) を返し、INDEX() はそれを使用して、文字の配列の最初の要素である U を返します。
同様に、次の式は、2 番目と 1 番目に大きい列番号に対応するコードをコンマで区切って取得します。
INDEX({"U","X","Y","Z"},LARGE((A1:D1>7)*COLUMN(A1:D1),2))&","&INDEX({"U","X","Y","Z"},LARGE((A1:D1>7)*COLUMN(A1:D1),1)
これらすべてを上記の最初の式に代入し、「Double」を置き換えます。F1のこの数式は配列数式であり、次のように入力する必要があります。CtrlShiftEnter
=IF(COUNTIF($A$1:D$1,">7")>1,INDEX({"U","X","Y","Z"},LARGE((A1:D1>7)*COLUMN(A1:D1),2))&","&INDEX({"U","X","Y","Z"},LARGE((A1:D1>7)*COLUMN(A1:D1),1)),IF($A1>7,"U",IF($B1>7,"X",IF($C1>7,"Y",IF($D1>7,"Z","")))))
この式は「かなり長くなる」と言いました。これがお役に立てば幸いです。
答え2
上記の数式に代わる他のオプションをいくつか見つけました:
=IFERROR(LEFT(IF($A1>7,"U, ","")&IF($B1>7,"X, ","")&IF($C1>7,"Y, ","")&IF($D1>7,"Z, ",""),(COUNTIF($A1:$D1,">7")-1)*3+1),"")
{=TEXTJOIN(",",TRUE,IF(A1:D1>7,MID("UXYZ",COLUMN(A1:D1)-COLUMN(A1)+1,1),""))}
=MID(IF($A1>7,", U","")&IF($B1>7,", X","")&IF($C1>7,", Y","")&IF($D1>7,", Z",""),3,99)
"" を返す数式がある場合:
=MID(IF(N($A1)>7,", U","")&IF(N($B1)>7,", X","")&IF(N($C1)>7,", Y","")&IF(N($D1)>7,", Z",""),3,99)
これらの数式はコメントでは見栄えがよくないため、2 番目の回答を投稿する必要がありました。