文字列の中で、特定の文字や文字列が何文字目にあるかを探すために「SEARCH」や「FIND」といった関数が用意されています。
「探す」や「見つける」といった単語が関数名になっているのを考えると、関数の役割として何かを探すのかなぁというイメージはつきそうです。
ここでは、文字列操作に分類される「SEARCH」や「FIND」について、入力ルールから活用方法までを取り扱ってみたいと思います。
読んでいただくことで次のことが理解できると思います。
・関数 SEARCH/FINDの引数入力ルール
・関数 LEFT/MID/RIGHTの弱点克服方法
(LEFT/MID/RIGHTについては詳細記事をご参照ください)
SEARCHやFINDといった関数だけを見ると、「いったいどんな時に使えるのか?」と疑問に思うかもしれません。しかし、文字列を抽出する関数と組み合わせてうまくアシストすることで、文字列操作の可能性を広げられます。
SEARCH/FINDが力を発揮するとき
文字列操作の関数で、「LEFT」「MID」「RIGHT」といった特定の文字列から文字列を抜き出す関数があります。
これらの関数について、規則的に配置された文字列であれば何も問題になることはありませんが、規則的に並んでいない場合には関数の機能は失われ、思っているのとは違う文字列が抜き出されてしまうことがあります。
例えば
21928_D000001_OK 211001_D000002-NG
こういったデータを考えます。このデータの頭は日付、次に個体識番号、最後が検査結果だとして、個体識別番号だけを取り出したいといった例があったとします。
・どの関数を使うか?LEFT?MID?RIGHT?
・よく見ると文字列の文字数が違う、日付が一桁の場合と二桁の場合があるがどう扱うか?
「SEARCH」や「FIND」はこんなお悩みに答えてくれます。
以下の項目を説明します。
・SEARCHの引数入力と使い方
・FINDの引数入力と使い方
・SEARCHとFINDの違い
・文字列を抜き出す関数とのコラボ
読んでいただければ、ある程度自在に文字列操作を他の関数と組み合わせて実施できるようになると思います。是非ご一読ください。
SEARCH/FINDの使い方
SEARCH
SEARCH ( 検索文字列, 対象, 開始位置 )
SEARCH( “D”, “21928_D000001_OK”, 1 )=7
検索文字列として今回は文字「D」を指定し、「21928_D000001_OK」を対象として検索した結果、文字列の左から「7」文字目が該当の「D」となっていることが確認できました。
欲しい文字列が、左から何文字目がわかる関数ですね。
FIND
FIND ( 検索文字列, 対象, 開始位置 )
FIND( “D”, “21928_D000001_OK”, 1 )=7
FIND( “d”, “21928_D000001_OK”, 1 )=#VALUE
検索文字列として「D」を指定すると、「SEARCH」と同じ結果がでましたが、「d」を指定すると計算できなくなってしまいました。
もう一度、SEARCHについて以下の検証を実施しました。SEARCHは問題なく動作しました。
SEARCH( “d”, “21928_D000001_OK”, 1 )=7
SEARCHとFINDできることは似通っていますが、重要な部分に差異があるようです。
SEARCHとFINDの違い
以下大きく異なるポイントが2つあります。
・大文字と小文字の区別がSEARCHはできず、FINDはできる
・ワイルドカードがSEARCHはかつようでき、FINDはできない
大文字と小文字の区別は既にお話しした内容です。
ワイルドカードですが、検索文字列を指定する際に活用できます。
〇〇* / 〇*〇 / *〇〇
*の部分は任意の文字列、「*→???」とすれば三文字の任意の文字列を検索対象とするように動作していきます。
一つの文字列の中に複数同じ単語がある場合にはワイルドカードは便利ですが、SEARCHやFINDでどのように有効活用するかは少し考えものかもしれません。
MIDとの組み合わせ活用
ここまでだけですと、活用方法が少し見えにくいですが、関数MIDとセット活用すると活用の幅が見えてきます。
冒頭の事例
21928_D000001_OK 211001_D000002-NG
上記から個体識別番号だけを抜き出したい時、一筋縄ではいきませんが、MIDとSEARCHを組み合わせれば、
MID( “21928_D000001_OK”, SEARCH (“D”, “21928_D000001_OK”, 1), 7)
=D000001
MID( “211001_D000002_NG”, SEARCH (“D”, “211001_D000002_NG”, 1), 7)
=D000002
見事に抜き出すことができました。
単体では活用方法が見えにくいですが、組み合わせると非常に便利な関数のできあがりです。
まとめ
SEARCH/FINDの使い方を説明しました。
該当の文字が何文字目なのかを探してくるという効果のわかりづらい関数かもしれませんが、関数MIDと組み合わせたりすれば活用の幅が広がります。入力なども非常に簡素ですので、覚えるのが大変ということもないと思います。SEARCHとFINDの違いは、大文字小文字識別の有無とワイルドカード使用可否でした。どちらを使用するかはお好みでという部分が多いと思います。
他の関数と組み合わせて、うまく活用してみてください。
当ブログでは実際の仕事での経験を通して、役立つノウハウの蓄積を図っています。お時間があれば以下のリンクより、色々な記事を読んでいただければと思います。
ここまで読んでいただき、ありがとうございました。
コメント