<?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>Replace &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/replace/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>Replace &#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>
		<item>
		<title>VBAで空白を削除する方法｜Trim・Replace・全角スペースの対処法まとめ</title>
		<link>https://mashukabu.com/excel-vba-howto-remove-space/</link>
					<comments>https://mashukabu.com/excel-vba-howto-remove-space/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Thu, 03 Mar 2022 13:16:29 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[LTrim]]></category>
		<category><![CDATA[Replace]]></category>
		<category><![CDATA[RTrim]]></category>
		<category><![CDATA[Trim]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[データクレンジング]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[文字列操作]]></category>
		<category><![CDATA[空白削除]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=1278</guid>

					<description><![CDATA[VBAで空白を削除するTrim・LTrim・RTrim・Replaceの使い方と使い分けを解説。全角スペースやNBSPなどTrimで消えない空白の原因特定と対処法も紹介。コピペで使えるコード付き。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ExcelのVBAでセルの空白を削除しようとしたのに、Trimをかけても消えない空白が残っていた。そんな経験はありませんか？</p>



<p class="wp-block-paragraph">空白が残ったままだと、VLOOKUPで#N/Aエラーが出たり、集計結果がずれたりします。放置するほど手戻りが増えて厄介です。</p>



<p class="wp-block-paragraph">VBAには空白を削除する関数が4つあります。空白の位置と種類に応じて使い分ければ、どんな空白トラブルも解決できますよ。</p>



<p class="wp-block-paragraph">この記事では、Trim・LTrim・RTrim・Replaceの使い方と使い分けを、コピペで動くコード付きで解説します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>この記事のコードを実行するには、VBE（Visual Basic Editor）を開いて標準モジュールにコードを貼り付けます。<strong>Alt + F11</strong> でVBEを起動し、<strong>挿入</strong> → <strong>標準モジュール</strong> で編集画面を表示してください。VBEの詳しい使い方は <a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBEの画面の見方と基本操作</a> で解説しています。</p></blockquote>




  <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">VBAで空白を削除する4つの方法を整理しよう</a><ol><li><a href="#toc2" tabindex="0">Trim関数 ── 前後の半角スペースをまとめて削除</a></li><li><a href="#toc3" tabindex="0">LTrim関数 ── 先頭の半角スペースだけ削除</a></li><li><a href="#toc4" tabindex="0">RTrim関数 ── 末尾の半角スペースだけ削除</a></li><li><a href="#toc5" tabindex="0">Replace関数 ── 指定した文字をすべて削除</a></li></ol></li><li><a href="#toc6" tabindex="0">VBA TrimとワークシートTRIM関数の違い</a></li><li><a href="#toc7" tabindex="0">空白トラブル3パターン別の使い分けガイド</a><ol><li><a href="#toc8" tabindex="0">パターン1: 前後の半角スペースが邪魔 → Trim</a></li><li><a href="#toc9" tabindex="0">パターン2: 全角スペースが混ざっている → Replace</a></li><li><a href="#toc10" tabindex="0">パターン3: 見えない特殊空白（NBSPなど） → Replace + Chr</a></li></ol></li><li><a href="#toc11" tabindex="0">実践コード｜セル範囲の空白をまとめて一括削除する</a><ol><li><a href="#toc12" tabindex="0">指定範囲の前後スペースを一括Trim</a></li><li><a href="#toc13" tabindex="0">全角・NBSP対応の汎用クレンジングマクロ</a></li></ol></li><li><a href="#toc14" tabindex="0">空白の種類と対処法の早見表</a></li><li><a href="#toc15" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc16" tabindex="0">Trimしても空白が消えない場合の特定方法</a></li></ol></li><li><a href="#toc17" tabindex="0">まとめ</a><ol><li><a href="#toc18" tabindex="0">関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBAで空白を削除する4つの方法を整理しよう</span></h2>



<p class="wp-block-paragraph">Excel VBAで空白を削除する方法は、大きく4つあります。まずは全体像を把握しておきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>削除対象</th><th>特徴</th></tr></thead><tbody><tr><td>Trim</td><td>前後の半角スペース</td><td>もっとも基本的な空白除去</td></tr><tr><td>LTrim</td><td>先頭の半角スペース</td><td>左側だけ削除したいときに</td></tr><tr><td>RTrim</td><td>末尾の半角スペース</td><td>右側だけ削除したいときに</td></tr><tr><td>Replace</td><td>指定した文字すべて</td><td>全角スペースやNBSPにも対応</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ポイントは、<strong>Trim系の3関数は半角スペース（Chr(32)）しか消せない</strong>ということです。「VBA Trimで全角スペースも消せる」という情報を見かけますが、これは誤りなので注意してください。</p>



<p class="wp-block-paragraph">全角スペースや特殊な空白を消すには、Replace関数の出番になります。</p>



<h3 class="wp-block-heading"><span id="toc2">Trim関数 ── 前後の半角スペースをまとめて削除</span></h3>



<p class="wp-block-paragraph">Trim関数は、文字列の<strong>先頭と末尾</strong>にある半角スペースをまとめて削除します。</p>



<pre class="wp-block-code"><code>Sub TrimExample()
    Dim s As String
    s = &quot;  Hello World  &quot;
    Debug.Print &quot;[&quot; &amp; Trim(s) &amp; &quot;]&quot;
    ' 結果: [Hello World]
    ' ※ 文字列中間のスペースはそのまま残る
End Sub</code></pre>



<p class="wp-block-paragraph">前後だけ削除したいなら、Trimが一番シンプルです。詳しい使い方は <a href="https://mashukabu.com/excel-vba-howto-use-trim/">Trimで前後の空白を一括削除する方法</a> で解説しています。</p>



<h3 class="wp-block-heading"><span id="toc3">LTrim関数 ── 先頭の半角スペースだけ削除</span></h3>



<p class="wp-block-paragraph">LTrimは、文字列の<strong>先頭（左側）</strong>にある半角スペースだけを削除します。</p>



<pre class="wp-block-code"><code>Sub LTrimExample()
    Dim s As String
    s = &quot;   Hello World   &quot;
    Debug.Print &quot;[&quot; &amp; LTrim(s) &amp; &quot;]&quot;
    ' 結果: [Hello World   ]
    ' ※ 末尾のスペースは残る
End Sub</code></pre>



<p class="wp-block-paragraph">基幹システムから出力された固定長データなど、先頭のパディングだけ消したい場面で役立ちますよ。詳しくは <a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">LTrimで先頭の空白を一括削除する方法</a> をご覧ください。</p>



<h3 class="wp-block-heading"><span id="toc4">RTrim関数 ── 末尾の半角スペースだけ削除</span></h3>



<p class="wp-block-paragraph">RTrimは、文字列の<strong>末尾（右側）</strong>にある半角スペースだけを削除します。</p>



<pre class="wp-block-code"><code>Sub RTrimExample()
    Dim s As String
    s = &quot;   Hello World   &quot;
    Debug.Print &quot;[&quot; &amp; RTrim(s) &amp; &quot;]&quot;
    ' 結果: [   Hello World]
    ' ※ 先頭のスペースは残る
End Sub</code></pre>



<p class="wp-block-paragraph">CSVインポート時に末尾へ付く余分なスペースを消すときに便利です。詳しくは <a href="https://mashukabu.com/excel-vba-howto-use-rtrim/">RTrimで末尾の空白を一括削除する方法</a> を参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc5">Replace関数 ── 指定した文字をすべて削除</span></h3>



<p class="wp-block-paragraph">Replace関数は、文字列の中から<strong>指定した文字をすべて置換（削除）</strong>できます。</p>



<pre class="wp-block-code"><code>Sub ReplaceExample()
    Dim s As String
    s = &quot;Hello World&quot;
    Debug.Print &quot;[&quot; &amp; Replace(s, &quot; &quot;, &quot;&quot;) &amp; &quot;]&quot;
    ' 結果: [HelloWorld]
    ' ※ 文字列中のすべての半角スペースが消える
End Sub</code></pre>



<p class="wp-block-paragraph">Trim系では対応できない<strong>全角スペース</strong>や<strong>ノーブレークスペース（NBSP）</strong>も、Replace関数なら削除できます。</p>



<p class="wp-block-paragraph">ただしReplace関数には注意点があります。<strong>第4引数（start）を指定すると、その位置より前の文字が戻り値から切り捨てられます</strong>。</p>



<pre class="wp-block-code"><code>Sub ReplaceStartTrap()
    Debug.Print Replace(&quot;ABCABC&quot;, &quot;A&quot;, &quot;X&quot;, 3)
    ' 結果: CXBC
    ' ※ 3文字目以降が処理対象になり、1〜2文字目の&quot;AB&quot;が消える
End Sub</code></pre>



<p class="wp-block-paragraph">start引数を使う場面は少ないですが、知らないとハマるポイントです。基本的には省略して使いましょう。</p>



<h2 class="wp-block-heading"><span id="toc6">VBA TrimとワークシートTRIM関数の違い</span></h2>



<p class="wp-block-paragraph">VBAのTrimと、ワークシート関数のTRIMは名前が同じですが動作が違います。ここを混同すると「消えるはずの空白が消えない」トラブルの原因になります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>VBA Trim</th><th>ワークシートTRIM</th></tr></thead><tbody><tr><td>前後の半角スペース</td><td>削除する</td><td>削除する</td></tr><tr><td>連続する中間スペース</td><td>そのまま残す</td><td>1つに詰める</td></tr><tr><td>全角スペース</td><td>削除しない</td><td>削除しない</td></tr><tr><td>NBSP (Chr(160))</td><td>削除しない</td><td>削除しない</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">最大の違いは<strong>中間スペースの扱い</strong>です。ワークシートTRIMは連続する半角スペースを1つにまとめますが、VBA Trimは中間のスペースに一切触れません。</p>



<p class="wp-block-paragraph">VBAからワークシートTRIMを使いたい場合は、次のように書きます。</p>



<pre class="wp-block-code"><code>Sub WorksheetTrimExample()
    Dim s As String
    s = &quot;Hello    World&quot;

    ' VBA Trim → 中間スペースはそのまま
    Debug.Print &quot;[&quot; &amp; Trim(s) &amp; &quot;]&quot;
    ' 結果: [Hello    World]

    ' ワークシートTRIM → 中間スペースを1つに
    Debug.Print &quot;[&quot; &amp; WorksheetFunction.Trim(s) &amp; &quot;]&quot;
    ' 結果: [Hello World]
End Sub</code></pre>



<p class="wp-block-paragraph">中間の余分なスペースもまとめて処理したいときは、<code>WorksheetFunction.Trim</code> を使ってみてください。ワークシートのTRIM関数について詳しくは <a href="https://mashukabu.com/excel-function-howto-use-trim/">TRIM関数の使い方</a> で解説しています。</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: 前後の半角スペースが邪魔 → Trim</span></h3>



<p class="wp-block-paragraph">CSVインポートや基幹システム出力で混入しやすいパターンです。前後の半角スペースだけが問題なら、Trimで十分対応できます。</p>



<pre class="wp-block-code"><code>Sub Pattern1_Trim()
    Dim s As String
    s = &quot;  東京都  &quot;
    Debug.Print &quot;[&quot; &amp; Trim(s) &amp; &quot;]&quot;
    ' 結果: [東京都]
End Sub</code></pre>



<p class="wp-block-paragraph">固定長フィールドのパディング除去にも、このパターンが当てはまります。まずはTrimを試してみてください。</p>



<h3 class="wp-block-heading"><span id="toc9">パターン2: 全角スペースが混ざっている → Replace</span></h3>



<p class="wp-block-paragraph">日本語入力の切り替え忘れで混入しやすいのが全角スペースです。Trim系では全角スペースを削除できないため、Replaceを使います。</p>



<pre class="wp-block-code"><code>Sub Pattern2_ZenkakuSpace()
    Dim s As String
    s = &quot;東京都　港区&quot;

    ' Trimでは消えない
    Debug.Print &quot;[&quot; &amp; Trim(s) &amp; &quot;]&quot;
    ' 結果: [東京都　港区]

    ' Replaceで全角スペースを削除
    Debug.Print &quot;[&quot; &amp; Replace(s, &quot;　&quot;, &quot;&quot;) &amp; &quot;]&quot;
    ' 結果: [東京都港区]
End Sub</code></pre>



<p class="wp-block-paragraph">全角スペースはChr(12288)でも指定できます。日本語データを扱うなら、覚えておくと便利ですよ。</p>



<h3 class="wp-block-heading"><span id="toc10">パターン3: 見えない特殊空白（NBSPなど） → Replace + Chr</span></h3>



<p class="wp-block-paragraph">Webページからのコピペで混入するのが、ノーブレークスペース（NBSP、Chr(160)）です。見た目はただの空白ですが、Trimでは消せません。</p>



<pre class="wp-block-code"><code>Sub Pattern3_NBSP()
    Dim s As String
    s = &quot;東京都&quot; &amp; Chr(160) &amp; &quot;港区&quot;

    ' Trimでは消えない
    Debug.Print &quot;[&quot; &amp; Trim(s) &amp; &quot;]&quot;
    ' 結果: [東京都 港区]

    ' Replace + Chr(160)で削除
    Debug.Print &quot;[&quot; &amp; Replace(s, Chr(160), &quot;&quot;) &amp; &quot;]&quot;
    ' 結果: [東京都港区]
End Sub</code></pre>



<p class="wp-block-paragraph">NBSPが混入すると、VLOOKUPで完全一致のはずなのに#N/Aエラーが出る原因になります。目に見えないだけに原因特定が難しいトラブルです。NBSPの詳しい対策は <a href="https://mashukabu.com/about-nbsp/">ノーブレークスペース完全対策ガイド</a> で解説しています。</p>



<h2 class="wp-block-heading"><span id="toc11">実践コード｜セル範囲の空白をまとめて一括削除する</span></h2>



<p class="wp-block-paragraph">ここからは、実際の業務で使える実践コードを紹介します。セル範囲に対して一括で空白を削除できるマクロです。</p>



<h3 class="wp-block-heading"><span id="toc12">指定範囲の前後スペースを一括Trim</span></h3>



<p class="wp-block-paragraph">選択したセル範囲の前後半角スペースをまとめて削除するマクロです。</p>



<pre class="wp-block-code"><code>Sub TrimSelectedRange()
    Dim rng As Range
    Dim cell As Range

    Set rng = Selection

    For Each cell In rng
        If cell.Value &lt;&gt; &quot;&quot; Then
            cell.Value = Trim(cell.Value)
        End If
    Next cell

    MsgBox rng.Count &amp; &quot;セルのTrim処理が完了しました&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">セル範囲を選択してからマクロを実行するだけでOKです。<a href="https://mashukabu.com/vba-howto-use-for-each-next/">For Each文</a> を応用した書き方になっています。</p>



<h3 class="wp-block-heading"><span id="toc13">全角・NBSP対応の汎用クレンジングマクロ</span></h3>



<p class="wp-block-paragraph">半角スペース・全角スペース・NBSPをまとめて除去する汎用版です。</p>



<pre class="wp-block-code"><code>Sub CleanseSpaces()
    Dim rng As Range
    Dim cell As Range
    Dim tmp As String

    Set rng = Selection

    For Each cell In rng
        If cell.Value &lt;&gt; &quot;&quot; Then
            tmp = cell.Value
            tmp = Replace(tmp, Chr(12288), &quot;&quot;)
            tmp = Replace(tmp, Chr(160), &quot;&quot;)
            tmp = Trim(tmp)
            cell.Value = tmp
        End If
    Next cell

    MsgBox rng.Count &amp; &quot;セルのクレンジングが完了しました&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">処理の順番がポイントです。先にReplaceで全角・NBSPを消してから、最後にTrimで前後の半角スペースを仕上げます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>マクロを保存するときは、ファイル形式を<strong>Excelマクロ有効ブック（.xlsm）</strong>にしてください。通常の.xlsx形式で保存すると、マクロが消えてしまいます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc14">空白の種類と対処法の早見表</span></h2>



<p class="wp-block-paragraph">業務データに混入しやすい空白を一覧にまとめました。</p>



<figure class="wp-block-table"><table><thead><tr><th>空白の種類</th><th>文字コード</th><th>主な混入経路</th><th>Trimで消える？</th><th>Replace削除方法</th></tr></thead><tbody><tr><td>半角スペース</td><td>Chr(32)</td><td>CSV末尾、手入力</td><td>前後のみ消える</td><td><code>Replace(s, " ", "")</code></td></tr><tr><td>全角スペース</td><td>Chr(12288)</td><td>日本語入力切替忘れ</td><td>消えない</td><td><code>Replace(s, Chr(12288), "")</code></td></tr><tr><td>NBSP</td><td>Chr(160)</td><td>Webコピペ</td><td>消えない</td><td><code>Replace(s, Chr(160), "")</code></td></tr><tr><td>タブ</td><td>Chr(9)</td><td>TSVインポート</td><td>消えない</td><td><code>Replace(s, Chr(9), "")</code></td></tr><tr><td>改行（LF）</td><td>Chr(10)</td><td>セル内改行</td><td>消えない</td><td><code>Replace(s, Chr(10), "")</code></td></tr><tr><td>改行（CR+LF）</td><td>Chr(13)+Chr(10)</td><td>他システム連携</td><td>消えない</td><td><code>Replace(s, vbCrLf, "")</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">困ったときはこの表を見ながら、該当するReplace文をコードに追加してみてください。</p>



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



<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>Trimしても空白が消えない</td><td>全角スペースやNBSPが混在</td><td>Replace + Chr で個別削除</td></tr><tr><td>Replace実行でエラー</td><td>Null値のセルを処理</td><td><code>If Not IsNull(cell.Value)</code> で事前チェック</td></tr><tr><td>Replaceで文字が欠ける</td><td>start引数を指定した</td><td>start引数を省略する</td></tr><tr><td>VLOOKUPが#N/Aになる</td><td>見えない空白が不一致の原因</td><td>Trim + Replaceでクレンジング後にVLOOKUP</td></tr><tr><td>ワークシートTrimと結果が違う</td><td>中間スペースの扱いが異なる</td><td><code>WorksheetFunction.Trim</code> を使う</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に注意したいのが、<strong>TrimとReplaceのNull耐性の違い</strong>です。</p>



<pre class="wp-block-code"><code>Sub NullHandling()
    Dim v As Variant
    v = Null

    Debug.Print IsNull(Trim(v))
    ' 結果: True（Nullが返る＝エラーにならない）

    ' Replace(v, &quot; &quot;, &quot;&quot;)  ← エラーになる
End Sub</code></pre>



<p class="wp-block-paragraph">セル範囲を一括処理するときは、<code>If Not IsNull(cell.Value)</code> のチェックを入れておくと安全ですよ。</p>



<h3 class="wp-block-heading"><span id="toc16">Trimしても空白が消えない場合の特定方法</span></h3>



<p class="wp-block-paragraph">「Trimしたのに空白が残っている」ときは、AscW関数で文字のUnicodeコードポイントを調べましょう。</p>



<pre class="wp-block-code"><code>Sub InspectCharCodes()
    Dim s As String
    Dim i As Long

    s = Range(&quot;A1&quot;).Value

    For i = 1 To Len(s)
        Debug.Print &quot;位置&quot; &amp; i &amp; &quot;: &quot; &amp; Mid(s, i, 1) &amp; _
                    &quot; → AscW=&quot; &amp; AscW(Mid(s, i, 1))
    Next i
End Sub</code></pre>



<p class="wp-block-paragraph">AscW=32なら半角スペース、160ならNBSP、12288なら全角スペースです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>Asc関数はANSIコードを返しますが、AscW関数はUnicodeコードポイントを返します。日本語環境ではAscWを使うのがおすすめです。</p></blockquote>



<p class="wp-block-paragraph">文字コードがわかれば、対応するReplace文を書くだけで解決できます。</p>



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



<p class="wp-block-paragraph">VBAで空白を削除する4つの関数の使い分けをおさらいしましょう。</p>



<ul class="wp-block-list"><li><strong>Trim</strong> ── 前後の半角スペースを削除。基本はこれでOK</li><li><strong>LTrim / RTrim</strong> ── 先頭・末尾だけ削除したいときに</li><li><strong>Replace</strong> ── 全角スペース・NBSP・タブなど、Trimで消せない空白に対応</li></ul>



<p class="wp-block-paragraph">データのクレンジングでは、Trim単体ではなくReplaceと組み合わせるのが鉄板パターンです。汎用クレンジングマクロをコピペして、日常業務に役立ててみてください。</p>



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



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-vba-howto-use-trim/">Trimで前後の空白を一括削除する方法</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">LTrimで先頭の空白を一括削除する方法</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-rtrim/">RTrimで末尾の空白を一括削除する方法</a></li><li><a href="https://mashukabu.com/about-nbsp/">ノーブレークスペース完全対策ガイド</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-trim/">TRIM関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-substitute/">SUBSTITUTE関数の使い方</a></li><li><a href="https://mashukabu.com/vba-howto-use-for-each-next/">For Each文の使い方</a></li><li><a href="https://mashukabu.com/excel-vba-howto-get-lastrow/">VBA 最終行取得の方法</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-vba-howto-remove-space/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
