答え1
答え2
素早い回答:
配列数式を使用してこれを行うことができます。セルにC2
次のように入力します。
=IF(B2="apple",SUM(ISNUMBER(A:A)*(A:A=A2)*(B:B<>B2))>0,"")
次に、Ctrl + Shift + Enter を使用して配列数式として登録します。その後、それを列の残りの部分にコピーします。
説明:
このIF
関数は通常のソートです。B 列に「apple」がある場合は何らかの処理を行い、それ以外の場合は空の文字列を書き込みます。興味深いのは 2 番目の引数です。これは「apple」の場合の結果を返します。
まず、Excel がもっと簡単な数式で何を行うか考えてみましょう: SUM(A:A=A2)
。 の内部ではSUM
、Excel は「範囲 = 値」という形式の等式を認識します。 両辺が単純な値であれば、ブール値として評価されますが、ここでは Ctrl+Shift+Enter を使って配列数式をオンにしたため、Excel は左側の各要素に個別に操作を適用します、そしてそれをメモリ内の一時配列に保存します。この配列はSUM
問題なく受け入れます。その結果は、列内の次のセルの数A
になりますA2
...
まあ、ほぼそうです。これは、値を 1 としてSUM
扱い、値を 0 として扱う場合に当てはまります。そうでない場合は、ブール値を数値に変換する必要があります。1 つの方法は、次のように二重否定を使用することです。ただし、実際の数式の演算子は、これも処理します。TRUE
FALSE
SUM(--(A:A=A2))
*
実際の合計に戻ると、項 が追加されていますISNUMBER(A:A)
。原理は同様です。これはA
通常、範囲の処理方法がわからないため、列に対して要素ごとに操作します。次に、*
演算子はブール値を含む 2 つの一時的な範囲を要素ごとに「乗算」します (基本的に、AND
それらに操作を適用します)。そして、ブール値の新しい範囲を生成します。(これは、空白セルが 0 と等しいとカウントされないようにするためだけにあり、NOT(ISBLANK(A:A))
同様に機能します。)
最後に、列内の各値B
がないに等しいB2
。最後に、SUM
は結果の範囲に作用します。
結論として、最初の列に数字がある行を数えましたが、現在の行は列 では一致していますA
が、列 では一致していませんB
。条件は、これらの数が正であるということだけを示しています。
備考1:*
関数の代わりに演算子を 使用するのAND
は、関数はデフォルトで範囲を引数として受け入れるため、「配列モード」をアクティブにして要素ごとの操作を実行するのではなく、一時的な範囲を使い果たしてしまうためです。
備考2:
数式を他の列にコピーするために列を絶対値にしたり、範囲に (絶対) 行番号を追加してA:A
同じB:B
列にある可能性のある他のもの (およびパフォーマンス) を無視したり、または や のように 2 つの列の名前付き範囲を作成しIDs
、Fruits
範囲の代わりにこれらの名前を数式に入力することもできます。