<?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>一括置換 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/%E4%B8%80%E6%8B%AC%E7%BD%AE%E6%8F%9B/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Thu, 11 Jun 2026 23:50:23 +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>一括置換 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>VBA Replace関数の使い方｜引数Count・Compareで一括置換を使いこなす</title>
		<link>https://mashukabu.com/vba-replace-function/</link>
					<comments>https://mashukabu.com/vba-replace-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 01:46:17 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[Replace]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[一括置換]]></category>
		<category><![CDATA[文字列操作]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7894</guid>

					<description><![CDATA[VBAのReplace関数の基本構文から、Count・Compare引数の応用まで実務パターンで解説。スペース全削除・記号の一括除去・大文字小文字を無視した置換など、コピペで使えるコード付き。WorksheetFunction.Substituteとの違い比較表も収録。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">VBAで「文字列の一部を別の文字に置き換えたい」と思ったとき、最初に候補に挙がるのがReplace関数です。住所の全角スペースを半角に直したい、商品コードの記号を統一したい、ファイル名から不要な文字を取り除きたい、といった処理は、Replace関数1行でほぼ完結します。</p>



<p class="wp-block-paragraph">ただし実際に使ってみると、「<code>start</code>引数を指定したら前半が消えた」「大文字と小文字が区別されて置換できない」など、引数の挙動でつまずく方も少なくありません。Replace関数は6つの引数を持つため、それぞれの役割を理解しないと意図しない結果になりがちです。</p>



<p class="wp-block-paragraph">この記事では、VBA Replace関数の基本構文から、<code>Count</code>・<code>Compare</code>引数を活用した一括置換のテクニック、そして実務でコピペして使えるコードパターンまでをまとめて解説します。<code>WorksheetFunction.Substitute</code>との使い分けも比較表で整理しているので、文字列加工の判断軸として活用してください。</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><a href="#toc1" tabindex="0">VBAのReplace関数とは</a></li><li><a href="#toc2" tabindex="0">基本構文と引数一覧</a></li><li><a href="#toc3" tabindex="0">【引数別】戻り値の変化と注意点</a><ol><li><a href="#toc4" tabindex="0">start引数を使うときの落とし穴</a></li><li><a href="#toc5" tabindex="0">count引数で置換回数を制限する</a></li><li><a href="#toc6" tabindex="0">compare引数で大文字小文字を無視する</a></li></ol></li><li><a href="#toc7" tabindex="0">実務でよく使うコードパターン3選</a><ol><li><a href="#toc8" tabindex="0">パターン1: スペース・特殊文字を全削除する</a></li><li><a href="#toc9" tabindex="0">パターン2: 大文字小文字を統一する</a></li><li><a href="#toc10" tabindex="0">パターン3: 複数の文字列を一括置換する</a></li></ol></li><li><a href="#toc11" tabindex="0">VBA Replace関数 vs WorksheetFunction.Substitute</a></li><li><a href="#toc12" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBAのReplace関数とは</span></h2>



<p class="wp-block-paragraph">VBA Replace関数は、指定した文字列の中から検索対象の部分文字列を見つけて、別の文字列に置き換える組み込み関数です。Excel関数の<code>SUBSTITUTE</code>に近い動きをしますが、VBAコード内ではこちらが標準となります。</p>



<p class="wp-block-paragraph">最大の特徴は、引数によって挙動を細かく制御できる点です。「最初の1件だけ置換する」「N文字目から検索を開始する」「大文字と小文字を区別しない」といった処理が、追加のIf文なしに引数指定だけで実現できます。</p>



<p class="wp-block-paragraph">事務処理では、フォーム入力データの正規化、CSVの整形、ファイル名の一括変更など、文字列加工が発生する場面で頻繁に登場します。一度引数の意味を押さえておけば、関連する自動化処理の幅が大きく広がる関数です。</p>



<p class="wp-block-paragraph">なお、VBAには同名のメソッドがStringクラスやRangeオブジェクトにも存在しますが、本記事では純粋な関数としてのReplace（VBA.Strings.Replace）を扱います。</p>



<h2 class="wp-block-heading"><span id="toc2">基本構文と引数一覧</span></h2>



<p class="wp-block-paragraph">Replace関数の構文は以下のとおりです。</p>



<pre class="wp-block-code"><code>Replace(expression, find, replace[, start[, count[, compare]]])</code></pre>



<p class="wp-block-paragraph">引数は6つあり、最初の3つが必須、後ろの3つは省略可能です。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須</th><th>デフォルト</th><th>説明</th></tr></thead><tbody><tr><td>expression</td><td>必須</td><td>—</td><td>置換対象の文字列式</td></tr><tr><td>find</td><td>必須</td><td>—</td><td>検索する部分文字列</td></tr><tr><td>replace</td><td>必須</td><td>—</td><td>置換後の文字列</td></tr><tr><td>start</td><td>省略可</td><td>1</td><td>検索を開始する位置</td></tr><tr><td>count</td><td>省略可</td><td>-1（全置換）</td><td>置換を実行する回数</td></tr><tr><td>compare</td><td>省略可</td><td>vbBinaryCompare（0）</td><td>比較の種類</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">最もシンプルな使い方は、必須の3引数だけを指定するパターンです。</p>



<pre class="wp-block-code"><code>Sub BasicReplace()
    Dim result As String
    result = Replace(&quot;2026/05/19&quot;, &quot;/&quot;, &quot;-&quot;)
    Debug.Print result   ' → 2026-05-19
End Sub</code></pre>



<p class="wp-block-paragraph">このように、<code>expression</code>の中に出てくる<code>find</code>をすべて<code>replace</code>に置き換えた文字列が返ります。デフォルトでは全件置換となるため、<code>Count</code>を指定しない限り該当箇所はすべて置換されると覚えておきましょう。</p>



<h2 class="wp-block-heading"><span id="toc3">【引数別】戻り値の変化と注意点</span></h2>



<p class="wp-block-paragraph">ここからは、省略可能な3つの引数の挙動を順番に見ていきます。とくに<code>start</code>引数には「前半部分が消える」という有名な落とし穴があるため、最初に押さえておきましょう。</p>



<p class="wp-block-paragraph">戻り値の特殊ケースも整理しておきます。</p>



<ul class="wp-block-list"><li><code>expression</code>が空文字列のとき → <code>""</code>を返す</li><li><code>expression</code>が<code>Null</code>のとき → エラー（<code>IsNull</code>での事前チェック必須）</li><li><code>find</code>が空文字列のとき → <code>expression</code>のコピーをそのまま返す</li><li><code>replace</code>が空文字列のとき → <code>find</code>の出現箇所をすべて削除した文字列を返す</li><li><code>start</code>が<code>Len(expression)</code>より大きいとき → <code>""</code>を返す</li><li><code>count</code>が0のとき → <code>expression</code>のコピーを返す（置換なし）</li></ul>



<p class="wp-block-paragraph">Null値が混入しそうな処理では、必ず<code>If IsNull(value) Then ...</code>で分岐を入れておきます。</p>



<h3 class="wp-block-heading"><span id="toc4">start引数を使うときの落とし穴</span></h3>



<p class="wp-block-paragraph"><code>start</code>は検索開始位置を指定する引数ですが、戻り値が「start位置から末尾までの文字列のみ」になります。先頭部分は戻り値に含まれません。</p>



<pre class="wp-block-code"><code>Sub StartPitfall()
    Dim str As String
    str = &quot;ABCDEFG-ABCDEFG&quot;
    
    ' 6文字目以降のAをXに置換したい
    Debug.Print Replace(str, &quot;A&quot;, &quot;X&quot;, 6)
    ' → &quot;FG-XBCDEFG&quot;
    ' 先頭の &quot;ABCDE&quot; が消える！
End Sub</code></pre>



<p class="wp-block-paragraph">「6文字目以降のAをXに置換したい」と意図して書いたコードですが、先頭5文字が消えた結果が返ってきます。これは仕様であり、バグではありません。</p>



<p class="wp-block-paragraph">先頭部分を保持したい場合は、<code>Left</code>関数で前半を取り出して連結する必要があります。</p>



<pre class="wp-block-code"><code>Sub StartFixed()
    Dim str As String
    Dim head As String
    Dim tail As String
    Dim result As String
    
    str = &quot;ABCDEFG-ABCDEFG&quot;
    
    '--- 先頭5文字を保持 ---
    head = Left(str, 5)
    '--- 6文字目以降のAを置換 ---
    tail = Replace(str, &quot;A&quot;, &quot;X&quot;, 6)
    
    result = head &amp; tail
    Debug.Print result   ' → &quot;ABCDEFG-XBCDEFG&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">この挙動を知らずに<code>start</code>を使うと、データが意図せず削れる事故につながります。<code>start</code>は「途中から検索したい」というより「途中以降の文字列を加工して返したい」ときに使う引数だと理解しておくのが安全です。</p>



<h3 class="wp-block-heading"><span id="toc5">count引数で置換回数を制限する</span></h3>



<p class="wp-block-paragraph"><code>count</code>引数は、置換を実行する回数の上限を指定します。デフォルトは<code>-1</code>で、これは「すべての出現箇所を置換する」という意味です。</p>



<pre class="wp-block-code"><code>Sub CountLimit()
    Dim str As String
    str = &quot;AAA-AAA-AAA&quot;
    
    ' 全置換（デフォルト）
    Debug.Print Replace(str, &quot;A&quot;, &quot;X&quot;)
    ' → &quot;XXX-XXX-XXX&quot;
    
    ' 最初の1件だけ置換
    Debug.Print Replace(str, &quot;AAA&quot;, &quot;BBB&quot;, 1, 1)
    ' → &quot;BBB-AAA-AAA&quot;
    
    ' 最初の2件だけ置換
    Debug.Print Replace(str, &quot;AAA&quot;, &quot;BBB&quot;, 1, 2)
    ' → &quot;BBB-BBB-AAA&quot;
End Sub</code></pre>



<p class="wp-block-paragraph"><code>count</code>を使うときは、<code>start</code>も同時に指定する必要があります（<code>count</code>は4番目、<code>start</code>は5番目という順序のため）。先頭から数えたい場合は<code>start</code>に<code>1</code>を渡しておきましょう。</p>



<p class="wp-block-paragraph">ログの先頭1件目だけタイムスタンプを差し替えたい、テンプレートの最初のプレースホルダだけ置き換えたい、といった用途で役立ちます。</p>



<h3 class="wp-block-heading"><span id="toc6">compare引数で大文字小文字を無視する</span></h3>



<p class="wp-block-paragraph"><code>compare</code>引数は文字列の比較方法を切り替えます。デフォルトは大文字と小文字を区別する<code>vbBinaryCompare</code>です。</p>



<figure class="wp-block-table"><table><thead><tr><th>定数</th><th>値</th><th>動作</th></tr></thead><tbody><tr><td>vbBinaryCompare</td><td>0</td><td>大文字・小文字を区別する（既定値）</td></tr><tr><td>vbTextCompare</td><td>1</td><td>大文字・小文字を区別しない</td></tr><tr><td>vbDatabaseCompare</td><td>2</td><td>Access専用</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><code>vbTextCompare</code>を指定すれば、「vba」「VBA」「Vba」「vBa」のような表記ゆれをまとめて拾えます。</p>



<pre class="wp-block-code"><code>Sub CompareDemo()
    Dim str As String
    str = &quot;vbaとVBAとVbaは同じ言語です&quot;
    
    ' 既定値（大文字小文字を区別）
    Debug.Print Replace(str, &quot;vba&quot;, &quot;Excel&quot;)
    ' → &quot;ExcelとVBAとVbaは同じ言語です&quot;
    
    ' vbTextCompare（大文字小文字を無視）
    Debug.Print Replace(str, &quot;vba&quot;, &quot;Excel&quot;, 1, -1, vbTextCompare)
    ' → &quot;ExcelとExcelとExcelは同じ言語です&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">ユーザー入力データやWebから取得した文字列は、大文字小文字が揺れていることが珍しくありません。表記ゆれをまとめて正規化したいときは、<code>vbTextCompare</code>を積極的に使いましょう。</p>



<h2 class="wp-block-heading"><span id="toc7">実務でよく使うコードパターン3選</span></h2>



<p class="wp-block-paragraph">ここからは、事務処理の現場で頻出する3つのパターンを紹介します。いずれもコピペしてそのまま使えるコードです。</p>



<h3 class="wp-block-heading"><span id="toc8">パターン1: スペース・特殊文字を全削除する</span></h3>



<p class="wp-block-paragraph">データの正規化で最も多いのが、不要な空白や記号の削除です。<code>replace</code>に空文字列<code>""</code>を渡せば、<code>find</code>に該当する箇所がすべて消えます。</p>



<pre class="wp-block-code"><code>Sub RemoveSpaces()
    Dim str As String
    str = &quot;山田　太郎 さん&quot;   ' 全角＋半角スペース混在
    
    '--- 半角スペースを全削除 ---
    str = Replace(str, &quot; &quot;, &quot;&quot;)
    
    '--- 全角スペースを全削除（Chr(12288)） ---
    str = Replace(str, Chr(12288), &quot;&quot;)
    
    Debug.Print str   ' → &quot;山田太郎さん&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">タブ・改行を含めて一気に除去したい場合は、Replace関数をネストするのが定番です。</p>



<pre class="wp-block-code"><code>Sub RemoveWhitespace()
    Dim str As String
    str = &quot;ABC&quot; &amp; vbTab &amp; &quot;DEF&quot; &amp; vbCrLf &amp; &quot;GHI&quot;
    
    '--- タブ・LF・CRをまとめて除去 ---
    str = Replace(Replace(Replace(str, Chr(9), &quot;&quot;), Chr(10), &quot;&quot;), Chr(13), &quot;&quot;)
    
    Debug.Print str   ' → &quot;ABCDEFGHI&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">スペース削除専用の手段としては、<code>Trim</code>関数や<code>LTrim</code> / <code>RTrim</code>関数もあります。前後の空白だけを削りたい場合はTrim系のほうがシンプルです。詳しくは<a href="https://mashukabu.com/excel-vba-howto-use-trim/">VBA Trim関数の使い方</a>や<a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBAでスペースを削除する方法</a>もあわせて参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc9">パターン2: 大文字小文字を統一する</span></h3>



<p class="wp-block-paragraph">入力データの「VBA／vba／Vba」のような表記ゆれを統一するパターンです。<code>compare</code>引数に<code>vbTextCompare</code>を渡せば、大文字小文字を無視して置換できます。</p>



<pre class="wp-block-code"><code>Sub NormalizeCase()
    Dim str As String
    str = &quot;vbaのコード例とVBA講座、Vba入門書&quot;
    
    '--- 大文字小文字を区別せず &quot;VBA&quot; に統一 ---
    str = Replace(str, &quot;vba&quot;, &quot;VBA&quot;, 1, -1, vbTextCompare)
    
    Debug.Print str
    ' → &quot;VBAのコード例とVBA講座、VBA入門書&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">ポイントは、<code>start</code>に<code>1</code>、<code>count</code>に<code>-1</code>を必ず渡すことです。<code>compare</code>は6番目の引数なので、前の引数を省略できません。「先頭から全件置換」を意味する<code>1, -1</code>はセットで覚えておくと迷いません。</p>



<p class="wp-block-paragraph">商品コード・型番・タグなど、半角英字が混じるデータの正規化で重宝するパターンです。</p>



<h3 class="wp-block-heading"><span id="toc10">パターン3: 複数の文字列を一括置換する</span></h3>



<p class="wp-block-paragraph">複数の検索パターンを順番に置換するときは、配列とループを組み合わせると保守性が上がります。置換ルールが10件、20件と増えても、配列の中身を変えるだけで済むのが利点です。</p>



<pre class="wp-block-code"><code>Sub MultiReplace(ByRef str As String)
    Dim findList As Variant
    Dim repList  As Variant
    Dim i As Long
    
    '--- 検索文字と置換文字をペアで定義 ---
    findList = Array(&quot;（&quot;, &quot;）&quot;, &quot;　&quot;, &quot;・&quot;)
    repList  = Array(&quot;(&quot;,  &quot;)&quot;,  &quot; &quot;,  &quot;-&quot;)
    
    '--- 順番に置換していく ---
    For i = 0 To UBound(findList)
        str = Replace(str, findList(i), repList(i))
    Next i
End Sub

Sub TestMultiReplace()
    Dim s As String
    s = &quot;（株）山田　商事・東京&quot;
    
    Call MultiReplace(s)
    Debug.Print s   ' → &quot;(株)山田 商事-東京&quot;
End Sub</code></pre>



<p class="wp-block-paragraph"><code>findList</code>と<code>repList</code>を同じインデックスで対応させるのがコツです。要素数が一致しないと配列の境界エラーになるため、追加時は両方の配列を必ずセットで更新してください。</p>



<p class="wp-block-paragraph">社内システムから出力されたCSVを集計用に整形する、住所データの記号を統一する、といった処理にそのまま流用できます。</p>



<h2 class="wp-block-heading"><span id="toc11">VBA Replace関数 vs WorksheetFunction.Substitute</span></h2>



<p class="wp-block-paragraph">VBAから文字列を置換する手段は、Replace関数だけではありません。<code>WorksheetFunction.Substitute</code>を経由して、Excel関数の<code>SUBSTITUTE</code>を呼び出す方法もあります。両者には明確な使い分けの基準があります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較軸</th><th>VBA Replace関数</th><th>WorksheetFunction.Substitute</th></tr></thead><tbody><tr><td>コード量</td><td>短い</td><td>長い</td></tr><tr><td>大文字小文字の無視</td><td>可能（compare引数）</td><td>不可</td></tr><tr><td>検索開始位置の指定</td><td>可能（start引数）</td><td>不可</td></tr><tr><td>置換回数の上限</td><td>可能（count引数）</td><td>不可</td></tr><tr><td>N番目のみ置換</td><td>不可</td><td><strong>可能</strong>（第4引数）</td></tr><tr><td>主な用途</td><td>VBAコード内の文字列加工全般</td><td>N番目のみ置換したい特殊ケース</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">基本的にはVBA Replace関数のほうがコードが短く、引数も柔軟です。日常的な置換処理は、まずReplace関数で書くことを推奨します。</p>



<p class="wp-block-paragraph">一方、「3番目に出現した文字だけを置換したい」のような限定的なケースでは、<code>WorksheetFunction.Substitute</code>の第4引数（インスタンス番号）が役立ちます。</p>



<pre class="wp-block-code"><code>Sub SubstituteByPosition()
    Dim str As String
    Dim result As String
    str = &quot;A-A-A-A-A&quot;
    
    '--- 3番目の &quot;A&quot; だけ &quot;X&quot; に置換 ---
    result = WorksheetFunction.Substitute(str, &quot;A&quot;, &quot;X&quot;, 3)
    Debug.Print result   ' → &quot;A-A-X-A-A&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">Replace関数ではN番目だけの置換ができないため、この用途に限ってはSubstituteの出番です。Excel関数の挙動については<a href="https://mashukabu.com/excel-function-howto-use-substitute/">ExcelのSUBSTITUTE関数の使い方</a>も参考になります。</p>



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



<p class="wp-block-paragraph">VBA Replace関数のポイントを振り返ります。</p>



<ul class="wp-block-list"><li>基本構文は<code>Replace(expression, find, replace, start, count, compare)</code>の6引数</li><li><code>start</code>を指定すると先頭部分が戻り値から消える。<code>Left</code>関数との連結で対処</li><li><code>count</code>で置換回数を制限できる。最初の1件だけ、最初の2件だけといった指定が可能</li><li><code>compare</code>に<code>vbTextCompare</code>を渡すと、大文字小文字を区別せず置換できる</li><li>実務では「スペース全削除」「大文字小文字統一」「複数文字列の一括置換」の3パターンが頻出</li><li>N番目のみ置換したい特殊ケースは<code>WorksheetFunction.Substitute</code>を使う</li></ul>



<p class="wp-block-paragraph">パターンに一致する文字列をまとめて置換したい場合は<a href="https://mashukabu.com/excel-vba-regexp-howto/">VBA正規表現（RegExp）の使い方</a>が便利です。</p>



<p class="wp-block-paragraph">引数の挙動さえ押さえれば、Replace関数は文字列加工の最強の味方になります。とくに<code>compare</code>引数の存在を知っているかどうかで、表記ゆれデータの処理スピードは大きく変わります。まずは基本の3引数からスタートし、慣れてきたら<code>count</code>・<code>compare</code>を組み合わせて、データ正規化の自動化に役立ててください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/vba-replace-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
