<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SEARCHB &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/searchb/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Thu, 04 Jun 2026 15:16:38 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>SEARCHB &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ExcelのSEARCHB関数の使い方｜バイト位置を大文字小文字区別なしで検索</title>
		<link>https://mashukabu.com/excel-searchb-function/</link>
					<comments>https://mashukabu.com/excel-searchb-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Tue, 05 May 2026 12:45:28 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[SEARCHB]]></category>
		<category><![CDATA[バイト]]></category>
		<category><![CDATA[文字列]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=6511</guid>

					<description><![CDATA[ExcelのSEARCHB関数の使い方を解説します。バイト数で文字位置を検索する仕組み、大文字小文字を区別しない特徴、ワイルドカード活用法、FINDB・SEARCHとの違い、LEFTB・MIDBとの組み合わせ例まで紹介します。]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">ExcelのSEARCHB関数の使い方｜バイト位置を大文字小文字区別なしで検索</h1>



<p class="wp-block-paragraph">ExcelのSEARCHB関数は、文字列の中から特定の文字を検索して「バイト位置」を返す関数です。半角は1バイト、全角は2バイトとしてカウントしますよ。SEARCH関数と似ていますが、戻り値の単位がバイト数になる点が異なります。</p>



<p class="wp-block-paragraph">SEARCHB関数の最大の特徴は2つです。1つ目は大文字と小文字を区別しないこと。2つ目はワイルドカード（<code>*</code> <code>?</code>）が使えること。表記ゆれのあるデータや、あいまい検索が必要な場面で活躍してくれますよ。</p>



<p class="wp-block-paragraph">この記事ではSEARCHB関数の構文と基本的な使い方を解説します。FINDB関数との違いやワイルドカード活用例、実務でのパターンも紹介しますね。Excel初〜中級者向けの内容ですよ。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"></li><li><a href="#toc1" tabindex="0">ExcelのSEARCHB関数とは？</a></li><li><a href="#toc2" tabindex="0">SEARCHB関数の構文と引数</a></li><li><a href="#toc3" tabindex="0">SEARCHB関数の基本的な使い方</a><ol><li><a href="#toc4" tabindex="0">パターン1: 半角のみの文字列</a></li><li><a href="#toc5" tabindex="0">パターン2: 全角のみの文字列</a></li><li><a href="#toc6" tabindex="0">パターン3: 半角と全角が混在する文字列</a></li></ol></li><li><a href="#toc7" tabindex="0">SEARCHB関数でワイルドカードを使う</a></li><li><a href="#toc8" tabindex="0">SEARCH関数・FINDB関数との違い</a><ol><li><a href="#toc9" tabindex="0">SEARCH関数との違い（文字数 vs バイト数）</a></li><li><a href="#toc10" tabindex="0">FINDB関数との違い（大小区別とワイルドカード）</a></li></ol></li><li><a href="#toc11" tabindex="0">SEARCHB関数の実務活用例</a><ol><li><a href="#toc12" tabindex="0">例1: 全角文字の前の半角部分を取り出す</a></li><li><a href="#toc13" tabindex="0">例2: 区切り文字でデータを分割する</a></li><li><a href="#toc14" tabindex="0">例3: ワイルドカードで型番を抽出する</a></li><li><a href="#toc15" tabindex="0">例4: エラーを防ぐためのIFERROR組み合わせ</a></li></ol></li><li><a href="#toc16" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc17" tabindex="0">DBCS設定による挙動の注意点</a></li><li><a href="#toc18" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ExcelのSEARCHB関数とは？</span></h2>



<p class="wp-block-paragraph">SEARCHB関数は、指定した文字列が検索対象の中で最初に現れる位置を、バイト数で返してくれる関数です。読み方は「サーチ・ビー」で、SEARCH（検索）とByte（バイト）を組み合わせた名前ですよ。</p>



<p class="wp-block-paragraph">半角は1バイト、全角は2バイトとしてカウントされます。たとえば<code>abc東京</code>という文字列で「京」を検索してみましょう。SEARCH関数は「5文字目」と返し、SEARCHB関数は「6バイト目」と返します。半角3文字（3バイト）+ 全角1文字（2バイト）の次なので、6バイト目になるわけです。</p>



<p class="wp-block-paragraph">SEARCHB関数の特徴は、大文字と小文字を区別しないこと、そしてワイルドカードが使えることです。「Apple」の中から「a」を検索してもヒットしますし、<code>?-*</code>のようなあいまい指定もできますよ。</p>



<h2 class="wp-block-heading"><span id="toc2">SEARCHB関数の構文と引数</span></h2>



<p class="wp-block-paragraph">SEARCHB関数の構文はシンプルです。</p>



<pre class="wp-block-code"><code>=SEARCHB(検索文字列, 対象, [開始位置])</code></pre>



<p class="wp-block-paragraph">引数は3つあり、最後の「開始位置」だけ省略できます。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須</th><th>説明</th></tr></thead><tbody><tr><td>検索文字列</td><td>必須</td><td>探したい文字列（ワイルドカード使用可）</td></tr><tr><td>対象</td><td>必須</td><td>検索される側の文字列（セル参照可）</td></tr><tr><td>開始位置</td><td>省略可</td><td>何バイト目から検索を始めるか（既定値は1）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">戻り値は、検索文字列が最初に現れる位置をバイト数で返します。1始まり（最初のバイトは1）です。見つからない場合は<code>#VALUE!</code>エラーになりますよ。</p>



<p class="wp-block-paragraph">なおSEARCHB関数は大文字と小文字を区別しません。「A」と「a」は同じ文字として扱われます。区別したい場合は、後述するFINDB関数を使ってくださいね。</p>



<h2 class="wp-block-heading"><span id="toc3">SEARCHB関数の基本的な使い方</span></h2>



<p class="wp-block-paragraph">実際に3つのパターンでSEARCHB関数を使ってみましょう。</p>



<h3 class="wp-block-heading"><span id="toc4">パターン1: 半角のみの文字列</span></h3>



<p class="wp-block-paragraph">A1セルに<code>apple-orange</code>が入っているとします。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;-&quot;, A1)</code></pre>



<p class="wp-block-paragraph">結果は<code>6</code>になります。半角文字はすべて1バイトなので、6文字目=6バイト目という単純な結果ですね。</p>



<p class="wp-block-paragraph">ここで大文字小文字区別なしの特徴を試してみましょう。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;APPLE&quot;, A1)</code></pre>



<p class="wp-block-paragraph">結果は<code>1</code>になります。対象は小文字の<code>apple</code>ですが、SEARCHB関数は大小を区別しないのでヒットしますよ。</p>



<h3 class="wp-block-heading"><span id="toc5">パターン2: 全角のみの文字列</span></h3>



<p class="wp-block-paragraph">A1セルに<code>東京都新宿区</code>が入っているとします。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;新&quot;, A1)</code></pre>



<p class="wp-block-paragraph">結果は<code>7</code>になります。全角文字は1文字あたり2バイトなので、「東京都」までで6バイト、「新」が7バイト目から始まる計算ですね。SEARCH関数なら「4」を返します。</p>



<h3 class="wp-block-heading"><span id="toc6">パターン3: 半角と全角が混在する文字列</span></h3>



<p class="wp-block-paragraph">A1セルに<code>ABC-赤色</code>が入っているとします。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;赤&quot;, A1)</code></pre>



<p class="wp-block-paragraph">結果は<code>5</code>になります。半角の<code>ABC-</code>が4バイト、続く「赤」が5バイト目から始まるためです。</p>



<p class="wp-block-paragraph">ここでも大小区別なしの強みが活きます。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;abc&quot;, A1)</code></pre>



<p class="wp-block-paragraph">結果は<code>1</code>になります。対象は大文字の<code>ABC</code>ですが、小文字で指定してもヒットしてくれますよ。表記ゆれのあるデータで便利な特徴です。</p>



<h2 class="wp-block-heading"><span id="toc7">SEARCHB関数でワイルドカードを使う</span></h2>



<p class="wp-block-paragraph">SEARCHB関数のもう1つの強みが、ワイルドカードによるあいまい検索です。FINDB関数では使えない機能なので、ぜひ押さえておきたいですね。</p>



<figure class="wp-block-table"><table><thead><tr><th>ワイルドカード</th><th>意味</th></tr></thead><tbody><tr><td><code>?</code></td><td>任意の1文字</td></tr><tr><td><code>*</code></td><td>任意の文字列（0文字以上）</td></tr><tr><td><code>~?</code> <code>~*</code></td><td>リテラルの<code>?</code>や<code>*</code>を検索</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">A1セルに<code>Order-A1-2025</code>が入っているとして、いくつか試してみましょう。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;A?-&quot;, A1)</code></pre>



<p class="wp-block-paragraph">結果は<code>7</code>になります。「A」+任意の1文字+「-」というパターンが7バイト目から始まることを示しています。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;Order-*-2025&quot;, A1)</code></pre>



<p class="wp-block-paragraph">結果は<code>1</code>になります。「Order-」と「-2025」の間に何文字あってもマッチします。型番や注文番号のフォーマット検証に応用できますよ。</p>



<p class="wp-block-paragraph">リテラルの<code>?</code>を検索したいときは<code>~?</code>と書きます。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;~?&quot;, &quot;本当?偽物?&quot;)</code></pre>



<p class="wp-block-paragraph">結果は<code>5</code>になります。チルダ（<code>~</code>）でエスケープすることで、ワイルドカードではなく文字としての<code>?</code>を検索できますよ。</p>



<h2 class="wp-block-heading"><span id="toc8">SEARCH関数・FINDB関数との違い</span></h2>



<p class="wp-block-paragraph">SEARCHB関数は、SEARCH関数とFINDB関数の両方と比較されます。それぞれの違いを表で整理しておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc9">SEARCH関数との違い（文字数 vs バイト数）</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>SEARCH関数</th><th>SEARCHB関数</th></tr></thead><tbody><tr><td>カウント方式</td><td>文字数（半角・全角ともに1）</td><td>バイト数（半角=1, 全角=2）</td></tr><tr><td>戻り値</td><td>文字位置</td><td>バイト位置</td></tr><tr><td>大文字小文字区別</td><td>なし</td><td>なし</td></tr><tr><td>ワイルドカード</td><td>対応</td><td>対応</td></tr><tr><td>主な用途</td><td>一般的な文字位置検索</td><td>LEFTB・MIDBと連携した抽出</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">具体例で比較してみます。<code>abc東京</code>という文字列で「京」を検索した場合の結果はこうなります。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>結果</th><th>理由</th></tr></thead><tbody><tr><td><code>=SEARCH("京", "abc東京")</code></td><td>5</td><td>abcが3文字、東が4文字目、京が5文字目</td></tr><tr><td><code>=SEARCHB("京", "abc東京")</code></td><td>6</td><td>abcが3バイト、東が4〜5バイト、京が6バイト目から</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">LEFTB・MIDB・RIGHTB といったバイト系関数と組み合わせるなら、必ずSEARCHB関数を使ってください。SEARCH関数の結果をバイト系関数に渡すと、全角文字でズレが発生しますよ。SEARCH関数について詳しくは <a href="https://mashukabu.com/excel-function-howto-use-search/">2026-04-04-excel-function-howto-use-search</a> を参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc10">FINDB関数との違い（大小区別とワイルドカード）</span></h3>



<p class="wp-block-paragraph">似た関数にFINDB関数があります。こちらもバイト位置を返してくれますが、大小区別とワイルドカードの扱いが真逆です。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>FINDB関数</th><th>SEARCHB関数</th></tr></thead><tbody><tr><td>大文字小文字区別</td><td>あり</td><td>なし</td></tr><tr><td>ワイルドカード</td><td>非対応</td><td>対応（<code>*</code>, <code>?</code>）</td></tr><tr><td>用途</td><td>厳密一致の検索</td><td>あいまい検索・表記ゆれ対応</td></tr><tr><td>エラー条件</td><td>厳密一致しないと #VALUE!</td><td>大小無視で見つかればヒット</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">たとえば<code>Apple</code>という文字列で小文字の「a」を検索する場合を考えてみましょう。FINDB関数は対象に小文字「a」が存在しないため<code>#VALUE!</code>エラーを返します。一方のSEARCHB関数は大文字小文字を区別しないので<code>1</code>を返してくれますよ。</p>



<p class="wp-block-paragraph">使い分けの目安は次のとおりです。</p>



<ul class="wp-block-list"><li><strong>厳密一致でバイト位置を取りたい</strong>: FINDB関数を使う</li><li><strong>大小無視やあいまい検索でバイト位置を取りたい</strong>: SEARCHB関数を使う</li></ul>



<p class="wp-block-paragraph">FINDB関数について詳しくは <a href="https://mashukabu.com/excel-findb-function/">2026-05-04-excel-findb-function</a> を参考にしてください。</p>



<h2 class="wp-block-heading"><span id="toc11">SEARCHB関数の実務活用例</span></h2>



<p class="wp-block-paragraph">SEARCHB関数は単体で使うより、バイト系関数と組み合わせるのが基本です。LEFTB・MIDB・RIGHTBとセットで使うことが多いですよ。よく使うパターンを4つ紹介しますね。</p>



<h3 class="wp-block-heading"><span id="toc12">例1: 全角文字の前の半角部分を取り出す</span></h3>



<p class="wp-block-paragraph">A1セルに<code>abc123東京支店</code>が入っているとします。全角文字「東」より前の半角部分を抽出するには、次の数式を使います。</p>



<pre class="wp-block-code"><code>=LEFTB(A1, SEARCHB(&quot;東&quot;, A1) - 1)</code></pre>



<p class="wp-block-paragraph">結果は<code>abc123</code>になります。「東」のバイト位置（7）から1を引いた6バイト分を左から取り出す、という考え方ですね。LEFTB関数について詳しくは <a href="https://mashukabu.com/excel-leftb-function/">2026-05-03-excel-leftb-function</a> を参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc13">例2: 区切り文字でデータを分割する</span></h3>



<p class="wp-block-paragraph">A1セルに<code>商品-abc-001</code>が入っているとき、最初のハイフンより後ろの部分を取り出します。</p>



<pre class="wp-block-code"><code>=MIDB(A1, SEARCHB(&quot;-&quot;, A1) + 1, 100)</code></pre>



<p class="wp-block-paragraph">結果は<code>abc-001</code>になります。ハイフンのバイト位置（5）の次（6）から、十分な長さ（100バイト）を切り出します。MIDB関数について詳しくは <a href="https://mashukabu.com/excel-function-howto-use-midb/">2023-01-03-excel-function-howto-use-midb</a> を参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc14">例3: ワイルドカードで型番を抽出する</span></h3>



<p class="wp-block-paragraph">A1セルに<code>Order#A1-2025</code>が入っているとして、「A」+任意1文字+「-」のパターン以降を取り出します。</p>



<pre class="wp-block-code"><code>=MIDB(A1, SEARCHB(&quot;A?-&quot;, A1), 100)</code></pre>



<p class="wp-block-paragraph">結果は<code>A1-2025</code>になります。固定の文字列で検索できないあいまいなフォーマットでも、ワイルドカードでマッチさせて切り出せますよ。FINDB関数ではできないSEARCHB関数ならではの活用例です。</p>



<h3 class="wp-block-heading"><span id="toc15">例4: エラーを防ぐためのIFERROR組み合わせ</span></h3>



<p class="wp-block-paragraph">検索文字が見つからないと<code>#VALUE!</code>エラーになります。条件分岐に組み込むときは、IFERROR関数（エラー時に代替値を返す関数）でラップしておくと安心ですよ。</p>



<pre class="wp-block-code"><code>=IFERROR(SEARCHB(&quot;対象文字&quot;, A1), 0)</code></pre>



<p class="wp-block-paragraph">検索文字が見つからない場合に<code>0</code>を返すようにしています。後続の数式でエラーを連鎖させない工夫ですね。</p>



<h2 class="wp-block-heading"><span id="toc16">よくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">SEARCHB関数で発生しやすいエラーを整理しておきます。</p>



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>#VALUE!</code></td><td>検索文字列が対象内に見つからない</td><td>IFERRORでラップするか、検索文字列を見直す</td></tr><tr><td><code>#VALUE!</code></td><td>開始位置が 0 以下</td><td>開始位置を1以上に修正</td></tr><tr><td><code>#VALUE!</code></td><td>開始位置が対象のバイト数を超える</td><td>LENB関数で対象のバイト数を確認</td></tr><tr><td><code>#VALUE!</code></td><td>開始位置が全角文字の2バイト目を指している</td><td>開始位置を1バイト前後にずらす</td></tr><tr><td><code>#NAME?</code></td><td>関数名のスペル間違い</td><td><code>SEARCHB</code>の綴りを確認</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に4つ目の「全角文字の2バイト目を指定している」は気づきにくいケースです。たとえば<code>東京</code>に対して<code>=SEARCHB("京", "東京", 2)</code>とした場合を考えてみましょう。開始位置の2バイト目は「東」の2バイト目を指しているため、エラーになります。開始位置は基本的に1か、半角文字の境界に揃えるのが安全ですよ。</p>



<p class="wp-block-paragraph">対象のバイト数を事前に確認したいときは、LENB関数が便利です。詳しくは <a href="https://mashukabu.com/excel-function-howto-use-lenb/">2026-04-04-excel-function-howto-use-lenb</a> を参考にしてください。</p>



<h2 class="wp-block-heading"><span id="toc17">DBCS設定による挙動の注意点</span></h2>



<p class="wp-block-paragraph">SEARCHB関数のバイト換算が動作するのは、Excelの言語設定が特定の言語になっているときだけです。具体的には「日本語」「中国語（簡体字／繁体字）」「韓国語」の場合に限られます。これらはダブルバイト文字セット（DBCS）対応言語と呼ばれますよ。</p>



<p class="wp-block-paragraph">英語環境などDBCS非対応言語では、SEARCHB関数はSEARCH関数と同じ挙動になります。全文字を1バイトとしてカウントする状態ですね。海外拠点とExcelファイルをやり取りする場合は、念のため言語設定を確認しておくと安心です。</p>



<h2 class="wp-block-heading"><span id="toc18">まとめ</span></h2>



<p class="wp-block-paragraph">ExcelのSEARCHB関数は、半角と全角が混在する文字列を「バイト数」で位置検索できる関数です。大文字小文字を区別せず、ワイルドカードも使える柔軟な検索関数ですよ。3つの関連関数と整理しておきましょう。</p>



<ul class="wp-block-list"><li><strong>SEARCHB関数</strong>: バイト位置を返す。大小区別なし・ワイルドカード対応。あいまい検索向き</li><li><strong>SEARCH関数</strong>: 文字位置を返す。大小区別なし・ワイルドカード対応。一般的な文字検索向き</li><li><strong>FINDB関数</strong>: バイト位置を返す。大小区別あり・ワイルドカード非対応。厳密一致向き</li></ul>



<p class="wp-block-paragraph">商品コード・型番・住所など「半角と全角が混在するデータ」を扱う場面で、SEARCHB関数を思い出してみてくださいね。ワイルドカードを使ったあいまい検索や、表記ゆれのあるデータの解析に強みを発揮しますよ。エラーが出やすい場面ではIFERROR関数でラップしておくと、業務でも安心して使えます。</p>



<p class="wp-block-paragraph">関連する関数の一覧は <a href="https://mashukabu.com/excel-function-alphabetical-order/">2022-02-13-excel-function-alphabetical-order</a> や <a href="https://mashukabu.com/excel-function-list-by-function/">2022-02-19-excel-function-list-by-function</a> にまとめてあります。あわせてチェックしてみてくださいね。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-searchb-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのSEARCHB関数の使い方｜バイト位置（大小無視）</title>
		<link>https://mashukabu.com/spreadsheet-searchb-function/</link>
					<comments>https://mashukabu.com/spreadsheet-searchb-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sun, 19 Apr 2026 14:11:08 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[FINDB]]></category>
		<category><![CDATA[MIDB]]></category>
		<category><![CDATA[SEARCH]]></category>
		<category><![CDATA[SEARCHB]]></category>
		<category><![CDATA[バイト]]></category>
		<category><![CDATA[文字列操作]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=6069</guid>

					<description><![CDATA[スプレッドシートのSEARCHB関数の使い方を実例付きで解説します。文字列の中で指定文字が何バイト目にあるかを返す関数で、全角2バイト・半角1バイトでカウントし大文字・小文字を区別せずワイルドカードも使えます。基本構文、FINDBとの違い、MIDBとの組み合わせで固定長データを曖昧検索で切り出す実務パターン、よくあるエラー対処まで丁寧にまとめました。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートで全角半角が混ざったデータを処理していると、「特定の文字が先頭から何バイト目にあるかを、大文字小文字を気にせず調べたい」という場面、ありませんか。商品名や顧客データのように表記ゆれがあるデータで、曖昧検索しつつバイト位置を取りたいケースは意外とよくありますよね。</p>



<p class="wp-block-paragraph">FINDB関数でも似たことはできますが、大文字と小文字を厳密に区別するので、表記ゆれに弱いのが難点です。そんなときにピッタリ使えるのが、スプレッドシートのSEARCHB関数ですよ。全角2バイト・半角1バイトでカウントしながら、大文字小文字を無視してバイト位置を返してくれます。</p>



<p class="wp-block-paragraph">この記事では、スプレッドシートのSEARCHB関数の構文から、SEARCH関数やFINDB関数との違い、ワイルドカードを使った曖昧検索、MIDBと組み合わせて可変長データを切り出す実務パターンまで紹介します。コピペで使えるテンプレートも置いておきますね。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのSEARCHB関数とは？</a><ol><li><a href="#toc2" tabindex="0">関数の基本構文と引数</a></li><li><a href="#toc3" tabindex="0">SEARCH関数との違い（文字数 vs バイト数）</a></li><li><a href="#toc4" tabindex="0">SEARCHBとFINDBの違い（大小区別とワイルドカード）</a></li></ol></li><li><a href="#toc5" tabindex="0">SEARCHB関数の基本的な使い方</a><ol><li><a href="#toc6" tabindex="0">全角・半角が混在する文字列での挙動</a></li><li><a href="#toc7" tabindex="0">ワイルドカードで曖昧検索する</a></li><li><a href="#toc8" tabindex="0">引数「開始位置」の使い方</a></li></ol></li><li><a href="#toc9" tabindex="0">実務で使えるSEARCHB関数の活用パターン</a><ol><li><a href="#toc10" tabindex="0">表記ゆれを許容してフィールドを切り出す</a></li><li><a href="#toc11" tabindex="0">商品コードの規則で位置を特定する</a></li><li><a href="#toc12" tabindex="0">特定キーワードの出現位置でデータ仕分け</a></li></ol></li><li><a href="#toc13" tabindex="0">SEARCHBとMIDBを組み合わせた曖昧フィールド分解</a><ol><li><a href="#toc14" tabindex="0">区切り文字ベースのフィールド分解テンプレート</a></li><li><a href="#toc15" tabindex="0">2段階検索で安全に位置を取る</a></li></ol></li><li><a href="#toc16" tabindex="0">FIND系・SEARCH系関数との使い分け</a><ol><li><a href="#toc17" tabindex="0">FIND・FINDB・SEARCH・SEARCHBの比較</a></li><li><a href="#toc18" tabindex="0">曖昧検索・表記ゆれの判断ポイント</a></li></ol></li><li><a href="#toc19" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc20" tabindex="0">&#8220;#VALUE!&#8221; エラー（検索文字列が見つからない）</a></li><li><a href="#toc21" tabindex="0">&#8220;#VALUE!&#8221; エラー（開始位置が不正）</a></li><li><a href="#toc22" tabindex="0">ワイルドカードを文字として検索したい</a></li></ol></li><li><a href="#toc23" tabindex="0">関連記事</a></li><li><a href="#toc24" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのSEARCHB関数とは？</span></h2>



<p class="wp-block-paragraph">スプレッドシートのSEARCHB関数は、文字列の中で指定した検索文字列が何バイト目から始まるかを返す関数です。読み方は「サーチ・ビー」で、SEARCH（検索）と Byte（バイト）を組み合わせた名前ですよ。</p>



<p class="wp-block-paragraph">全角文字は2バイト、半角文字は1バイトとしてカウントします。特徴は、大文字と小文字を区別しないこと、そしてワイルドカード（<code>*</code> や <code>?</code>）が使えることです。「A」でも「a」でもヒットするので、表記ゆれのあるデータの解析にはSEARCHBが向いていますよ。</p>



<h3 class="wp-block-heading"><span id="toc2">関数の基本構文と引数</span></h3>



<p class="wp-block-paragraph">基本構文はシンプルで、引数は3つです。</p>



<pre class="wp-block-code"><code>=SEARCHB(検索文字列, 対象文字列, [開始位置])</code></pre>



<p class="wp-block-paragraph">引数の意味を整理しておきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>意味</th><th>省略時の挙動</th></tr></thead><tbody><tr><td>検索文字列</td><td>探したい文字や記号（ワイルドカード可）</td><td>省略不可</td></tr><tr><td>対象文字列</td><td>検索される側の文字列</td><td>省略不可</td></tr><tr><td>開始位置</td><td>検索を開始するバイト位置</td><td>省略時は1（先頭から）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">開始位置に小数を指定した場合は、整数部分に切り捨てられます。0以下を指定したり、見つからない文字列を指定したりすると <code>#VALUE!</code> エラーになるので、そこだけ注意してくださいね。</p>



<h3 class="wp-block-heading"><span id="toc3">SEARCH関数との違い（文字数 vs バイト数）</span></h3>



<p class="wp-block-paragraph">SEARCH関数とSEARCHB関数は、返ってくる位置の単位が違います。ここを押さえておくと、使い分けで迷いません。</p>



<ul class="wp-block-list"><li><strong>SEARCH</strong>: 検索文字列が先頭から「何文字目」にあるかを返す。全角・半角を区別しない</li><li><strong>SEARCHB</strong>: 検索文字列が先頭から「何バイト目」にあるかを返す。全角=2バイト、半角=1バイトで計算</li></ul>



<p class="wp-block-paragraph">たとえば「商品a-100」という文字列で、&#8221;A&#8221;（大文字）の位置を調べた場合はこうなります。</p>



<figure class="wp-block-table"><table><thead><tr><th>数式</th><th>結果</th><th>解説</th></tr></thead><tbody><tr><td><code>=SEARCH("A", "商品a-100")</code></td><td>3</td><td>先頭から3文字目（大小無視で「a」にヒット）</td></tr><tr><td><code>=SEARCHB("A", "商品a-100")</code></td><td>5</td><td>先頭から5バイト目（商2+品2+a=5バイト目スタート）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">MIDB関数やLEFTB関数と組み合わせるなら、必ずSEARCHB関数側を使ってください。SEARCHの結果をバイト系関数に渡すとズレてしまいますよ。</p>



<h3 class="wp-block-heading"><span id="toc4">SEARCHBとFINDBの違い（大小区別とワイルドカード）</span></h3>



<p class="wp-block-paragraph">似たような関数にFINDB関数があります。こちらもバイト単位で位置を返してくれる関数ですが、大小区別とワイルドカードの扱いが真逆です。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>大文字小文字</th><th>ワイルドカード</th></tr></thead><tbody><tr><td>SEARCHB</td><td>区別しない</td><td><code>*</code> や <code>?</code> が使える</td></tr><tr><td>FINDB</td><td>区別する</td><td>使えない（リテラル検索のみ）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">表記ゆれや曖昧検索を許容したい場面ではSEARCHB、商品コードのように「A と a は別物として厳密に扱いたい」場面ではFINDB、という整理ですよ。</p>



<h2 class="wp-block-heading"><span id="toc5">SEARCHB関数の基本的な使い方</span></h2>



<p class="wp-block-paragraph">それでは実際に使ってみましょう。バイト位置のカウント方法と、大小無視の挙動を意識すると、結果がイメージしやすくなります。</p>



<h3 class="wp-block-heading"><span id="toc6">全角・半角が混在する文字列での挙動</span></h3>



<p class="wp-block-paragraph">代表的なパターンをいくつか並べてみますね。</p>



<figure class="wp-block-table"><table><thead><tr><th>数式</th><th>結果</th><th>バイトの内訳</th></tr></thead><tbody><tr><td><code>=SEARCHB("う", "あいうえお")</code></td><td>5</td><td>「う」は先頭から5バイト目（あ2+い2+う=5バイト目スタート）</td></tr><tr><td><code>=SEARCHB("c", "ABCDE")</code></td><td>3</td><td>大小無視で「C」にヒット、3バイト目</td></tr><tr><td><code>=SEARCHB("関", "Excel関数")</code></td><td>6</td><td>半角5バイト+「関」で6バイト目スタート</td></tr><tr><td><code>=SEARCHB("a", "ABCabc")</code></td><td>1</td><td>大小無視で先頭の「A」にヒット、1バイト目</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">4行目がポイントです。SEARCHBは大小を区別しないので、&#8221;a&#8221; で検索しても先頭の &#8220;A&#8221; にヒットします。ここが厳密一致のFINDBとは違うところですよ。</p>



<h3 class="wp-block-heading"><span id="toc7">ワイルドカードで曖昧検索する</span></h3>



<p class="wp-block-paragraph">SEARCHBはワイルドカードが使えるのが大きな武器です。<code>*</code> は任意の文字列、<code>?</code> は任意の1文字を表します。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;商品*&quot;, &quot;注文書：商品A-100&quot;)    → 9  （「商品」で始まる部分の開始位置）
=SEARCHB(&quot;A?100&quot;, &quot;商品A-100&quot;)          → 5  （「A」+任意1文字+「100」にヒット）</code></pre>



<p class="wp-block-paragraph">「商品コードの規則だけわかっている」「区切り記号は揺れるかもしれない」みたいな場面で、ワイルドカードが効いてきますよ。</p>



<p class="wp-block-paragraph">ワイルドカードそのものを文字として検索したいときは、前にチルダ（<code>~</code>）を付けます。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;~*&quot;, &quot;在庫*あり&quot;)    → 5  （「*」という文字自体を検索）</code></pre>



<h3 class="wp-block-heading"><span id="toc8">引数「開始位置」の使い方</span></h3>



<p class="wp-block-paragraph">開始位置を指定すると、その位置から右側だけを検索対象にできます。同じ文字が複数回出てくる文字列で「2番目の位置」を調べたいときに便利ですよ。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;-&quot;, &quot;A-100-XYZ&quot;)            → 2  （1番目のハイフン）
=SEARCHB(&quot;-&quot;, &quot;A-100-XYZ&quot;, 3)         → 6  （3バイト目以降で探した1番目）</code></pre>



<p class="wp-block-paragraph">1番目のハイフン位置をSEARCHBで求めて、その次のバイトから2番目を探す、という入れ子にすると、動的に区切り位置を追えます。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;-&quot;, A2, SEARCHB(&quot;-&quot;, A2) + 1)</code></pre>



<p class="wp-block-paragraph">A2にデータを入れておけば、「2番目のハイフンは何バイト目か」が求められますよ。</p>



<h2 class="wp-block-heading"><span id="toc9">実務で使えるSEARCHB関数の活用パターン</span></h2>



<p class="wp-block-paragraph">SEARCHB関数が本領を発揮するのは、表記ゆれのあるデータや曖昧な区切りルールのデータを処理する場面です。よく出てくる3パターンを紹介しますね。</p>



<h3 class="wp-block-heading"><span id="toc10">表記ゆれを許容してフィールドを切り出す</span></h3>



<p class="wp-block-paragraph">顧客データで「メールアドレスのドメイン部分だけ抜き出したい」とき、入力者によって <code>@</code> が全角だったり半角だったりすることがありますよね。SEARCHBなら大小無視＋ワイルドカードでまとめて対応できます。</p>



<pre class="wp-block-code"><code>ドメイン抽出:  =MIDB(A2, SEARCHB(&quot;@&quot;, A2) + 1, LENB(A2))</code></pre>



<p class="wp-block-paragraph">半角の <code>@</code> でも、大文字小文字が違うドメインでも、まとめて同じ式で処理できますよ。</p>



<h3 class="wp-block-heading"><span id="toc11">商品コードの規則で位置を特定する</span></h3>



<p class="wp-block-paragraph">商品コードが「カテゴリ-番号」形式で、カテゴリ部分の長さが可変のデータを処理したいとき、ワイルドカードで先頭パターンを指定しつつバイト位置を取れます。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;?-&quot;, A2)</code></pre>



<p class="wp-block-paragraph">「任意1文字＋ハイフン」という条件で、最初にマッチするバイト位置を返します。カテゴリ名の長さが揺れていても、ハイフンの直前までを <code>LEFTB</code> で取り出せますよ。</p>



<h3 class="wp-block-heading"><span id="toc12">特定キーワードの出現位置でデータ仕分け</span></h3>



<p class="wp-block-paragraph">商品説明文の中で特定のキーワード（例: 「限定」「SALE」など）が出現するかどうか、出現位置が何バイト目か、で仕分けをしたい場合にも使えます。SALE と sale の両方を拾いたいときは、SEARCHBを使うと1本の式で済みますよ。</p>



<pre class="wp-block-code"><code>=IF(IFERROR(SEARCHB(&quot;sale&quot;, A2), 0) &gt; 0, &quot;セール対象&quot;, &quot;通常価格&quot;)</code></pre>



<p class="wp-block-paragraph">IFERROR でラップして、見つからない場合の <code>#VALUE!</code> を 0 に置き換えています。大小無視で検索できるので、「SALE」「Sale」「sale」のどれにもヒットしますよ。</p>



<h2 class="wp-block-heading"><span id="toc13">SEARCHBとMIDBを組み合わせた曖昧フィールド分解</span></h2>



<p class="wp-block-paragraph">区切り文字で可変長フィールドを切り出すときに、区切り記号自体に表記ゆれがある場合は、SEARCHBとMIDBの組み合わせが使いやすいです。コピペで使えるテンプレートをまとめておきますね。</p>



<h3 class="wp-block-heading"><span id="toc14">区切り文字ベースのフィールド分解テンプレート</span></h3>



<p class="wp-block-paragraph">A列に「コード-名前-備考」形式のデータが入っている想定です。ハイフンでフィールドを3つに分けましょう。SEARCHBなら、区切り記号周辺の英字の大小に揺れがあっても同じ式で処理できますよ。</p>



<pre class="wp-block-code"><code>1番目のハイフン位置: =SEARCHB(&quot;-&quot;, A2)
2番目のハイフン位置: =SEARCHB(&quot;-&quot;, A2, SEARCHB(&quot;-&quot;, A2) + 1)
コード:              =LEFTB(A2, SEARCHB(&quot;-&quot;, A2) - 1)
名前:                =MIDB(A2, SEARCHB(&quot;-&quot;, A2) + 1, SEARCHB(&quot;-&quot;, A2, SEARCHB(&quot;-&quot;, A2)+1) - SEARCHB(&quot;-&quot;, A2) - 1)
備考:                =MIDB(A2, SEARCHB(&quot;-&quot;, A2, SEARCHB(&quot;-&quot;, A2)+1) + 1, LENB(A2))</code></pre>



<p class="wp-block-paragraph">長く見えますが、考え方はシンプルです。「区切り位置をSEARCHBで求めて、その前後をMIDBで切る」というパターンの積み重ねなので、1行ずつ追うと読み解けますよ。</p>



<h3 class="wp-block-heading"><span id="toc15">2段階検索で安全に位置を取る</span></h3>



<p class="wp-block-paragraph">区切り文字が必ず含まれるとは限らないデータでは、IFERRORで守りを入れておきましょう。</p>



<pre class="wp-block-code"><code>=IFERROR(SEARCHB(&quot;-&quot;, A2), LENB(A2) + 1)</code></pre>



<p class="wp-block-paragraph">ハイフンが見つからない場合は「文字列の末尾+1バイト目」を返すようにしておくと、MIDBに渡しても空文字が返るだけで、エラー連鎖を防げますよ。</p>



<h2 class="wp-block-heading"><span id="toc16">FIND系・SEARCH系関数との使い分け</span></h2>



<p class="wp-block-paragraph">スプレッドシートには検索系の関数がいくつもあります。ここで全体像を整理しておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc17">FIND・FINDB・SEARCH・SEARCHBの比較</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>単位</th><th>大小区別</th><th>ワイルドカード</th><th>典型用途</th></tr></thead><tbody><tr><td>FIND</td><td>文字数</td><td>あり</td><td>使えない</td><td>商品コード内の区切り位置（半角のみ）</td></tr><tr><td>FINDB</td><td>バイト数</td><td>あり</td><td>使えない</td><td>全角混在データの厳密な固定長解析</td></tr><tr><td>SEARCH</td><td>文字数</td><td>なし</td><td>使える</td><td>曖昧検索での文字位置特定</td></tr><tr><td>SEARCHB</td><td>バイト数</td><td>なし</td><td>使える</td><td>表記ゆれ許容でバイト位置を取りたい</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">厳密一致派のFINDB、曖昧検索派のSEARCHB、という覚え方が一番シンプルですよ。どちらもバイト位置を返す点は共通なので、MIDBやLEFTBと組み合わせて固定長データを扱う用途では、どちらを使っても出力の整合性は保たれます。</p>



<h3 class="wp-block-heading"><span id="toc18">曖昧検索・表記ゆれの判断ポイント</span></h3>



<p class="wp-block-paragraph">SEARCHBを選ぶ基準は、次の3点で判断できます。</p>



<ul class="wp-block-list"><li>出力先やデータ形式がバイト単位で扱われている（固定長ファイル、基幹システム連携）</li><li>大文字と小文字を区別したくない（ユーザー入力、表記ゆれのある商品名など）</li><li>ワイルドカードで柔軟なパターン検索がしたい</li></ul>



<p class="wp-block-paragraph">逆に、商品コードのように「大文字小文字を厳密に区別したい」「完全一致で検索したい」場面では、FINDBのほうが安全ですよ。</p>



<h2 class="wp-block-heading"><span id="toc19">よくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">SEARCHB関数でハマりやすいポイントを3つまとめました。エラーの原因と対策をセットで覚えておくと、現場で詰まりにくくなりますよ。</p>



<h3 class="wp-block-heading"><span id="toc20">&#8220;#VALUE!&#8221; エラー（検索文字列が見つからない）</span></h3>



<p class="wp-block-paragraph">一番よく遭遇するのが、検索文字列が対象文字列に含まれていないパターンです。たとえば <code>=SEARCHB("-", "ABCDE")</code> のようなケースですね。</p>



<p class="wp-block-paragraph">IFERRORでラップして、見つからない場合の代替値を決めておくのがおすすめです。</p>



<pre class="wp-block-code"><code>=IFERROR(SEARCHB(&quot;-&quot;, A2), 0)</code></pre>



<p class="wp-block-paragraph">これで、ハイフンが見つからない行は 0 として扱われ、後続の計算で判定しやすくなりますよ。</p>



<h3 class="wp-block-heading"><span id="toc21">&#8220;#VALUE!&#8221; エラー（開始位置が不正）</span></h3>



<p class="wp-block-paragraph">開始位置に 0 以下や、文字列の長さを超える値を指定すると同じく <code>#VALUE!</code> が返ります。SEARCHB のネスト（1つ目の結果に +1 して2つ目を探す、など）で1つ目が見つからないと、2つ目の開始位置が <code>#VALUE!</code> になり連鎖するパターンですね。</p>



<pre class="wp-block-code"><code>=IFERROR(SEARCHB(&quot;-&quot;, A2, IFERROR(SEARCHB(&quot;-&quot;, A2), 0) + 1), 0)</code></pre>



<p class="wp-block-paragraph">入れ子のSEARCHBもIFERRORで守っておくと、見つからない行でもエラーが表示されなくなりますよ。</p>



<h3 class="wp-block-heading"><span id="toc22">ワイルドカードを文字として検索したい</span></h3>



<p class="wp-block-paragraph">ワイルドカード（<code>*</code> や <code>?</code>）そのものを検索したい場合、普通に指定すると「任意の文字列」と解釈されてしまいます。この場合はチルダ（<code>~</code>）を前に付けると、リテラル文字として扱われますよ。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;~?&quot;, &quot;質問は？ここをクリック&quot;)   → NG（半角ではない場合）
=SEARCHB(&quot;~?&quot;, &quot;Who? Me?&quot;)               → 4 （半角「?」を検索してヒット）</code></pre>



<p class="wp-block-paragraph">全角の <code>？</code> を検索したいときはチルダ不要でそのまま指定できます。<code>*</code> や <code>?</code> の半角記号を含むデータを扱うときだけ、チルダを意識すればOKですよ。</p>



<h2 class="wp-block-heading"><span id="toc23">関連記事</span></h2>



<p class="wp-block-paragraph">SEARCHB関数と組み合わせて使う文字列操作系の関数も、あわせて押さえておくと作業がはかどりますよ。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-search-function/">スプレッドシートのSEARCH関数の使い方</a>：バイト数ではなく文字数で位置を返す版です。SEARCHBとの単位の違いを確認したいときに。</li><li><a href="https://mashukabu.com/spreadsheet-findb-function/">スプレッドシートのFINDB関数の使い方</a>：大文字小文字を厳密に区別したい厳密一致派の関数です。SEARCHBとの使い分けに。</li><li><a href="https://mashukabu.com/spreadsheet-midb-function/">スプレッドシートのMIDB関数の使い方</a>：SEARCHBで求めたバイト位置から文字列を切り出すときの相棒です。</li><li><a href="https://mashukabu.com/spreadsheet-leftb-function/">スプレッドシートのLEFTB関数の使い方</a>：区切り位置の手前までをまとめて取り出したいときに便利です。</li></ul>



<h2 class="wp-block-heading"><span id="toc24">まとめ</span></h2>



<p class="wp-block-paragraph">スプレッドシートのSEARCHB関数は、文字列の中で指定文字が何バイト目にあるかを返す、曖昧検索でバイト位置を取りたいときに便利な関数です。最後に要点を整理しておきましょう。</p>



<ul class="wp-block-list"><li>構文は <code>=SEARCHB(検索文字列, 対象文字列, [開始位置])</code> の3引数。開始位置省略時は先頭から</li><li>全角=2バイト、半角=1バイトとしてカウントする</li><li>大文字と小文字を区別しない（&#8221;A&#8221; と &#8220;a&#8221; は同じ扱い）</li><li>ワイルドカード <code>*</code> と <code>?</code> が使える</li><li>SEARCHは文字数、SEARCHBはバイト数。MIDBやLEFTBに渡すならSEARCHB一択</li><li>FINDBとの違いは、大小区別の有無とワイルドカード可否</li><li>見つからないと #VALUE! になるので、IFERROR でラップして守る</li></ul>



<p class="wp-block-paragraph">まずは手元の区切り文字付きデータに、<code>=SEARCHB("-", A2)</code> のような形で当ててみてください。MIDBと組み合わせてフィールド分解すれば、表記ゆれのあるデータ整形の作業がぐっと短縮できますよ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-searchb-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのFINDB関数の使い方｜バイト位置（大小区別）</title>
		<link>https://mashukabu.com/spreadsheet-findb-function/</link>
					<comments>https://mashukabu.com/spreadsheet-findb-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sun, 19 Apr 2026 14:11:03 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[FIND]]></category>
		<category><![CDATA[FINDB]]></category>
		<category><![CDATA[MIDB]]></category>
		<category><![CDATA[SEARCHB]]></category>
		<category><![CDATA[バイト]]></category>
		<category><![CDATA[文字列操作]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=6065</guid>

					<description><![CDATA[スプレッドシートのFINDB関数の使い方を実例付きで解説します。文字列の中で指定文字が何バイト目にあるかを返す関数で、全角2バイト・半角1バイトでカウントし大文字・小文字を区別します。基本構文、FIND/SEARCHBとの違い、MIDBとの組み合わせで固定長データを動的に切り出す実務パターン、よくあるエラー対処まで丁寧にまとめました。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートで全角半角混在のデータを整形していると、「特定の記号が先頭から何バイト目にあるか知りたい」という場面、ありませんか。固定長データで区切り文字の位置を特定して、そこから前後にフィールドを分解したい、なんてケースもよくありますよね。</p>



<p class="wp-block-paragraph">FIND関数だと「文字数」でしか位置を返してくれないので、全角が混ざるとMIDBに渡すバイト位置としては使えないんですよね。そんなときにピッタリ使えるのが、スプレッドシートのFINDB関数です。全角2バイト・半角1バイトでカウントしながら、指定した文字が何バイト目に出現するかをサクッと返してくれますよ。</p>



<p class="wp-block-paragraph">この記事では、スプレッドシートのFINDB関数の構文から、FIND関数やSEARCHB関数との違い、MIDBと組み合わせて固定長データを動的に切り出す実務パターンまで紹介します。区切り文字ベースのフィールド分解テンプレートも置いておきますね。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-3" checked><label class="toc-title" for="toc-checkbox-3">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのFINDB関数とは？</a><ol><li><a href="#toc2" tabindex="0">関数の基本構文と引数</a></li><li><a href="#toc3" tabindex="0">FIND関数との違い（文字数 vs バイト数）</a></li><li><a href="#toc4" tabindex="0">FINDBとSEARCHBの違い（大小区別の有無）</a></li></ol></li><li><a href="#toc5" tabindex="0">FINDB関数の基本的な使い方</a><ol><li><a href="#toc6" tabindex="0">全角・半角が混在する文字列での挙動</a></li><li><a href="#toc7" tabindex="0">引数「開始位置」の使い方</a></li></ol></li><li><a href="#toc8" tabindex="0">実務で使えるFINDB関数の活用パターン</a><ol><li><a href="#toc9" tabindex="0">区切り文字で動的にフィールドを切り出す</a></li><li><a href="#toc10" tabindex="0">固定長ファイルの可変長フィールドを処理する</a></li><li><a href="#toc11" tabindex="0">特定キーワードの出現位置でデータ仕分け</a></li></ol></li><li><a href="#toc12" tabindex="0">FINDBとMIDBを組み合わせたフィールド分解</a><ol><li><a href="#toc13" tabindex="0">区切り文字ベースのフィールド分解テンプレート</a></li><li><a href="#toc14" tabindex="0">2段階検索で安全に位置を取る</a></li></ol></li><li><a href="#toc15" tabindex="0">FIND系・SEARCH系関数との使い分け</a><ol><li><a href="#toc16" tabindex="0">FIND・FINDB・SEARCH・SEARCHBの比較</a></li><li><a href="#toc17" tabindex="0">バイト系・大小区別の判断ポイント</a></li></ol></li><li><a href="#toc18" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc19" tabindex="0">&#8220;#VALUE!&#8221; エラー（検索文字列が見つからない）</a></li><li><a href="#toc20" tabindex="0">&#8220;#VALUE!&#8221; エラー（開始位置が不正）</a></li><li><a href="#toc21" tabindex="0">期待した位置と違う値が返る</a></li></ol></li><li><a href="#toc22" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのFINDB関数とは？</span></h2>



<p class="wp-block-paragraph">スプレッドシートのFINDB関数は、文字列の中で指定した検索文字列が何バイト目から始まるかを返す関数です。読み方は「ファインド・ビー」で、FIND（検索）と Byte（バイト）を組み合わせた名前ですよ。</p>



<p class="wp-block-paragraph">全角文字は2バイト、半角文字は1バイトとしてカウントします。大文字と小文字を区別するのがポイントで、&#8221;A&#8221; と &#8220;a&#8221; は別物として扱われますよ。</p>



<h3 class="wp-block-heading"><span id="toc2">関数の基本構文と引数</span></h3>



<p class="wp-block-paragraph">基本構文はシンプルで、引数は3つです。</p>



<pre class="wp-block-code"><code>=FINDB(検索文字列, 対象文字列, [開始位置])</code></pre>



<p class="wp-block-paragraph">引数の意味を整理しておきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>意味</th><th>省略時の挙動</th></tr></thead><tbody><tr><td>検索文字列</td><td>探したい文字や記号</td><td>省略不可</td></tr><tr><td>対象文字列</td><td>検索される側の文字列</td><td>省略不可</td></tr><tr><td>開始位置</td><td>検索を開始するバイト位置</td><td>省略時は1（先頭から）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">開始位置に小数を指定した場合は、整数部分に切り捨てられます。0以下を指定したり、見つからない文字列を指定したりすると <code>#VALUE!</code> エラーになるので、気をつけてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc3">FIND関数との違い（文字数 vs バイト数）</span></h3>



<p class="wp-block-paragraph">FIND関数とFINDB関数は、返ってくる位置の単位が違います。ここを押さえておくと、使い分けで迷いません。</p>



<ul class="wp-block-list"><li><strong>FIND</strong>: 検索文字列が先頭から「何文字目」にあるかを返す。全角・半角を区別しない</li><li><strong>FINDB</strong>: 検索文字列が先頭から「何バイト目」にあるかを返す。全角=2バイト、半角=1バイトで計算</li></ul>



<p class="wp-block-paragraph">たとえば「商品A-100」という文字列で、&#8221;-&#8220;（ハイフン）の位置を調べた場合はこうなります。</p>



<figure class="wp-block-table"><table><thead><tr><th>数式</th><th>結果</th><th>解説</th></tr></thead><tbody><tr><td><code>=FIND("-", "商品A-100")</code></td><td>4</td><td>先頭から4文字目（商・品・A・-）</td></tr><tr><td><code>=FINDB("-", "商品A-100")</code></td><td>6</td><td>先頭から6バイト目（商2+品2+A1+-=6バイト目スタート）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">MIDB関数やLEFTB関数と組み合わせるなら、必ずFINDB関数側を使ってくださいね。FINDの結果をバイト系関数に渡すとズレてしまいます。</p>



<h3 class="wp-block-heading"><span id="toc4">FINDBとSEARCHBの違い（大小区別の有無）</span></h3>



<p class="wp-block-paragraph">似たような関数にSEARCHB関数があります。こちらもバイト単位で位置を返してくれる関数ですが、大小区別とワイルドカードの扱いが違います。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>大文字小文字</th><th>ワイルドカード</th></tr></thead><tbody><tr><td>FINDB</td><td>区別する</td><td>使えない（リテラル検索のみ）</td></tr><tr><td>SEARCHB</td><td>区別しない</td><td><code>*</code> や <code>?</code> が使える</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">商品コードのように「A と a は別物として扱いたい」「ワイルドカードじゃなくきっちり文字列一致で探したい」場合はFINDB、あいまい検索でいい場合はSEARCHBを選ぶ、という整理ですよ。</p>



<h2 class="wp-block-heading"><span id="toc5">FINDB関数の基本的な使い方</span></h2>



<p class="wp-block-paragraph">それでは実際に使ってみましょう。バイト位置のカウント方法を意識すると、結果がイメージしやすくなります。</p>



<h3 class="wp-block-heading"><span id="toc6">全角・半角が混在する文字列での挙動</span></h3>



<p class="wp-block-paragraph">代表的なパターンをいくつか並べてみますね。</p>



<figure class="wp-block-table"><table><thead><tr><th>数式</th><th>結果</th><th>バイトの内訳</th></tr></thead><tbody><tr><td><code>=FINDB("う", "あいうえお")</code></td><td>5</td><td>「う」は先頭から5バイト目（あ2+い2+う=5バイト目スタート）</td></tr><tr><td><code>=FINDB("C", "ABCDE")</code></td><td>3</td><td>半角3文字目=3バイト目</td></tr><tr><td><code>=FINDB("関", "Excel関数")</code></td><td>6</td><td>半角5バイト+「関」で6バイト目スタート</td></tr><tr><td><code>=FINDB("a", "ABCabc")</code></td><td>4</td><td>小文字「a」は4バイト目（大文字とは区別）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">4行目に注目してください。FINDBは大文字小文字を区別するので、&#8221;A&#8221; で検索すると1、&#8221;a&#8221; で検索すると4が返ってきます。ここが曖昧検索のSEARCHBとは違うところですよ。</p>



<h3 class="wp-block-heading"><span id="toc7">引数「開始位置」の使い方</span></h3>



<p class="wp-block-paragraph">開始位置を指定すると、その位置から右側だけを検索対象にできます。同じ文字が複数回出てくる文字列で「2番目の位置」を調べたいときに便利ですよ。</p>



<pre class="wp-block-code"><code>=FINDB(&quot;-&quot;, &quot;A-100-XYZ&quot;)            → 2  （1番目のハイフン）
=FINDB(&quot;-&quot;, &quot;A-100-XYZ&quot;, 3)         → 6  （3バイト目以降で探した1番目）</code></pre>



<p class="wp-block-paragraph">1番目のハイフン位置をFINDBで求めて、その次のバイトから2番目を探す、という入れ子にすると、動的に区切り位置を追えます。</p>



<pre class="wp-block-code"><code>=FINDB(&quot;-&quot;, A2, FINDB(&quot;-&quot;, A2) + 1)</code></pre>



<p class="wp-block-paragraph">A2にデータを入れておけば、「2番目のハイフンは何バイト目か」が求められますよ。</p>



<h2 class="wp-block-heading"><span id="toc8">実務で使えるFINDB関数の活用パターン</span></h2>



<p class="wp-block-paragraph">FINDB関数が本領を発揮するのは、固定長ファイルの動的解析や区切り文字ベースのフィールド分解です。よく出てくる3パターンを紹介しますね。</p>



<h3 class="wp-block-heading"><span id="toc9">区切り文字で動的にフィールドを切り出す</span></h3>



<p class="wp-block-paragraph">全角半角が混ざった「氏名＠メールアドレス」形式のデータから、＠の前後を切り分けたいときに使えます。</p>



<pre class="wp-block-code"><code>氏名部分:         =LEFTB(A2, FINDB(&quot;@&quot;, A2) - 1)
メール部分:       =MIDB(A2, FINDB(&quot;@&quot;, A2) + 1, LENB(A2))</code></pre>



<p class="wp-block-paragraph">FINDBで＠の位置をバイトで特定して、LEFTBで前半、MIDBで後半を切り出す流れです。全角の氏名が混ざっていても、バイト基準で揃うので崩れませんよ。</p>



<h3 class="wp-block-heading"><span id="toc10">固定長ファイルの可変長フィールドを処理する</span></h3>



<p class="wp-block-paragraph">古い基幹システムの出力で、「固定長だけど末尾にタブや特殊記号で区切られた可変長フィールドがある」ケースもあります。FINDBで区切り記号のバイト位置を調べて、そこまでをLEFTBで取り出すとラクですよ。</p>



<pre class="wp-block-code"><code>=LEFTB(A2, FINDB(CHAR(9), A2) - 1)</code></pre>



<p class="wp-block-paragraph">CHAR(9) はタブ文字です。タブ区切りまでのバイト数を取り出して、先頭からその位置までを抽出しています。区切り位置が行ごとに違っても、式は1本で対応できますよ。</p>



<h3 class="wp-block-heading"><span id="toc11">特定キーワードの出現位置でデータ仕分け</span></h3>



<p class="wp-block-paragraph">商品説明文の中で特定のキーワード（例: 「限定」「特価」など）が出現するかどうか、出現位置が何バイト目か、で仕分けをしたい場合にも使えます。</p>



<pre class="wp-block-code"><code>=IF(IFERROR(FINDB(&quot;限定&quot;, A2), 0) &gt; 0, &quot;限定商品&quot;, &quot;通常商品&quot;)</code></pre>



<p class="wp-block-paragraph">IFERROR でラップして、見つからない場合の <code>#VALUE!</code> を 0 に置き換えています。これで「限定」を含む行だけフラグを立てる処理が、1列の数式で完結しますよ。</p>



<h2 class="wp-block-heading"><span id="toc12">FINDBとMIDBを組み合わせたフィールド分解</span></h2>



<p class="wp-block-paragraph">区切り文字で動的に可変長フィールドを切り出すときは、FINDBとMIDBの組み合わせが定番です。コピペで使えるテンプレートをまとめておきますね。</p>



<h3 class="wp-block-heading"><span id="toc13">区切り文字ベースのフィールド分解テンプレート</span></h3>



<p class="wp-block-paragraph">A列に「コード-名前-備考」形式のデータが入っている想定です。ハイフンでフィールドを3つに分けましょう。</p>



<pre class="wp-block-code"><code>1番目のハイフン位置: =FINDB(&quot;-&quot;, A2)
2番目のハイフン位置: =FINDB(&quot;-&quot;, A2, FINDB(&quot;-&quot;, A2) + 1)
コード:              =LEFTB(A2, FINDB(&quot;-&quot;, A2) - 1)
名前:                =MIDB(A2, FINDB(&quot;-&quot;, A2) + 1, FINDB(&quot;-&quot;, A2, FINDB(&quot;-&quot;, A2)+1) - FINDB(&quot;-&quot;, A2) - 1)
備考:                =MIDB(A2, FINDB(&quot;-&quot;, A2, FINDB(&quot;-&quot;, A2)+1) + 1, LENB(A2))</code></pre>



<p class="wp-block-paragraph">長く見えますが、考え方はシンプルです。「区切り位置をFINDBで求めて、その前後をMIDBで切る」というパターンの積み重ねなので、1行ずつ追うと読み解けますよ。</p>



<h3 class="wp-block-heading"><span id="toc14">2段階検索で安全に位置を取る</span></h3>



<p class="wp-block-paragraph">区切り文字が必ず含まれるとは限らないデータでは、IFERRORで守りを入れておきましょう。</p>



<pre class="wp-block-code"><code>=IFERROR(FINDB(&quot;-&quot;, A2), LENB(A2) + 1)</code></pre>



<p class="wp-block-paragraph">ハイフンが見つからない場合は「文字列の末尾+1バイト目」を返すようにしておくと、MIDBに渡しても空文字が返るだけで、エラー連鎖を防げますよ。</p>



<h2 class="wp-block-heading"><span id="toc15">FIND系・SEARCH系関数との使い分け</span></h2>



<p class="wp-block-paragraph">スプレッドシートには検索系の関数がいくつもあります。ここで全体像を整理しておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc16">FIND・FINDB・SEARCH・SEARCHBの比較</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>単位</th><th>大小区別</th><th>ワイルドカード</th><th>典型用途</th></tr></thead><tbody><tr><td>FIND</td><td>文字数</td><td>あり</td><td>使えない</td><td>商品コード内の区切り位置（半角のみ）</td></tr><tr><td>FINDB</td><td>バイト数</td><td>あり</td><td>使えない</td><td>全角混在データの固定長解析</td></tr><tr><td>SEARCH</td><td>文字数</td><td>なし</td><td>使える</td><td>曖昧検索での文字位置特定</td></tr><tr><td>SEARCHB</td><td>バイト数</td><td>なし</td><td>使える</td><td>曖昧検索でバイト位置を取りたい</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ExcelのFINDB関数との挙動比較をしたいときは、<a href="https://mashukabu.com/excel-findb-function/">ExcelのFINDB関数の使い方</a>も参考になりますよ。</p>



<h3 class="wp-block-heading"><span id="toc17">バイト系・大小区別の判断ポイント</span></h3>



<p class="wp-block-paragraph">FINDBを選ぶ基準は、次の3点で判断できます。</p>



<ul class="wp-block-list"><li>出力先やデータ形式がバイト単位で扱われている（固定長ファイル、基幹システム連携）</li><li>大文字と小文字を厳密に区別したい（商品コード、パスワード文字列など）</li><li>ワイルドカードは不要で、完全一致の検索で十分</li></ul>



<p class="wp-block-paragraph">逆に、社内の集計シートで「大文字小文字は気にしない、位置さえわかればOK」という場面は、SEARCHやSEARCHBのほうが扱いやすいですよ。</p>



<h2 class="wp-block-heading"><span id="toc18">よくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">FINDB関数でハマりやすいポイントを3つまとめました。エラーの原因と対策をセットで覚えておくと、現場で詰まりにくくなりますよ。</p>



<h3 class="wp-block-heading"><span id="toc19">&#8220;#VALUE!&#8221; エラー（検索文字列が見つからない）</span></h3>



<p class="wp-block-paragraph">一番よく遭遇するのが、検索文字列が対象文字列に含まれていないパターンです。たとえば <code>=FINDB("-", "ABCDE")</code> のようなケースですね。</p>



<p class="wp-block-paragraph">IFERRORでラップして、見つからない場合の代替値を決めておくのがおすすめです。</p>



<pre class="wp-block-code"><code>=IFERROR(FINDB(&quot;-&quot;, A2), 0)</code></pre>



<p class="wp-block-paragraph">これで、ハイフンが見つからない行は 0 として扱われ、後続の計算で判定しやすくなりますよ。</p>



<h3 class="wp-block-heading"><span id="toc20">&#8220;#VALUE!&#8221; エラー（開始位置が不正）</span></h3>



<p class="wp-block-paragraph">開始位置に 0 以下や、文字列の長さを超える値を指定すると同じく <code>#VALUE!</code> が返ります。FINDB のネスト（1つ目の結果に +1 して2つ目を探す、など）で1つ目が見つからないと、2つ目の開始位置が <code>#VALUE!</code> になり連鎖するパターンですね。</p>



<pre class="wp-block-code"><code>=IFERROR(FINDB(&quot;-&quot;, A2, IFERROR(FINDB(&quot;-&quot;, A2), 0) + 1), 0)</code></pre>



<p class="wp-block-paragraph">入れ子のFINDBもIFERRORで守っておくと、見つからない行でもエラーが表示されなくなりますよ。</p>



<h3 class="wp-block-heading"><span id="toc21">期待した位置と違う値が返る</span></h3>



<p class="wp-block-paragraph">大小区別で &#8220;A&#8221; を探したつもりが &#8220;a&#8221; ばかりのデータだった、という場合は結果が <code>#VALUE!</code> になります。逆に大小区別が不要なら、SEARCHBを使えば解決しますよ。</p>



<pre class="wp-block-code"><code>=SEARCHB(&quot;a&quot;, A2)   → 大文字でも小文字でもヒットする</code></pre>



<p class="wp-block-paragraph">また、FINDとFINDBを取り違えて「バイト位置が欲しいのに文字位置が返ってきた」というケースもよくあります。MIDBやLEFTBに渡す前提なら、必ずFINDBで統一してくださいね。</p>



<h2 class="wp-block-heading"><span id="toc22">まとめ</span></h2>



<p class="wp-block-paragraph">スプレッドシートのFINDB関数は、文字列の中で指定文字が何バイト目にあるかを返す、固定長データ解析や区切り文字ベースのフィールド分解にピッタリの関数です。最後に要点を整理しておきましょう。</p>



<ul class="wp-block-list"><li>構文は <code>=FINDB(検索文字列, 対象文字列, [開始位置])</code> の3引数。開始位置省略時は先頭から</li><li>全角=2バイト、半角=1バイトとしてカウントする</li><li>大文字と小文字を区別する（&#8221;A&#8221; と &#8220;a&#8221; は別物）</li><li>FINDは文字数、FINDBはバイト数。MIDBやLEFTBに渡すならFINDB一択</li><li>SEARCHBとの違いは、大小区別の有無とワイルドカード可否</li><li>見つからないと #VALUE! になるので、IFERROR でラップして守る</li></ul>



<p class="wp-block-paragraph">まずは手元の区切り文字付きデータに、<code>=FINDB("-", A2)</code> のような形で当ててみてください。MIDBと組み合わせてフィールド分解すれば、固定長データ整形の作業がぐっと短縮できますよ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-findb-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのREPLACEB関数の使い方｜バイト位置指定置換</title>
		<link>https://mashukabu.com/spreadsheet-replaceb-function/</link>
					<comments>https://mashukabu.com/spreadsheet-replaceb-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sun, 19 Apr 2026 14:10:53 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[FINDB]]></category>
		<category><![CDATA[REPLACEB]]></category>
		<category><![CDATA[SEARCHB]]></category>
		<category><![CDATA[バイト]]></category>
		<category><![CDATA[文字列操作]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=6063</guid>

					<description><![CDATA[スプレッドシートのREPLACEB関数の使い方を実例付きで解説します。文字列の指定バイト位置から指定バイト数分を別の文字列に置き換える関数で、全角2バイト・半角1バイトでカウントします。基本構文、REPLACE関数との違い、SEARCHBやFINDBと組み合わせた動的な置換パターン、全角文字の途中で切れたときの挙動、よくあるエラー対処まで丁寧にまとめました。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートで全角半角が混ざったデータを扱っていて、「特定のバイト位置から数バイトだけをまとめて別の文字列に差し替えたい」という場面、ありませんか。固定長ファイルや基幹システム連携のデータでは、「何バイト目から何バイト分」という単位でフィールドが決まっていることが多いんですよね。</p>



<p class="wp-block-paragraph">REPLACE関数でも置換はできますが、こちらは文字数ベースなので、全角半角混在のデータでは位置がずれてしまうことがあります。そんなときに使えるのが、スプレッドシートのREPLACEB関数ですよ。全角2バイト・半角1バイトでカウントしながら、指定した位置から指定バイト数分をバッサリ置き換えてくれます。</p>



<p class="wp-block-paragraph">この記事では、スプレッドシートのREPLACEB関数の構文から、REPLACE関数との違い、SEARCHBやFINDBと組み合わせた動的な置換パターン、全角文字の途中で切れたときの挙動、よくあるエラー対処まで紹介します。コピペで使えるテンプレートも置いておきますね。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのREPLACEB関数とは？</a><ol><li><a href="#toc2" tabindex="0">関数の基本構文と引数</a></li><li><a href="#toc3" tabindex="0">REPLACE関数との違い（文字数 vs バイト数）</a></li><li><a href="#toc4" tabindex="0">REPLACEBとSUBSTITUTEの違い</a></li></ol></li><li><a href="#toc5" tabindex="0">REPLACEB関数の基本的な使い方</a><ol><li><a href="#toc6" tabindex="0">全角・半角が混在する文字列での挙動</a></li><li><a href="#toc7" tabindex="0">文字列の挿入と削除</a></li><li><a href="#toc8" tabindex="0">全角文字の途中で切れた場合の挙動</a></li></ol></li><li><a href="#toc9" tabindex="0">実務で使えるREPLACEB関数の活用パターン</a><ol><li><a href="#toc10" tabindex="0">固定長データの特定フィールドを書き換える</a></li><li><a href="#toc11" tabindex="0">SEARCHBで位置を取って動的に置換する</a></li><li><a href="#toc12" tabindex="0">マスク処理（個人情報の一部伏字化）</a></li></ol></li><li><a href="#toc13" tabindex="0">SEARCHB・FINDBと組み合わせた動的置換テンプレート</a><ol><li><a href="#toc14" tabindex="0">区切り文字で分けた最初のフィールドを置換</a></li><li><a href="#toc15" tabindex="0">2番目のフィールドだけを置換</a></li><li><a href="#toc16" tabindex="0">末尾のフィールドだけを置換</a></li><li><a href="#toc17" tabindex="0">厳密一致で置換したいときはFINDB</a></li></ol></li><li><a href="#toc18" tabindex="0">REPLACE系・SUBSTITUTE系関数との使い分け</a><ol><li><a href="#toc19" tabindex="0">REPLACE・REPLACEB・SUBSTITUTEの比較</a></li><li><a href="#toc20" tabindex="0">REPLACEBを選ぶべき場面</a></li></ol></li><li><a href="#toc21" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc22" tabindex="0">&#8220;#VALUE!&#8221; エラー（開始位置が0以下）</a></li><li><a href="#toc23" tabindex="0">全角文字の途中で切れて文字化けする</a></li><li><a href="#toc24" tabindex="0">置換後の文字列が想定より長く/短くなる</a></li></ol></li><li><a href="#toc25" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのREPLACEB関数とは？</span></h2>



<p class="wp-block-paragraph">スプレッドシートのREPLACEB関数は、文字列の指定したバイト位置から指定バイト数分を、別の文字列に置き換える関数です。読み方は「リプレース・ビー」で、REPLACE（置換）と Byte（バイト）を組み合わせた名前ですよ。</p>



<p class="wp-block-paragraph">全角文字は2バイト、半角文字は1バイトとしてカウントします。特徴は、置換する範囲をバイト数で指定することと、置換後の文字列の長さは元の範囲と違ってもOKなところです。「3バイト分を消して空文字にする」「2バイト分を5バイトに膨らませる」みたいな操作も自由自在ですよ。</p>



<h3 class="wp-block-heading"><span id="toc2">関数の基本構文と引数</span></h3>



<p class="wp-block-paragraph">基本構文はこちらです。引数は4つで、全て省略不可です。</p>



<pre class="wp-block-code"><code>=REPLACEB(対象文字列, 開始位置, バイト数, 置換文字列)</code></pre>



<p class="wp-block-paragraph">引数の意味を整理しておきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>意味</th><th>備考</th></tr></thead><tbody><tr><td>対象文字列</td><td>置換される側の文字列</td><td>省略不可</td></tr><tr><td>開始位置</td><td>置換を開始するバイト位置（1始まり）</td><td>1以上の整数</td></tr><tr><td>バイト数</td><td>置換する範囲のバイト数</td><td>0以上の整数</td></tr><tr><td>置換文字列</td><td>置き換えたい新しい文字列</td><td>空文字 <code>""</code> もOK</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">バイト数に 0 を指定すると、その位置に「挿入」する動きになります。削除したい場合は置換文字列を <code>""</code> にすればOKです。開始位置や バイト数が小数の場合は整数部分に切り捨てられますよ。</p>



<h3 class="wp-block-heading"><span id="toc3">REPLACE関数との違い（文字数 vs バイト数）</span></h3>



<p class="wp-block-paragraph">REPLACE関数とREPLACEB関数の違いは、位置とサイズの単位です。ここを押さえておくと、使い分けで迷いません。</p>



<ul class="wp-block-list"><li><strong>REPLACE</strong>: 「何文字目から何文字分」を置換する。全角半角を区別しない</li><li><strong>REPLACEB</strong>: 「何バイト目から何バイト分」を置換する。全角=2バイト、半角=1バイトで計算</li></ul>



<p class="wp-block-paragraph">たとえば「商品A-100」という文字列で、先頭から3文字目から2文字分を置き換えた場合と、3バイト目から2バイト分を置き換えた場合で結果がこう変わります。</p>



<figure class="wp-block-table"><table><thead><tr><th>数式</th><th>結果</th><th>解説</th></tr></thead><tbody><tr><td><code>=REPLACE("商品A-100", 3, 2, "XX")</code></td><td>商品XX100</td><td>3文字目「A」と4文字目「-」を&#8221;XX&#8221;に置換</td></tr><tr><td><code>=REPLACEB("商品A-100", 3, 2, "XX")</code></td><td>商XX-100</td><td>3バイト目「品」（2バイト）を&#8221;XX&#8221;に置換</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">単位が違うだけで置換される範囲も大きく変わりますよね。バイト単位のデータ（固定長CSV・基幹システム連携など）を扱うときはREPLACEB、文字数ベースで考えたいときはREPLACEを選びましょう。</p>



<h3 class="wp-block-heading"><span id="toc4">REPLACEBとSUBSTITUTEの違い</span></h3>



<p class="wp-block-paragraph">似たような置換系関数にSUBSTITUTE関数があります。こちらも文字列の置換ですが、役割は真逆と言ってもいいくらい違います。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>指定方法</th><th>典型用途</th></tr></thead><tbody><tr><td>REPLACEB</td><td>バイト位置＋バイト数で範囲指定</td><td>固定長データの特定フィールドを書き換え</td></tr><tr><td>SUBSTITUTE</td><td>「この文字列を」「この文字列に」と内容指定</td><td>全角スペースを半角に一括変換、表記ゆれ統一</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「位置がわかっているならREPLACEB、内容がわかっているならSUBSTITUTE」と覚えておくと迷いません。位置も内容も動的に決まる場合は、SEARCHBで位置を取ってからREPLACEBに渡す組み合わせが効きますよ。</p>



<h2 class="wp-block-heading"><span id="toc5">REPLACEB関数の基本的な使い方</span></h2>



<p class="wp-block-paragraph">それでは実際に使ってみましょう。バイト位置のカウント方法と、置換前後でサイズが変わる挙動を意識すると、結果がイメージしやすくなります。</p>



<h3 class="wp-block-heading"><span id="toc6">全角・半角が混在する文字列での挙動</span></h3>



<p class="wp-block-paragraph">代表的なパターンをいくつか並べてみますね。</p>



<figure class="wp-block-table"><table><thead><tr><th>数式</th><th>結果</th><th>バイトの内訳</th></tr></thead><tbody><tr><td><code>=REPLACEB("あいうえお", 3, 2, "ン")</code></td><td>あンえお</td><td>3バイト目から2バイト（「い」）を「ン」に置換</td></tr><tr><td><code>=REPLACEB("ABCDE", 2, 3, "xyz")</code></td><td>AxyzE</td><td>2バイト目から3バイト分（BCD）を&#8221;xyz&#8221;に置換</td></tr><tr><td><code>=REPLACEB("Excel関数", 6, 2, "表")</code></td><td>Excel表数</td><td>6バイト目から2バイト分（「関」）を「表」に置換</td></tr><tr><td><code>=REPLACEB("ABC", 2, 1, "XX")</code></td><td>AXXC</td><td>2バイト目から1バイト分（B）を&#8221;XX&#8221;に置換（長さが変わってもOK）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">4行目がポイントですよ。置換前が1バイトで置換後が2バイトでも、問題なく動きます。置換後の文字列の長さは自由なので、「詰める」「膨らませる」操作もこの関数1本でできるんですね。</p>



<h3 class="wp-block-heading"><span id="toc7">文字列の挿入と削除</span></h3>



<p class="wp-block-paragraph">置換文字列を空文字 <code>""</code> にすると、指定範囲を削除できます。バイト数に 0 を指定すると、その位置に置換文字列を挿入する動きになりますよ。</p>



<pre class="wp-block-code"><code>削除:  =REPLACEB(&quot;商品A-100&quot;, 5, 2, &quot;&quot;)    → 商品-100
                                              （5バイト目から2バイト「A-」削除 → あれ？「A-」は3バイト目からなので要注意）</code></pre>



<p class="wp-block-paragraph">挿入と削除の例をもう一度、位置を明確にしながら整理します。</p>



<figure class="wp-block-table"><table><thead><tr><th>数式</th><th>結果</th><th>解説</th></tr></thead><tbody><tr><td><code>=REPLACEB("ABCDE", 3, 2, "")</code></td><td>ABE</td><td>3バイト目から2バイト（CD）を削除</td></tr><tr><td><code>=REPLACEB("ABCDE", 3, 0, "XYZ")</code></td><td>ABXYZCDE</td><td>3バイト目に&#8221;XYZ&#8221;を挿入（何も削除しない）</td></tr><tr><td><code>=REPLACEB("ABCDE", 6, 0, "!")</code></td><td>ABCDE!</td><td>末尾の次のバイト位置に追記</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">末尾に追記するときは、開始位置を「対象文字列のバイト長+1」にしてバイト数を 0 にするのが定番ですよ。<code>LENB(A2)+1</code> と組み合わせると動的に追記できます。</p>



<h3 class="wp-block-heading"><span id="toc8">全角文字の途中で切れた場合の挙動</span></h3>



<p class="wp-block-paragraph">REPLACEBで一番ハマるポイントがここです。全角文字は2バイト分を占有していますが、REPLACEBは「1バイト目だけ置換する」という指定もできてしまいます。</p>



<pre class="wp-block-code"><code>=REPLACEB(&quot;あいうえお&quot;, 2, 1, &quot;X&quot;)    → ?Xいうえお（環境によっては文字化け）
=REPLACEB(&quot;あいうえお&quot;, 1, 1, &quot;X&quot;)    → X?いうえお（同上）</code></pre>



<p class="wp-block-paragraph">全角文字の片バイトだけを置換すると、残された半分が不正な文字コードになってしまいます。スプレッドシート上では <code>?</code> や空白、あるいは文字化けした記号として表示されることが多いですよ。</p>



<p class="wp-block-paragraph">全角文字を扱うときは、開始位置とバイト数の両方を偶数側に合わせて、境界を跨がないように設計するのが安全です。LENB と文字の構成が把握できるデータなら問題ありませんが、可変の入力を相手にする場合はSEARCHBで位置を取ってから渡すのがおすすめですよ。</p>



<h2 class="wp-block-heading"><span id="toc9">実務で使えるREPLACEB関数の活用パターン</span></h2>



<p class="wp-block-paragraph">REPLACEB関数が活躍するのは、固定長フォーマットや、バイト単位でフィールドが決まっているデータの処理です。よく出てくる3パターンを紹介しますね。</p>



<h3 class="wp-block-heading"><span id="toc10">固定長データの特定フィールドを書き換える</span></h3>



<p class="wp-block-paragraph">基幹システムから出力される固定長データで、「先頭10バイトがコード、次の20バイトが名称、次の5バイトが区分」みたいな構造のとき、特定フィールドだけを書き換えたい場面があります。</p>



<pre class="wp-block-code"><code>区分を書き換え:  =REPLACEB(A2, 31, 5, &quot;B0001&quot;)</code></pre>



<p class="wp-block-paragraph">31バイト目から5バイト分（区分フィールド）を「B0001」に差し替えます。位置とサイズがデータ仕様で確定しているので、REPLACEBはこの用途にぴったりですよ。</p>



<h3 class="wp-block-heading"><span id="toc11">SEARCHBで位置を取って動的に置換する</span></h3>



<p class="wp-block-paragraph">区切り記号の位置が行ごとに変わるデータでは、SEARCHBで区切り位置を動的に取得して、REPLACEBに渡します。「コード-名前」形式のデータで、コード部分だけを別の値に書き換えるイメージですね。</p>



<pre class="wp-block-code"><code>=REPLACEB(A2, 1, SEARCHB(&quot;-&quot;, A2) - 1, &quot;NEW&quot;)</code></pre>



<p class="wp-block-paragraph">SEARCHBで最初のハイフン位置を取り、その1バイト前までを「NEW」に置換します。コード部分の長さが行ごとに違っても、同じ式でまとめて処理できますよ。</p>



<p class="wp-block-paragraph">関連: <a href="https://mashukabu.com/spreadsheet-searchb-function/">スプレッドシートのSEARCHB関数の使い方</a> でSEARCHBの詳しい挙動を押さえておくと、このパターンの理解がぐっと早くなります。</p>



<h3 class="wp-block-heading"><span id="toc12">マスク処理（個人情報の一部伏字化）</span></h3>



<p class="wp-block-paragraph">個人情報の一部を伏字にして共有したいとき、バイト位置指定のマスク処理に使えます。たとえば電話番号の中央4バイトを <code>****</code> に置き換える、というパターンですね。</p>



<pre class="wp-block-code"><code>=REPLACEB(&quot;090-1234-5678&quot;, 5, 4, &quot;****&quot;)</code></pre>



<p class="wp-block-paragraph">結果は <code>090-****-5678</code> になります。ハイフン位置が固定のデータなら、位置とバイト数を決め打ちで使うのが一番シンプルですよ。</p>



<p class="wp-block-paragraph">入力が揺れるデータ（ハイフンありなし混在など）では、SEARCHBで位置を取ってからREPLACEBに渡す安全パターンに切り替えましょう。</p>



<h2 class="wp-block-heading"><span id="toc13">SEARCHB・FINDBと組み合わせた動的置換テンプレート</span></h2>



<p class="wp-block-paragraph">区切り文字ベースで可変長フィールドを書き換えるときは、SEARCHBやFINDBで位置を取得してからREPLACEBに渡す組み合わせが便利です。コピペで使えるテンプレートをまとめておきますね。</p>



<h3 class="wp-block-heading"><span id="toc14">区切り文字で分けた最初のフィールドを置換</span></h3>



<p class="wp-block-paragraph">A列に「コード-名前」形式のデータが入っている想定です。コード部分を丸ごと別の値に書き換えましょう。</p>



<pre class="wp-block-code"><code>=REPLACEB(A2, 1, SEARCHB(&quot;-&quot;, A2) - 1, &quot;NEWCODE&quot;)</code></pre>



<p class="wp-block-paragraph">SEARCHBで1番目のハイフン位置を取り、先頭からその1バイト前までを「NEWCODE」に置換します。コード部分の長さが行ごとに違っても対応できますよ。</p>



<h3 class="wp-block-heading"><span id="toc15">2番目のフィールドだけを置換</span></h3>



<p class="wp-block-paragraph">「コード-名前-備考」形式で、真ん中の名前フィールドだけを置換するパターンです。1番目と2番目のハイフン位置を両方取ります。</p>



<pre class="wp-block-code"><code>=LET(
  p1, SEARCHB(&quot;-&quot;, A2),
  p2, SEARCHB(&quot;-&quot;, A2, p1 + 1),
  REPLACEB(A2, p1 + 1, p2 - p1 - 1, &quot;NEWNAME&quot;)
)</code></pre>



<p class="wp-block-paragraph">LET関数で中間変数に名前を付けると、式がぐっと読みやすくなります。LETが使えない環境では、ネストして書くことになりますが、動作は同じですよ。</p>



<h3 class="wp-block-heading"><span id="toc16">末尾のフィールドだけを置換</span></h3>



<p class="wp-block-paragraph">末尾のフィールドを置換するときは、最後の区切り位置から末尾までを対象にします。末尾位置は <code>LENB(A2)</code> で取れるので、バイト数は <code>LENB(A2) - p2</code> で求められますね。</p>



<pre class="wp-block-code"><code>=LET(
  p1, SEARCHB(&quot;-&quot;, A2),
  p2, SEARCHB(&quot;-&quot;, A2, p1 + 1),
  REPLACEB(A2, p2 + 1, LENB(A2) - p2, &quot;NEW_REMARK&quot;)
)</code></pre>



<p class="wp-block-paragraph">この3パターンを覚えておけば、区切り文字付きデータの任意フィールドを柔軟に書き換えられますよ。</p>



<h3 class="wp-block-heading"><span id="toc17">厳密一致で置換したいときはFINDB</span></h3>



<p class="wp-block-paragraph">区切り文字の大文字小文字を厳密に区別したい場合は、SEARCHBをFINDBに置き換えるだけでOKです。商品コード内の英字で「A」と「a」を別物として扱いたい場面ですね。</p>



<pre class="wp-block-code"><code>=REPLACEB(A2, 1, FINDB(&quot;-&quot;, A2) - 1, &quot;NEWCODE&quot;)</code></pre>



<p class="wp-block-paragraph">曖昧検索ならSEARCHB、厳密検索ならFINDB、というシンプルな使い分けで済みますよ。</p>



<h2 class="wp-block-heading"><span id="toc18">REPLACE系・SUBSTITUTE系関数との使い分け</span></h2>



<p class="wp-block-paragraph">スプレッドシートには置換系の関数がいくつかあります。ここで全体像を整理しておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc19">REPLACE・REPLACEB・SUBSTITUTEの比較</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>指定方法</th><th>単位</th><th>典型用途</th></tr></thead><tbody><tr><td>REPLACE</td><td>位置＋サイズ</td><td>文字数</td><td>文字数ベースでの範囲置換</td></tr><tr><td>REPLACEB</td><td>位置＋サイズ</td><td>バイト数</td><td>固定長フォーマットのフィールド書き換え</td></tr><tr><td>SUBSTITUTE</td><td>検索文字列→置換文字列</td><td>—</td><td>内容ベースの一括置換・表記ゆれ統一</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「位置がわかっているか、内容がわかっているか」で第1段階の選択をして、位置指定ならバイト単位か文字単位かで第2段階を決める、という流れが一番迷いませんよ。</p>



<h3 class="wp-block-heading"><span id="toc20">REPLACEBを選ぶべき場面</span></h3>



<p class="wp-block-paragraph">REPLACEBを選ぶ基準は、次の3点で判断できます。</p>



<ul class="wp-block-list"><li>データ仕様がバイト単位で定義されている（固定長ファイル・基幹システム連携）</li><li>全角半角混在のデータで、バイト位置を基準に処理する必要がある</li><li>SEARCHBやFINDBで取得した位置情報をそのまま渡したい</li></ul>



<p class="wp-block-paragraph">逆に、「◯◯という文字列を△△に置き換える」という内容ベースの処理ではSUBSTITUTEのほうが直感的です。REPLACEBは「何バイト目から何バイト分」という機械的な指定が決まっている場面に向いていますよ。</p>



<h2 class="wp-block-heading"><span id="toc21">よくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">REPLACEB関数でハマりやすいポイントを3つまとめました。エラーの原因と対策をセットで覚えておくと、現場で詰まりにくくなりますよ。</p>



<h3 class="wp-block-heading"><span id="toc22">&#8220;#VALUE!&#8221; エラー（開始位置が0以下）</span></h3>



<p class="wp-block-paragraph">開始位置に 0 や負の数、または数値に変換できない値を指定すると <code>#VALUE!</code> が返ります。SEARCHBのネストで1つ目が見つからずに <code>#VALUE!</code> になり、その結果を開始位置に渡すパターンで連鎖することが多いですね。</p>



<pre class="wp-block-code"><code>=IFERROR(REPLACEB(A2, IFERROR(SEARCHB(&quot;-&quot;, A2), 1), 3, &quot;XXX&quot;), A2)</code></pre>



<p class="wp-block-paragraph">見つからない行ではSEARCHB側を 1 にフォールバックし、それでもエラーが出たら元の文字列をそのまま返す、という二段構えで守れますよ。</p>



<h3 class="wp-block-heading"><span id="toc23">全角文字の途中で切れて文字化けする</span></h3>



<p class="wp-block-paragraph">先ほど触れた通り、全角文字の片バイトだけを置換すると残りのバイトが不正な文字コードになります。<code>?</code> や空白、または文字化け記号として表示されることが多いです。</p>



<p class="wp-block-paragraph">対策としては、開始位置とバイト数の組み合わせが全角文字の境界を跨がないように設計することですね。データが全角だけ、あるいは半角だけで構成されている場合は心配不要ですが、混在データを扱うときは LENB と LEN の差からどこに全角があるかを事前に把握しておくと安全ですよ。</p>



<h3 class="wp-block-heading"><span id="toc24">置換後の文字列が想定より長く/短くなる</span></h3>



<p class="wp-block-paragraph">REPLACEBは置換後の長さが元の範囲と違ってもエラーにはなりません。ただ、固定長データを扱っている場合は「フィールドサイズを維持したい」という要件があるはずですよね。</p>



<pre class="wp-block-code"><code>=REPLACEB(A2, 31, 5, LEFT(&quot;B1&quot; &amp; REPT(&quot; &quot;, 5), 5))</code></pre>



<p class="wp-block-paragraph">置換文字列側で LEFT や REPT を使って、指定バイト数にきっちり合わせるのが定番です。5バイト分の右パディングが必要なら &#8220;B1&#8221; に半角スペースを足して LEFT で先頭5文字を取る、といった具合ですよ。</p>



<p class="wp-block-paragraph">全角半角混在の固定長なら LEFTB でバイト単位のパディングに切り替えてくださいね。</p>



<h2 class="wp-block-heading"><span id="toc25">まとめ</span></h2>



<p class="wp-block-paragraph">スプレッドシートのREPLACEB関数は、文字列の指定バイト位置から指定バイト数分を別の文字列に置き換える、バイト単位の範囲置換に便利な関数です。最後に要点を整理しておきましょう。</p>



<ul class="wp-block-list"><li>構文は <code>=REPLACEB(対象文字列, 開始位置, バイト数, 置換文字列)</code> の4引数。全て省略不可</li><li>全角=2バイト、半角=1バイトとしてカウントする</li><li>バイト数 0 で挿入、置換文字列 <code>""</code> で削除</li><li>置換後の文字列の長さは元の範囲と違ってもOK</li><li>REPLACEは文字数、REPLACEBはバイト数。固定長データにはREPLACEB一択</li><li>内容ベースの置換ならSUBSTITUTE、位置ベースならREPLACEBで使い分け</li><li>全角の途中で切ると文字化けするので、境界を跨がない設計が安全</li><li>SEARCHBやFINDBと組み合わせると、可変長データでも動的に置換できる</li></ul>



<p class="wp-block-paragraph">まずは手元の固定長データに、<code>=REPLACEB(A2, 31, 5, "NEWVAL")</code> のような形で当ててみてください。SEARCHBとセットで使えるようになると、可変長の区切り文字データでもフィールド単位の書き換えが気持ちよく回せますよ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-replaceb-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
