web-dev-qa-db-ja.com

COUNTIFのGoogleシートパターンマッチング/正規表現

Googleスプレッドシートのパターンマッチングに関するドキュメントは役に立ちませんでした。私はしばらく読んで検索してきましたが、この特定の問題を見つけることができません。多分私は検索する正しい用語を見つけるのに苦労していますが、ここに問題があります:

この形式に従ういくつかの番号(部品番号)があります:##-####

カテゴリは部品番号で定義できます。つまり、50-03##は1つの製品カテゴリであり、残りの2桁はモデルに固有です。

私はこれを実行しようとしています:

=countif(E9:E13,"50-03[123][012]*")

E9:E13には、テキストとしてフォーマットされたパーツ番号が含まれます。他の方法でフォーマットすると、Googleスプレッドシートが日付を書き込んでいる、または算術演算を実行しようとしていると思われるため、値がめちゃくちゃに表示されます。)

次のように変更しない限り、これは毎回0を返します。

=countif(E9:E13,"50-03*")

ワイルドカードは機能するようですが、パターンマッチングは機能しませんか?

16
Martin

あなたが識別してWiktorが言及したように、COUNTIFはワイルドカードのみをサポートします。

名前を付けるだけでも、やりたいことを行う方法はたくさんありますが、2

=ArrayFormula(SUM(--REGEXMATCH(E9:E13, "50-03[123][012]*")))

=COUNTA(FILTER(E9:E13, REGEXMATCH(E9:E13, "50-03[123][012]*")))
14

これはあなたのような問題にとって非常に大きなハンマーですが、QUERYを使用して次のようなことを行うことができます:

_=QUERY(E9:E13, "select count(E) where E matches '50-03[123][012]' label count(E) ''")
_

labelビットは、QUERYcount()列に自動ヘッダーを追加しないようにするためのものです。

このアプローチのいいところは、他の列も取り込めることです。列Hで、各パーツにいくつかの注文があるとします。次に、2つのセルを取得して、パーツの数と注文の合計の両方を表示できます。

_=QUERY(E9:H13, "select count(E), sum(H) where E matches '50-03[123][012]' label count(E) '', sum(H) ''")
_

私は日常的にこの質問を_$searchEngine_で見つけ、 別の質問 を同様の問題と他の関連する回答にリンクしたことに気づきません。