ExcelのFINDB関数の使い方|半角・全角の文字位置をバイト数で検索
ExcelのFINDB関数は、文字列の中から特定の文字を検索して「バイト位置」を返す関数です。半角を1バイト、全角を2バイトとしてカウントします。日本語のように半角と全角が混在する文字列を扱うときに便利ですよ。
似た関数にFIND関数がありますが、こちらは「文字位置」を返します。一方のFINDBは「バイト位置」を返す点が大きな違いです。商品コードや固定長フォーマットのデータを扱うとき、FINDBが活躍する場面もありますよ。
この記事ではFINDB関数の構文・基本的な使い方・FIND関数との違い・実務での活用例まで解説します。初〜中級者向けの内容ですよ。
ExcelのFINDB関数とは?
FINDB関数は、指定した文字列が検索対象の中で最初に現れる位置を、バイト数で返してくれる関数です。半角は1バイト、全角は2バイトとしてカウントされます。
たとえばabcあいうという文字列で「あ」を検索してみましょう。FIND関数は「4文字目」と返し、FINDB関数も「4バイト目」と返します。ここまでは同じですよね。でも「い」を検索すると結果が変わります。FIND関数は「5文字目」、FINDB関数は「6バイト目」を返します。半角3文字(3バイト)+ 全角1文字(2バイト)の次なので、6バイト目になるわけです。
このバイト換算が、商品コードや住所など「半角と全角が混在するデータ」を扱うときに役立ちます。
FINDB関数の構文と引数
FINDB関数の構文はシンプルです。
=FINDB(検索文字列, 対象, [開始位置])
引数は3つあり、最後の「開始位置」だけ省略できます。
| 引数 | 必須 | 説明 |
|---|---|---|
| 検索文字列 | 必須 | 探したい文字列 |
| 対象 | 必須 | 検索される側の文字列(セル参照可) |
| 開始位置 | 省略可 | 何バイト目から検索を始めるか(既定値は1) |
戻り値は、検索文字列が最初に現れる位置をバイト数で返します。1始まり(最初のバイトは1)です。見つからない場合は#VALUE!エラーになりますよ。
なお、FINDB関数は大文字と小文字を区別します。「A」と「a」は別の文字として扱われるので注意してください。大文字小文字を区別したくない場合は、後述するSEARCHB関数を使います。
FINDB関数の基本的な使い方
実際に3つのパターンでFINDB関数を使ってみましょう。
パターン1: 半角のみの文字列
A1セルにapple-orangeが入っているとします。
=FINDB("-", A1)
結果は6になります。半角文字はすべて1バイトなので、6文字目=6バイト目という単純な結果です。この場合はFIND関数を使っても同じ結果になります。
パターン2: 全角のみの文字列
A1セルに東京都新宿区が入っているとします。
=FINDB("新", A1)
結果は7になります。全角文字は1文字あたり2バイトなので、「東京都」までで6バイト、「新」が7バイト目から始まる計算ですね。FIND関数なら「4」を返します。
パターン3: 半角と全角が混在する文字列
A1セルにABC-赤色が入っているとします。
=FINDB("赤", A1)
結果は5になります。半角のABC-が4バイト、続く「赤」が5バイト目から始まるためです。FIND関数なら「5」を返しますが、これは偶然の一致で、半角の数が増えると差が出てきます。
FIND関数とFINDB関数の違い
ここで、FIND関数とFINDB関数の違いを整理しましょう。
| 比較項目 | FIND関数 | FINDB関数 |
|---|---|---|
| カウント方式 | 文字数(半角・全角ともに1) | バイト数(半角=1, 全角=2) |
| 戻り値の単位 | 文字位置 | バイト位置 |
| 大文字小文字区別 | あり | あり |
| ワイルドカード | 非対応 | 非対応 |
| 主な用途 | 一般的な文字位置検索 | 固定長データ・バイト単位の処理 |
具体例で比較してみます。abc東京という文字列で「京」を検索した場合の結果を見てみましょう。
| 関数 | 結果 | 理由 |
|---|---|---|
=FIND("京", "abc東京") | 5 | abcが3文字、東が4文字目、京が5文字目 |
=FINDB("京", "abc東京") | 6 | abcが3バイト、東が4〜5バイト、京が6バイト目から |
このように、全角文字が含まれると結果が変わります。「文字位置」が必要な場合はFIND、「バイト位置」が必要な場合はFINDBという使い分けですね。
SEARCHB関数との違い
FINDB関数と似た関数にSEARCHB関数があります。違いは「大文字小文字を区別するかどうか」と「ワイルドカードに対応するか」の2点です。
| 比較項目 | FINDB関数 | SEARCHB関数 |
|---|---|---|
| 大文字小文字区別 | あり | なし |
| ワイルドカード | 非対応 | 対応(*, ?) |
| 用途 | 厳密一致の検索 | あいまい検索 |
たとえばAppleという文字列で小文字の「a」を検索する場合を考えてみます。FINDB関数は対象に小文字「a」が存在しないため#VALUE!エラーを返します。一方のSEARCHB関数は大文字小文字を区別しないので1を返します。ワイルドカード検索が必要な場合や、大文字小文字を気にせず検索したい場合はSEARCHBを選んでくださいね。
実務での活用例
FINDB関数は単体ではなく、LEFTB・MIDB・RIGHTBといったバイト系関数と組み合わせて使うことが多いです。よく使うパターンを3つ紹介します。
例1: 全角文字の前の半角部分を取り出す
A1セルにABC123東京支店が入っているとします。全角文字「東」より前の半角部分を抽出するには、次の数式を使います。
=LEFTB(A1, FINDB("東", A1) - 1)
結果はABC123になります。「東」のバイト位置(7)から1を引いた6バイト分を左から取り出す、という考え方です。
例2: 区切り文字でデータを分割する
A1セルに商品-ABC-001が入っているとき、最初のハイフンより後ろの部分を取り出します。
=MIDB(A1, FINDB("-", A1) + 1, 100)
結果はABC-001になります。ハイフンのバイト位置(5)の次(6)から、十分な長さ(100バイト)を切り出します。MIDBは指定したバイト数を超える分は切り捨てるので、長めの数値を指定して問題ありません。
例3: エラーを防ぐためのIFERROR組み合わせ
検索文字が見つからないと#VALUE!エラーになります。そのため、IFERROR関数(エラー時に代替値を返す関数)でラップしておくと安心ですよ。
=IFERROR(FINDB("対象文字", A1), 0)
検索文字が見つからない場合に0を返すようにしています。条件分岐に組み込むときは、こうしてエラーを潰しておきましょう。
よくあるエラーと対処法
FINDB関数で発生しやすいエラーは#VALUE!の1種類です。原因と対処法を整理しておきます。
| 原因 | 対処法 |
|---|---|
| 検索文字列が対象内に見つからない | IFERRORでエラー回避するか、検索文字列のスペルを確認 |
| 開始位置が 0 以下 | 開始位置を1以上に修正 |
| 開始位置が対象のバイト数を超えている | LENB関数(文字列のバイト数を返す関数)で対象のバイト数を確認 |
| 開始位置が全角文字の2バイト目を指している | 開始位置を1バイト前後にずらす |
特に4つ目の「全角文字の2バイト目を指定している」は気づきにくいケースです。たとえば東京に対して=FINDB("京", "東京", 2)とした場合を考えてみましょう。開始位置の2バイト目は「東」の2バイト目を指しているため、エラーになります。開始位置は基本的に1か、半角文字の境界に揃えるのが安全ですよ。
DBCS設定による挙動の注意点
FINDB関数のバイト換算が動作するのは、Excelの言語設定が特定の言語になっているときだけです。具体的には「日本語」「中国語(簡体字/繁体字)」「韓国語」の場合に限られます。これらはダブルバイト文字セット(DBCS)対応言語と呼ばれます。
英語環境などDBCS非対応言語では、FINDB関数はFIND関数と同じ挙動になります。全文字を1バイトとしてカウントする状態です。海外拠点とExcelファイルをやり取りする場合は、念のため言語設定を確認しておくと安心ですね。
まとめ
ExcelのFINDB関数は、半角と全角が混在する文字列を「バイト数」で位置検索する関数です。FIND関数との違いを整理しておきましょう。
- FINDB関数: バイト位置を返す(半角=1, 全角=2)。固定長データや業務システム連携で活躍
- FIND関数: 文字位置を返す。一般的な文字検索ならこちら
- SEARCHB関数: 大文字小文字を区別せず、ワイルドカード対応のバイト検索
- LEFTB・MIDB・RIGHTB: バイト数で文字を取り出す関数。FINDBとセットで使うと強力
商品コード・型番・住所など「半角と全角が混在するデータ」を扱う場面で、FINDB関数を思い出してみてくださいね。エラーが出やすい場合はIFERROR関数でラップしておくと、業務でも安心して使えますよ。
