いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)FIND関数で見つからない原因と対策

似ているが異なる文字を検索している

 次の画像ではD3セルにFIND関数を使った式を入力し、B3セルの文字列から漢数字の「〇」(零)の位置を取得しようとしています。
 一見よさそうですがその字は見つからず、結果は#VALUEのエラーとなっています。
 原因はFIND関数の第1引数(検索文字列)が漢数字ではなく記号の「○」(マル)となっていることです。

 


 当然ながら式中の「〇」(零)を「○」(マル)に代えれば正しく位置を取得できます。
 何の文字かわからない場合はとりあえずコピペすればOKです。

日付や時刻を対象として検索している

 次の画像ではB3セルの日付中の「1」の位置を取得しようとしていますが結果はエラーとなっています(「"1"」を「1」にしてもダメ)。
 これは日付や時刻が実はシリアル値(数値)として記録されていることが原因です。具体的には「2024/3/12」という日付は「45363」という数値として記録されているので(数式バーで確認してもそう見えないのが難しいところですが)、「1」という文字は見つかりません。

 なお、このような検索の場合常にエラーになるわけではなく、例えば「"1"」を「"5"」に代えれば結果は「2」になります。「5」は「45363」の2文字目だからです。
 


 実際にはあまりない検索とは思いますが、やるとすればTEXT関数でB3セルの見た目と同じ形式の文字列に変換したうえで検索することが考えられます。
 次の画像では「=FIND("1",TEXT(B3,"yyyy/m/d"))」という式で「1」の位置である「8」を取得しています。

書式設定(表示形式)により表示されている文字を検索している

 次の画像ではB3セル内の「億」の字の位置を取得しようとしていますが見つからずエラーとなっています。

 


 B3セルを選択して数式バーの値を見てみると単に「100」となっています。
 B3セルの「億円」という文字は書式設定(表示形式)により表示されているものでセルに記録されている値そのものではないので見つからない、というわけです。
 日付を和暦で表示させているような場合にこのようなケースがさらに起こりやすいかもしれません。

引数を逆に指定している

 第1引数として対象文字列(長い方)を、第2引数として検索文字列(短い方)を指定している、というケースです。
 次の画像のD3セルの式は「=FIND(B3,"C")」となっており、つまり「C」の中から「ABCDEFG」の位置を取得しようとしています。当然見つからないので結果はエラーとなります。

大文字と小文字を比較している

 次の画像ではB3セルの「ABCDEFG」という文字から小文字の「c」の位置を取得しようとしています。
 Excelでは大文字と小文字が区別されず同一視されるケースが多い(例として「="C"="c"」という判定式はTRUE、つまり真となる)のですが、FIND関数ではきちんと区別されるので結果はエラーとなります。

 

 大文字と小文字を区別せずに位置を取得したい場合、FIND関数と他の関数を組み合わせる方法も考えられますが、SEARCH関数を使えばより簡単に解決します。

 D3セル

=SEARCH("c",B3)

 SEARCH関数はFIND関数と同様に指定した文字列の位置(〇文字目)を取得する関数ですが、大文字と小文字を区別しないのでエラーにならず位置を取得できます。

全角文字と半角文字を比較している

 次の画像のB3セルの「ABCDEFG」という文字は全角です。そこから半角の「C」の位置を取得しようとしているので結果はエラーとなっています。

 


 全角文字と半角文字を区別せず位置を取得したい場合、FIND関数とASC関数を組み合わせる方法が考えられます。

 D3セル

=FIND("C",ASC(B3))

 「ASC(B3)」によりB3セルの文字列を半角文字に変換しています。これにより全角と半角の文字列同士で検索ができます。
 なお大文字/小文字と全角文字/半角文字をいずれも区別しない場合は次のような式にする方法が考えらえれます。

=SEARCH("c",ASC(B3))

第3引数の不適切な指定

 FIND関数には第3引数(開始位置)があり、指定した数値の位置から検索を開始することができます。
 あまり使わない引数ですが、0以下や大きすぎる数値(第2引数の文字列の長さより大きい)を指定するとエラーになります。
 また、次の画像のように第3引数の値を指定せずカンマだけがある状態でもエラーとなります。

 これも実際にはあまりないケースとは思いますが、文字列が見つかっている場合でも#VALUE!エラーとなり得るというのがちょっとした注意点です。