特定の文字条件が複数あるときに関数を実行したい

特定の文字条件が複数あるときに関数を実行したい

特定の文字列を含むデータを処理したい

ご提供頂くデータの中で、特定の文字列を含むデータは、管理しやすいようにデータ加工した状態でデータベースに保存したい場合があります。

品番 品名 成分
010001 製品1 成分A/成分B/成分C
010002 製品2 成分B/成分D/成分E
010003 製品3 成分A/成分C/成分E
010004 製品4 成分C/成分D/成分E

複数の特定の文字列を含むかどうか調べ、データを連結する

複数特定の文字列を含むかどうかを調べるには、COUNTIFS(カウントイフス)関数とワイルドカード文字を、データを連結するにはCONCATENATE(コンケイトネイト)関数を使用します。

COUNTIFS関数は、引数で指定した範囲内に、検索条件が一致する件数を返します。

範囲と検索条件の組み合わせは最大127個まで指定でき、指定した範囲と検索条件の組み合わせは、すべてAND条件として判定されます。

CONCATENATE関数は、引数に指定したセル、または文字列を、引数順に連結した結果を返します。

一度に結果を求めるためにIF(イフ)関数を使用します。それぞれの書式は、

COUNTIFS(範囲1, 検索条件1, [範囲2], [検索条件2], ...)
CONCATENATE(文字列1, [文字列2], ...)
IF(論理式, [値が真の場合], [値が偽の場合])

になります。

冒頭の表を例に、製品1の成分データに成分B成分Cが含まれるかどうかをチェックし、含まれる場合は「【毒物】成分」の形に加工を、含まれない場合は「成分」の形に文字列を作成したいとします。

=IF(COUNTIFS(C2, "*成分B*", C2, "*成分C*") > 0, CONCATENATE("【毒物】", B2), B2)

式の解説

=IF(COUNTIFS(C2, "*成分B*", C2, "*成分C*") > 0, CONCATENATE("【毒物】", B2), B2)

COUNTIFS関数で、セルC2に成分Bという文字列と、成分Cという文字列が含まれている件数を取得します。

含まれている場合は1を、含まれていない場合は0を返します。

IF関数で、COUNTIFS関数で取得した件数が1以上であればCONCATENATE関数を実行し、0であればセルB2を返します。

COUNTIFS関数の第1引数

COUNTIFS(C2, “*成分B*”, C2, “*成分C*”)

第2引数で指定する値を検索する範囲を指定します。

本例では成分であるセルC2を指定します。

COUNTIFS関数の第2引数

COUNTIFS(C2, “*成分B*”, C2, “*成分C*”)

検索条件となるセル、または文字列や数字を指定します。

本例では成分Bを指定します。

文字列の前後にある*(半角アスタリスク)はワイルドカード文字といい、*(半角アスタリスク)は文字数を問わず任意の文字を意味しているため、部分一致での検索になります。

COUNTIFS関数の第3引数

COUNTIFS(C2, “*成分B*”, C2, “*成分C*”)

第4引数で指定する値を検索する範囲を指定します。

本例では成分であるセルC2を指定します。

COUNTIFS関数の第4引数

COUNTIFS(C2, “*成分B*”, C2, “*成分C*”)

検索条件となるセル、または文字列や数字を指定します。

本例では成分Cを指定します。

CONCATENATE関数の第1引数

CONCATENATE(“【毒物】”, B2)

連結したいセル、または文字列や数値を指定します。

本例では【毒物】を指定します。

CONCATENATE関数の第2引数

CONCATENATE(“【毒物】”, B2)

連結したいセル、または文字列や数値を指定します。

本例では品名であるセルB2を指定します。

IF関数の第1引数

=IF(COUNTIFS(C2, “*成分B*”, C2, “*成分C*”) > 0, CONCATENATE(“【毒物】”, B2), B2)

論理式を指定します。

本例ではCOUNTIFS関数の結果が0より大きいかどうかの論理式を指定します。

IF関数の第2引数

=IF(COUNTIFS(C2, “*成分B*”, C2, “*成分C*”) > 0, CONCATENATE(“【毒物】”, B2), B2)

第1引数の結果が真(TRUE)であった場合の処理を指定します。

本例ではCONCATENATE関数での文字連結処理を指定します。

IF関数の第3引数

=IF(COUNTIFS(C2, “*成分B*”, C2, “*成分C*”) > 0, CONCATENATE(“【毒物】”, B2), B2)

第1引数の結果が偽(FALSE)であった場合の処理を指定します。

本例では品名であるセルB2を指定します。

OR条件で関数を実行したい場合

成分Bまたは成分Cが含まれる場合、のように、どちらから一方に該当したら処理したい場合の書式は、

=IF((COUNTIFS(C2, "*成分B*") + COUNTIFS(C2, "*成分C*")) > 0, CONCATENATE("【劇物】", B2), B2)

になります。

Excel 2019、Office 365版のExcelをお使いの場合

新たに追加されたIFS(イフス)関数とSWITCH(スウィッチ)関数が使用できます。 IFS関数の書式は、

IFS(論理式1, 真の場合1, 論理式2, 真の場合2, ...)

となり、論理式と真の場合の組み合わせは最大127個まで指定できます。 SWITCH関数の書式は、

SWITCH(検索値, 値1, 結果1, 値2, 結果2, ..., [既定の結果])

となり、値と結果の組み合わせは最大126個まで指定できます。

Massteryで対応するとこうなる

記事の投稿時点では、Massteryには、COUNTIF関数はご用意しておりませんが、項目内から特定の条件で処理を実行する機能が用意されています。

今回は、特定の条件とその条件以外で処理を実行する方法をご案内いたします。

Massteryで特定の文字が複数あるとき関数を実行したい例 その1
Massteryで特定の文字が複数あるとき関数を実行したい例 その2

指定内容

変換対象カラム
Massteryはフォーマットの項目単位で変換を指定しますので、出力ファイルの項目(列の名称)を指定します。
変換方法
変換対象カラムに値またはロジックを適用する「=」を指定します。
値または変換ロジック
特定の条件で項目に出力したいので、「【劇物】成分」と指定します。
条件1_仕入れ先項目
条件のある項目を指定します。
条件1_演算子
次に入力する「条件1_値」にマッチタイプを指定します。項目内に様々な成分が含まれているデータですので、「=(部分一致)」を選択します。
条件1_値
「成分B」と指定します。
条件2_仕入れ先項目
条件1と同じ項目になりますので、同様に「成分」条件のある項目を指定します。
条件2_演算子
条件1と同様に、「=(部分一致)」を選択します。
条件2_値
「成分D」と指定します。

上記の方法で処理が実行されますと、以下の出力されるようになります。

品番 品名 成分 成分補足
010001 製品1 成分A/成分B/成分C 【劇物】成分
010002 製品2 成分B/成分D/成分E 【劇物】成分
010003 製品3 成分A/成分C/成分E
010004 製品4 成分C/成分D/成分E 【劇物】成分

如何でしたでしょうか。

今回ご紹介しました条件は複数の値を指定する場合でしたが、単一の条件を指定や演算時を変更して特定のデータを含まない場合など緻密な条件を指定することが可能です。 ご不明な点がございましたら、是非お問い合わせフォームからお気軽にお問い合わせください。

関連記事

同じカテゴリの記事

お問い合わせ

Massteryのより詳しい情報、ご対面でのご案内をご希望の方は是非お問い合わせください。
下記のお問い合わせフォームよりお申し込み頂ければ担当の営業からご連絡いたします。

運営会社 フォルシア株式会社

Close Bitnami banner
Bitnami