いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)SUMIF関数でワイルドカードが使えない原因

 SUMIF関数で検索条件にワイルドカードを使うときにうまくいかず結果が0になる原因についてです。
 たいていは数値や日付を検索の対象にしていることが原因ですが、ここでは対応も含めて紹介します。

原因と対策

検索対象が数値である

 画像ではB3:B7の範囲に5つの数値が記録されています。このうち「2」で始まる数値を合計しようとしてD3セルに「=SUMIF(B3:B7,"2*")」と、ワイルドカードを使った式を入力しましたが結果は0になり、うまくいきません。
 このように第1引数(検索範囲。ただしこの例では第1引数が合計範囲を兼ねる)として数値を指定した場合、ワイルドカードを使って検索することができません。

 


 SUMIF関数の式の内容を変えるだけで対応するのは難しく、また、B3:B7セルの表示形式を文字列に変更してもやはり結果は0のままとなります。
 そこでA3セルに「=TEXT(B3,"@")」と入力し、A8セルまでフィルコピーして、数値を文字列に変換した列を作ります。

 


 あとはC3セルに「=SUMIF(A3:A7,"2*",B3:B7)」と入力すればうまく合計が求められます。

 


 SUMIF関数とワイルドカードにこだわらなければ、上記のような作業列を作らずに済む方法も考えられます。
 一例として、次の画像ではSUMPRODUCT関数を使った式で同じ結果を得ています。

 D3セル

=SUMPRODUCT((LEFT(B3:B7)="2")*1,B3:B7)

 「(LEFT(B3:B7)="2")*1」の部分により、「2」で始まる数値を1に、そうでない数値を0に変換した配列を生成しています。
 この配列とB3:B7の積和(掛け算の合計)を求めることで、「2」で始まる数値の合計が得られるというわけです。

検索対象が日付である

 こちらの画像ではB3:C7セルの範囲に5つの日付と数値の組が記録されています。このうち令和5年10月~12月である日付に対応する数値を合計しようとしてE3セルに「=SUMIF(B3:B7,"令和5年??月*",C3:C7)」と、ワイルドカードを使った式を入力しましたが結果は0となっています。
 このように第1引数に日付を指定した場合も、ワイルドカードを使って検索することができません。特に和暦で表示されている場合には文字列と同様に扱えるように見えるものの、うまくいきません。

 


 正直あまり筋のいいやり方ではないのですが、ここでも作業列を使った方法を試してみます。
 A3セルに「=TEXT(B3,"ggge年m月d日")」と入力し、A8セルまでフィルコピーして、日付を同じ形式(和暦)の文字列に変換した列を作ります。

 


 そしてE3セルに「=SUMIF(A3:A7,"令和5年??月*",C3:C7)」と入力すると、うまく合計が求められました。
 なお上記のTEXT関数の式を「=TEXT(B3,"ggge年m月")」として日付を含めない形にしておけば、こちらの式の「*」は省略できます。

 


 ここでもワイルドカードにこだわらなければ別の方法が考えられます。
 次の画像ではSUMIFS関数を使って令和5年10月から12月までの日付に対応する数値の合計を求めています。

 E3セル

=SUMIFS(C3:C7,B3:B7,">=令和5年10月1日",B3:B7,"<=令和5年12月31日")

 SUMIFS関数でも複数の条件(AND条件)を指定することができるので、これを利用して期間内の日付に対応する数値の合計が求められます。
 日付は西暦で指定するのが一般的ですが、和暦で指定してもうまくいきます。

その他の原因

 画像は省略しますが、「ワイルドカード文字列(第2引数)をダブルクォーテーション(" ")で囲んでいない」という原因も考えられます。このときは警告が表示されるか(アスタリスク(*)が左右の端にあるようなワイルドカード文字列を指定した場合)、単に結果が0となります(それ以外の場合)。
 また、ワイルドカード以外の部分が原因(検索範囲と合計範囲を逆に指定している、など)であることも考えられます。
 次の記事でよくある原因を紹介していますので参考まで。

www.officeisyours.com