【プログラミング】スプレッドシートのFIND関数で複数の検索文字列を対象にする
始めに
使い方 基本
・検索対象のテキスト
りんご,ゴリラ,ラッパ,パセリ
・検索文字列
ゴリラ
・実際の関数記述
=FIND("ゴリラ","りんご,ゴリラ,ラッパ,パセリ")
・返り値
5
問題点
検索文字列に複数を指定したい場合が面倒
例)検索対象テキストから指定した複数の動物(ゴリラ,ぞう,うさぎ,キリン)を検索文字列にしたい
→ 普通に考えるとFIND関数を複数の動物の分(上記例だと4動物分)作成して組み合わせた関数作成.(これはググれば出てくるので詳細はそちらで)
これだと量が多い時,追加する時などに大分面倒!
解決策
ARRAYFORMULA関数を使用する.
最終的な形は大体以下の形になる.(必要に応じて要カスタマイズ)
=IF(SUM(ARRAYFORMULA(IFERROR(FIND(検索文字列セル範囲,検索対象テキスト),0)))>0,1,0)
分解すると以下.(逆にわかりづらいかも)
= IF(
SUM(
ARRAYFORMULA(
IFERROR(
FIND(検索文字列セル範囲,検索対象テキスト), 0
)
)
) >0, 1, 0
)
解決策 詳細
キャプチャ付きで手順をおって説明.
1.FIND関数の"検索文字列"をセル範囲で指定する.
検索文字列をセルの範囲で指定している.上記,エラーが出ずに正常に動いているように見える(D7セル)が実際には検索文字列に"ゴリラ"しか対象になっていない."ゴリラ"を"ぞう"にするとエラーになる.
上記,実際にD7セルはエラーになる.
2.ARRAYFORMULA関数を適用する.
※以下,わかりやすくするために検索対象のテキストに"キリン"を追加している.
ARRAYFORMULA関数を適用すると上記のようになる.検索文字列セル範囲で指定されている文字列全てに対して判定が行われている.
ゴリラ,うさぎは検索対象のテキストに含まれていないのでエラー.
ぞう,キリンは検索対象のテキストに含まれているので位置(数値)が返されている.
注意!
あくまでも関数が記述されているのはD7セルだけである.ARRAYFORMULA関数を適用することで配列になっている.
また,配列展開する時に展開先にすでに値が記入されている場合はエラーになるので注意.
例えば,上記の場合D9セルに値が記入されていたらそもそもエラーになる.
3.エラーを修正する
エラー(#VALUE!)があると不都合が多いのでIFERROR関数を使用してエラーを回避.
エラー(#VALUE!)が0になる.
4.SUM関数を使用してまとめる(合算する)
D7セルに数値が合算される(5+21)
5.IF関数を使用フラグかする
上記で文字検索としては役目を果たしているが,個人的には若干使いづらいので,IF関数でフラグ化する.
6.完成!
複数のテキストに検索文字列が入っているかの判別をしたいときなどに便利.参考までに以下のような集計時に使用.
【データ分析】最近,タイムマシーン3号が好き
以下のように使う(サンプル)
※カラムの順番など少し変更
終わりに
技術系の記事はネット上に大量にあるのであまり書かないが,個人的にはだいぶ目からウロコだったので,記事にした.
スプレッドシートの可能性をまだまだ感じている.
PCとスマホ,wifiだけを持って全国をのんびり旅したい.