Skip to main content

コミュニティの皆様、お世話になります。

掲題の件についてご教示いただきたく投稿しました。

 

添付サンプルExcelのような回答データがあったとして、例えばこの「フリーコメント」カラムにおいて

 

例)

・「資料」かつ「欲しい」というワードを含む

・「欲しい」または「知りたい」というワードを含む

・「価格」または「資料」かつ「欲しい」というワードを含む

 

のような、いわゆる自由回答欄をワード検索し対象者を抽出するようなことをしたいと考えております。

 

試したこととして、

 ◆検索窓用パラメータを3つほど作る

 

この状態で、

★計算フィールド)複数ワイルドカード判定(andだけ)

=====

IF CONTAINS([フリーコメント],[ワード①])

and

   CONTAINS([フリーコメント],[ワード②])

and

   CONTAINS([フリーコメント],[ワード②])

then 1 else 0

END

=====

 

★計算フィールド)複数ワイルドカード判定(orだけ)

=====

IF CONTAINS([フリーコメント],[ワード①])

OR

   CONTAINS([フリーコメント],[ワード②])

OR

   CONTAINS([フリーコメント],[ワード②])

then 1 else 0

END

=====

というのを作り、「1」だけでフィルターする、というのは行けました。

(「複数ワイルドカード(orのみ)」シート、「複数ワイルドカード(andのみ)」シート参照)

 

問題はここからで、本来やりたいのは上記の「or/andをフレキシブルに変えて、検索をしたい」、というものになります。

 

イメージ)

パターンA:① or ② or ③

パターンB:① or ② and ③

パターンC:① and ② or ③

パターンD:① and ② and ③

の検索を柔軟にやりたい。

 

そこで(なんとなくダメかもと思いつつ)試したこととして

 ◆or または andを選択できるパラメータを2つ作る

 

上記を用いて、

 

★計算フィールド)複数ワイルドカード判定(選択可)

=====

IF CONTAINS([フリーコメント],[ワード①])

[or / and 1]

   CONTAINS([フリーコメント],[ワード②])

[or / and 2]

   CONTAINS([フリーコメント],[ワード②])

then 1

else 0

END

=====

というのを作り[or / and 1]と[or / and 2]のパラメータで計算式の構文を代替しようとしたのですが、ダメでした(エラーです)。。。

 

ということで、上記のようなことをやりたい場合、何か良い方法はありませんでしょうか?

実直にパターンA~Dの計算式を作り、このパターンを選択するパラメータを作るということも可能でしょうか。

 

不明な点、説明に不十分な点などあればご指摘いただければと思います。

 

以上、よろしくお願いいたします。

3 answers
  1. May 9, 2019, 4:30 AM

    AND や OR といった関数そのものをパラメータ文字列で置き換えることはできません。

     

    したがって、

    >>実直にパターンA~Dの計算式を作り、このパターンを選択するパラメータを作るということも可能でしょうか。

    と想像されているのに近いであろう方法を試してみました。

    もっとスマートなやり方もあると思うので、アイディアのある方は補足をお願いします。

     

    まず、or/andを示す2つのパラメータがどのような状況になっているかを判定させます。

    AND や OR といった関数そのものをパラメータ文字列で置き換えることはできません。 したがって、>>実直にパターンA~Dの計算式を作り、このパターンを選択するパラメータを作るということも可能でしょうか。と想像されているのに近いであろう方法を試してみました。もっとスマートなやり方もあると思うので、アイディアのある方は補足をお願いします。 まず、or/andを示す2つのパラメータがどのような状況に

     

    次に、その判定結果を使って条件式を振り分けます。

    pastedImage_3.png

     

    振り分けた条件式をフィルターに入れて真のみに設定します。

    pastedImage_4.png

     

    これで or/and を切り替えた結果を反映することが可能です。

    なお、この例では判定結果を文字列で"ワード①~~"と記述していますが、これは画像で説明するうえで分かりやすくするためです。

    実装の際は文字列ではなく数値に置き換えた方がパフォーマンスもよいですし、式の頭が揃ったりして見やすいと思います。

    また、検索ワードを含むかどうかの判定にCONTAINS関数を使用していますが、REGEXP_MATCH関数でもいけると思います。

    (正規表現パターンでAND条件を作るのは、ちょっと面倒なやり方 ^(?=.*~~~)(?=.*~~~) しか知らないので今回は見送りました。

    上手な人ならスッキリした書き方ができるのかもしれません...。)

     

    但し、ここで考えなければならない点がいくつかあります。

     

     1. 検索ワードの数が増えると条件式の分岐の数が増える

     2. 全ての検索ワードに何かしら入力されていないと挙動がおかしい (=空白のパラメータがあったときにどうするか)

     3. OR と AND には適用順位がある

     

    特に3番については要注意です。

     

    (2番については、ルールを追加して計算式を加工することで対応できます。

    添付ワークブックのss2シートに実装例があるので、ご興味があれば見てみてください。)

0/9000