概要
「A は見つけたいけど、a は無視したい」
「商品コードの ABC と abc をきっちり区別したい」
「パスワードっぽい文字列で、大文字と小文字をちゃんと判定したい」
こういう 大文字・小文字を“区別して”検索したい ときに使うのが FIND 関数です。
FIND は「何文字目にあるか」を返す関数ですが、同時に
- 大文字・小文字を区別して検索する
- 見つからなければエラーになる
という特徴を持っています。
ここでは、プログラミング初心者向けに「大文字小文字を区別した検索」としての FIND を、テンプレートと例題付きで丁寧に解説します。
FIND 関数の基本(大文字小文字を区別する検索)
FIND の書式と意味
=FIND(検索文字列, 対象文字列, [開始位置])
検索文字列
探したい文字・文字列です。”A” や “ABC” のようにダブルクォーテーションで囲むか、セル参照で指定します。
対象文字列
どこから探すか。セル参照(A2 など)や直接 “AbcABC” のように書いても構いません。
開始位置(省略可)
対象文字列の「何文字目から」探し始めるか。省略すると 1(先頭)になります。
FIND の重要ポイントはここです。
- “A” と “a” は「別の文字」として扱われる
- 完全に一致する場所だけ見つかる
- 見つからなければ #VALUE! エラーになる
基本パターン:大文字と小文字で結果が変わる
「A」と「a」を区別して検索する
A2 に「AbcABC」という文字列が入っているとします。
「大文字の A」の位置を検索する式:
=FIND("A", A2)
結果は 1(先頭の A)になります。
「小文字の a」を検索する式:
=FIND("a", A2)
結果は #VALUE!(見つからない)になります。
A2 には「A」はありますが、「a」は 1 つもないためです。
同じように、「小文字の b」を探すとこうなります。
=FIND("b", A2)
A2 が「AbcABC」なので、b は 2 文字目。結果は 2 になります。
このように、FIND は大文字小文字をしっかり区別して位置を返します。
応用パターン1:大文字だけ含まれているかチェック
文字列の中に「大文字 X」が含まれているか判定する
例えば「X(大文字)」が含まれているかどうかを調べたい場合。
単に FIND すると、見つからなければエラーになります。
=FIND("X", A2)
そこで IFERROR と組み合わせて「含まれる/含まれない」を判定します。
=IF(IFERROR(FIND("X", A2), 0)>0, "X含む", "Xなし")
FIND(“X”,A2)
見つかれば位置(1以上の数値)、見つからなければエラー。
IFERROR(…,0)
エラーなら 0 に変える。
結果として「見つかれば1以上、見つからなければ0」。
IF(…>0,”X含む”,”Xなし”)
1以上なら「X含む」、0なら「Xなし」。
これで、「大文字 X を含むかどうか」を判定できます。
小文字 x は別物として扱われるので、x だけの場合は「Xなし」になります。
応用パターン2:大文字と小文字で別の処理をする
“ABC” は OK、”abc” は NG と判定する
A2 に入っている文字列の中に、
- 大文字 “ABC” があれば「OK」
- 小文字 “abc” しかなければ「NG」
と判定したい場合。
大文字 “ABC” を FIND して、あれば OK、なければ NG という判定をします。
=IF(IFERROR(FIND("ABC", A2), 0)>0, "OK", "NG")
ここでポイントは、”ABC” と “abc” は別ものなので、
- A2 が「testABC」→ OK
- A2 が「testabc」→ NG
- A2 が「testAbc」→ NG(完全一致でないため)
という判定になります。
応用パターン3:コードの大文字部分だけ位置で判定する
コードが「先頭3文字はすべて大文字のアルファベットか?」をチェックするイメージ
完全に関数だけで「大文字だけ・小文字だけ」を判定しようとするとやや難しいですが、
例えば「先頭に ‘ABC’ が来ているか」をチェックする程度なら FIND で簡単です。
A2 に「ABC-001」「Abc-001」のようなコードが入り、
先頭の「ABC」であるものだけ OK にしたいとします。
先頭3文字が “ABC” かどうかは、
「位置 1 に ‘ABC’ があるか?」で判定できます。
=IF(IFERROR(FIND("ABC", A2), 0)=1, "OK", "NG")
A2 が「ABC-001」→ FIND(“ABC”,A2)=1 → OK
A2 が「Abc-001」→ FIND(“ABC”,A2) はエラー → 0 → NG
A2 が「XABC-001」→ FIND(“ABC”,A2)=2 → 位置1ではないので NG
「どこかに含まれていれば」ではなく、「先頭に大文字ABCがある」かどうかまで判定できます。
応用パターン4:SEARCH との違いを利用する
大文字小文字を区別“しない” SEARCH 関数と並べて使うと、
「大文字/小文字の両方を許可するかどうか」を設計できます。
例えば、
- 「abc」でも「ABC」でも OK にしたい → SEARCH
- 「ABC のみ OK、abc は NG にしたい」 → FIND
という使い分けができます。
SEARCH の書式は FIND とほぼ同じなので、単純に「区別したいなら FIND」と覚えておくとよいです。
応用パターン5:大文字の位置を使って前後を切り出す
最初に出てくる「大文字 X の前後」で文字列を分ける
A2 に「abcX123」が入っていて、
大文字 X の前後で分割したいとします。
X の位置:
=FIND("X", A2)
X の前:
=LEFT(A2, FIND("X", A2)-1)
結果:「abc」
X の後ろ:
=MID(A2, FIND("X", A2)+1, LEN(A2)-FIND("X", A2))
結果:「123」
小文字 x は対象外なので、A2 に「abcx123」と入っている場合は FIND(“X”,A2) がエラーになり、
「大文字 X を境界に分けたい」という処理がそのまま実現できます。
例題
問題1
A2 に「AbcABC」という文字列が入っています。
大文字の「A」が最初に現れる位置を求める式を書いてください。
=FIND("A", A2)
問題2
A2 に「AbcABC」という文字列が入っています。
小文字の「a」を検索する式を書いてください。
このとき、どのような結果になるかも答えてください。
=FIND("a", A2)
結果は #VALUE!(見つからないためエラー)になります。
問題3
A2 の文字列に「大文字の X」が含まれていれば「X含む」、
含まれていなければ「Xなし」と表示したいです。
FIND と IFERROR を組み合わせた式を書いてください。
=IF(IFERROR(FIND("X", A2), 0)>0, "X含む", "Xなし")
問題4
A2 に「ABC-001」や「Abc-001」のようなコードが入っています。
先頭が「大文字の ABC」の場合だけ「OK」、
それ以外は「NG」と表示したいです。
FIND と IFERROR を使った式を書いてください。
=IF(IFERROR(FIND("ABC", A2), 0)=1, "OK", "NG")
問題5
A2 に「abcX123」という文字列が入っています。
大文字「X」の前の文字列だけ取り出したいです。
FIND と LEFT を使った式を書いてください。
=LEFT(A2, FIND("X", A2)-1)
FIND は「文字の位置を知る」関数ですが、
大文字小文字を区別することで、
コードチェック・ラベルの判定・境界の抽出など、細かい条件分岐に使える強力な“フィルター”になります。
まずは「A と a をきちんと区別して探せる」という感覚を掴んで、
LEFT / MID / RIGHT・IFERROR と一緒に少しずつ組み合わせていくと、
文字列処理の設計力がぐっと上がっていきます。
