接頭辞で請求書を数える(COUNTIF のワイルドカード)
問題
問題文
月末の締め処理で、取引先から出力した伝票が1列にまとまって届きました。請求書は INV- で始まり、発注書は PO-、返品は RET- です。経理が必要としているのは請求書の件数だけです。A2:A11 のうち請求書が何件あるかを数え、Invoice count のセル D2 に入力してください。
範囲全体をセル参照で指定し、来月の出力データを貼り替えても数式が正しく動くようにしてください。
問題のデータ
表でデータ全体を見る(選択・コピーできます)
| A | D | |
|---|---|---|
| 1 | Order ID | Invoice count |
| 2 | INV-1001 | |
| 3 | INV-1002 | |
| 4 | PO-2001 | |
| 5 | INV-1003 | |
| 6 | RET-3001 | |
| 7 | PO-2002 | |
| 8 | INV-1004 | |
| 9 | INV-1005 | |
| 10 | RET-3002 | |
| 11 | INV-1006 |
ポイント解説
COUNTIF には範囲と検索条件の文字列を指定します。条件の文字列の中の * は任意の長さの文字を表します。"INV-*" は「INV- で始まる」という意味です。"*INV*" のように両側に付けると RET-INV-77 も数えてしまいます。条件の比較は大文字と小文字を区別しません。
解き方のヒント
回答は D2 に入力します。送信時は 3 通りの入力で数式を再実行するので、数値を直接書くと必ず失敗します。数式はセルを参照してください。
- 回答セルは D2 です
- 数える範囲は A2:A11 です
- 必要な接頭辞は INV- で、その後ろは * で表します
- 条件は文字列なので引用符が必要です:"INV-*"
模範解答
模範解答を表示(2 通り・まずは自分で試してみましょう)
解法1:COUNTIF と接頭辞のワイルドカード
=COUNTIF(A2:A11,"INV-*")
COUNTIF は各 ID を "INV-*" と照合します。先頭の4文字が一致し、後ろは * が吸収します。10行のうち6行が請求書です。
解法2:SUMPRODUCT と LEFT(ワイルドカードなし)
=SUMPRODUCT(--(LEFT(A2:A11,4)="INV-"))
LEFT で各 ID の先頭4文字を取り出して "INV-" と比べ、二重のマイナスで TRUE/FALSE を 1/0 に変えて SUMPRODUCT で合計します。同じ件数になり、規則が「形」ではなく「位置」のときに使いやすい書き方です。
関数ガイド
よくある質問
特定の文字列で始まるセルを数えるには?
接頭辞とワイルドカードを条件にします:=COUNTIF(A2:A11,"INV-*")。* が接頭辞より後ろの任意の文字を吸収するので、INV-1001 も INV-9 も数えられます。
ここで "*INV*" だと数が合わないのはなぜですか?
両側に * を付けると「含む」という意味になり、「で始まる」にはならないからです。RET-INV-77 は INV- を含むので数えられてしまいます。種類を判定するときは先頭に固定します("INV-*")。
COUNTIF は大文字と小文字を区別しますか?
区別しません。"inv-*" でも "INV-*" でも同じ件数になります。区別したいときは SUMPRODUCT と EXACT を組み合わせます。