<?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>RTrim &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/rtrim/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Mon, 08 Jun 2026 15:50:34 +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>RTrim &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>VBAのTrim・LTrim・RTrim関数で文字列の空白を除去する方法｜WorksheetFunction.Trimとの違いも解説</title>
		<link>https://mashukabu.com/vba-trim-ltrim-rtrim/</link>
					<comments>https://mashukabu.com/vba-trim-ltrim-rtrim/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 15:50:34 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[LTrim]]></category>
		<category><![CDATA[RTrim]]></category>
		<category><![CDATA[Trim]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[文字列操作]]></category>
		<category><![CDATA[空白除去]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7845</guid>

					<description><![CDATA[VBAのTrim・LTrim・RTrim関数で文字列の空白を除去する方法を、3関数の違いがわかる比較表とコピペできるコードで解説。全角スペースが消えない原因と対処法、WorksheetFunction.TrimとVBA Trimの違いもフローチャートで整理します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">VBAでセルの空白を取りたいけれど、Trim・LTrim・RTrimのどれを使えばいいのか迷っていませんか？さらに「Trimをかけたのに全角スペースが消えない」と詰まった経験がある方も多いはずです。</p>



<p class="wp-block-paragraph">この記事では、VBAの空白除去でつまずきがちなポイントを <strong>比較表と判断フローチャート</strong> で一気に整理します。3つの関数の違いから、全角スペースが消えない本当の原因、<code>WorksheetFunction.Trim</code>との違いまで、コピペで動くコードつきで解説していきますね。</p>



<p class="wp-block-paragraph">各関数の詳しい使い方は個別の記事にまとめてあるので、本記事は「結局どれを使えばいいの？」を最短で解決する地図として使ってください。</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 Trim・LTrim・RTrimの違い【結論】</a><ol><li><a href="#toc2" tabindex="0">3関数の比較表（削除位置・構文・使う場面）</a></li><li><a href="#toc3" tabindex="0">迷ったらどれを使う？1分でわかる選び方</a></li></ol></li><li><a href="#toc4" tabindex="0">VBA Trim関数の基本と使い方</a><ol><li><a href="#toc5" tabindex="0">Trimの構文と基本コード（コピペで動く）</a></li><li><a href="#toc6" tabindex="0">LTrim・RTrimとの動作の違い</a></li></ol></li><li><a href="#toc7" tabindex="0">VBEの起動とコードの準備</a></li><li><a href="#toc8" tabindex="0">Trimで空白が消えないときの原因と対処法</a><ol><li><a href="#toc9" tabindex="0">全角スペースはTrimでは消えない</a></li><li><a href="#toc10" tabindex="0">タブ・改行・NBSPもTrimの対象外</a></li><li><a href="#toc11" tabindex="0">どの空白をどう消す？判断フローチャート</a></li></ol></li><li><a href="#toc12" tabindex="0">WorksheetFunction.TrimとVBA Trimの違い</a><ol><li><a href="#toc13" tabindex="0">中間の連続スペースの扱いが違う</a></li><li><a href="#toc14" tabindex="0">VBAからワークシート版Trimを呼ぶ方法</a></li></ol></li><li><a href="#toc15" tabindex="0">実務で使えるTrim・LTrim・RTrimの活用コード</a><ol><li><a href="#toc16" tabindex="0">コピペデータの先頭空白を一括削除（LTrim）</a></li><li><a href="#toc17" tabindex="0">氏名フィールドの全角スペースを正しく除去する</a></li><li><a href="#toc18" tabindex="0">シート全体の前後空白をまとめてクレンジング（Trim）</a></li></ol></li><li><a href="#toc19" tabindex="0">まとめ｜Trim・LTrim・RTrimの使い分け早見表</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBA Trim・LTrim・RTrimの違い【結論】</span></h2>



<p class="wp-block-paragraph">先に結論からお伝えします。VBAのTrim・LTrim・RTrimは、<strong>削除する「位置」だけが違う</strong> 3兄弟です。動作そのものはほぼ同じで、空白を消す場所が「前後」「先頭だけ」「末尾だけ」と分かれているだけなんですね。</p>



<h3 class="wp-block-heading"><span id="toc2">3関数の比較表（削除位置・構文・使う場面）</span></h3>



<p class="wp-block-paragraph">3つの関数を「構文・削除位置・戻り値・使う場面」の4軸で横並びにすると、違いが一目でわかります。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>構文</th><th>削除位置</th><th><code>"  VBA 入門  "</code> の戻り値</th><th>こんなときに使う</th></tr></thead><tbody><tr><td><strong>LTrim</strong></td><td><code>LTrim(文字列)</code></td><td>先頭のみ</td><td><code>"VBA 入門  "</code></td><td>先頭のパディングだけ消したい</td></tr><tr><td><strong>RTrim</strong></td><td><code>RTrim(文字列)</code></td><td>末尾のみ</td><td><code>"  VBA 入門"</code></td><td>末尾の余分な空白だけ消したい</td></tr><tr><td><strong>Trim</strong></td><td><code>Trim(文字列)</code></td><td>先頭＋末尾</td><td><code>"VBA 入門"</code></td><td>前後どちらの空白も不要</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">3つに共通する大事なポイントが2つあります。</p>



<ul class="wp-block-list"><li><strong>中間（文字列の途中）の空白には一切手をつけない</strong>。<code>"VBA 入門"</code> のような単語間のスペースはそのまま残ります。</li><li><strong>削除できるのは半角スペースだけ</strong>。全角スペースは消えません（これが後述する最大の落とし穴です）。</li></ul>



<h3 class="wp-block-heading"><span id="toc3">迷ったらどれを使う？1分でわかる選び方</span></h3>



<p class="wp-block-paragraph">実務で迷ったら、次の3ステップで選べばOKです。</p>



<ol class="wp-block-list"><li><strong>前後どちらも消したい → Trim</strong>。いちばん出番が多いのはこれです。とりあえずTrimを覚えておけば9割の場面に対応できます。</li><li><strong>先頭だけ消したい → LTrim</strong>。固定長データの先頭パディングなど、「末尾の空白は残したい」明確な理由があるときだけ使います。</li><li><strong>末尾だけ消したい → RTrim</strong>。CSVや基幹システム出力で末尾にスペースが付くケースで活躍します。</li></ol>



<p class="wp-block-paragraph">「<code>LTrim</code>と<code>RTrim</code>を両方かけたい」と思ったら、それは<code>Trim</code>を使う場面です。<code>LTrim(RTrim(s))</code>と入れ子にするより、<code>Trim(s)</code>のほうが簡潔でコードの意図も伝わりやすいですよ。</p>



<p class="wp-block-paragraph">それぞれの関数を深掘りしたい方は、<a href="https://mashukabu.com/excel-vba-howto-use-trim/">VBA Trim関数の使い方</a>・<a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">LTrim関数の使い方</a>・<a href="https://mashukabu.com/excel-vba-howto-use-rtrim/">RTrim関数の使い方</a>で実践コードつきの解説をしています。</p>



<h2 class="wp-block-heading"><span id="toc4">VBA Trim関数の基本と使い方</span></h2>



<p class="wp-block-paragraph">3関数の代表として、まずはTrimの基本動作を押さえておきましょう。Trimさえ理解すれば、LTrim・RTrimは「位置が違うだけ」なのですぐ応用できます。</p>



<h3 class="wp-block-heading"><span id="toc5">Trimの構文と基本コード（コピペで動く）</span></h3>



<p class="wp-block-paragraph">Trimの構文はとてもシンプルです。</p>



<pre class="wp-block-code"><code>Trim(文字列)</code></pre>



<p class="wp-block-paragraph">引数に文字列を渡すと、前後の半角スペースを取り除いた文字列が返ってきます。まずは動作確認用のコードを試してみましょう。VBE（後述）の標準モジュールに、以下をそのまま貼り付けてF5キーで実行してください。</p>



<pre class="wp-block-code"><code>Sub Trimの動作確認()

    Dim sBefore As String '--- 変換前の文字列 ---
    Dim sAfter As String  '--- 変換後の文字列 ---

    sBefore = &quot;   Excel VBA   &quot;
    sAfter = Trim(sBefore)

    '--- 結果をメッセージボックスで確認 ---
    MsgBox &quot;変換前: [&quot; &amp; sBefore &amp; &quot;]&quot; &amp; vbCrLf &amp; _
           &quot;変換後: [&quot; &amp; sAfter &amp; &quot;]&quot;, vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph">角括弧で囲んでいるので、前後のスペースが消えたことが一目でわかります。前後に空白がない文字列を渡してもエラーにはならず、元の文字列がそのまま返るので、「空白があるか事前にチェックしなきゃ」と心配する必要はありません。</p>



<p class="wp-block-paragraph">なお、正式には<code>Strings.Trim</code>と書きますが、<code>Strings</code>はVBAの標準ライブラリ名なので通常は省略できます。もし複数ライブラリを参照していて「あいまいな名前が検出されました」というエラーが出たら、<code>Strings.Trim</code>とフル修飾で書けば解決しますよ。</p>



<h3 class="wp-block-heading"><span id="toc6">LTrim・RTrimとの動作の違い</span></h3>



<p class="wp-block-paragraph">同じ文字列をLTrim・RTrim・Trimに渡すと、削除される位置の違いがはっきり見えます。</p>



<pre class="wp-block-code"><code>Sub 3関数の違いを比較()

    Dim s As String
    s = &quot;   VBA 入門   &quot;

    Debug.Print &quot;[&quot; &amp; LTrim(s) &amp; &quot;]&quot;  '--- 結果: [VBA 入門   ]（末尾残る） ---
    Debug.Print &quot;[&quot; &amp; RTrim(s) &amp; &quot;]&quot;  '--- 結果: [   VBA 入門]（先頭残る） ---
    Debug.Print &quot;[&quot; &amp; Trim(s) &amp; &quot;]&quot;   '--- 結果: [VBA 入門]（前後消える） ---

End Sub</code></pre>



<p class="wp-block-paragraph"><code>Debug.Print</code>の結果はイミディエイトウィンドウに表示されます。3つを並べると、LTrimは左、RTrimは右、Trimは両方を削っているのがよくわかりますね。どの関数も中間の半角スペース（<code>VBA</code>と<code>入門</code>の間）は残したままです。</p>



<h2 class="wp-block-heading"><span id="toc7">VBEの起動とコードの準備</span></h2>



<p class="wp-block-paragraph">ここまでのコードを試すには、VBE（Visual Basic Editor）を開いてコードを書く場所を用意します。すでにVBEに慣れている方は、このセクションは読み飛ばして構いません。</p>



<p class="wp-block-paragraph">Excelを開いた状態で、キーボードの <strong>Alt + F11</strong> を押すとVBEのウィンドウが表示されます。リボンから開く場合は「開発」タブ →「Visual Basic」をクリックしてください。「開発」タブが見当たらないときは、「ファイル」→「オプション」→「リボンのユーザー設定」で「開発」にチェックを入れると表示されます。</p>



<p class="wp-block-paragraph">VBEが開いたら、コードを書く場所（標準モジュール）を追加します。</p>



<ol class="wp-block-list"><li>メニューバーの「挿入」→「標準モジュール」をクリック</li><li>左側のプロジェクトエクスプローラーに「Module1」が追加される</li><li>右側のコードウィンドウにコードを書く</li></ol>



<p class="wp-block-paragraph">VBEの画面構成をもっと詳しく知りたい方は、<a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBEの画面の見方と基本操作</a>も参考にしてみてください。なお、マクロを含むファイルは必ず <strong>マクロ有効ブック（.xlsm）</strong> 形式で保存してくださいね。通常の.xlsx形式で保存するとコードが失われてしまいます。</p>



<h2 class="wp-block-heading"><span id="toc8">Trimで空白が消えないときの原因と対処法</span></h2>



<p class="wp-block-paragraph">「Trimをかけたのに空白が残っている」——これはVBAの空白処理でいちばん多いつまずきです。原因のほとんどは、<strong>Trim系では消せない種類の空白</strong> が混じっていることにあります。</p>



<h3 class="wp-block-heading"><span id="toc9">全角スペースはTrimでは消えない</span></h3>



<p class="wp-block-paragraph">最初に、いちばん大事なファクトをはっきりさせておきます。</p>



<p class="wp-block-paragraph"><strong>VBAのTrim・LTrim・RTrimが削除できるのは、半角スペース（Chr(32)）だけです。全角スペース（ChrW(12288)）は削除されません。</strong></p>



<p class="wp-block-paragraph">一部のサイトや解説では「VBA Trimで全角スペースも消える」と書かれていることがありますが、これは誤りです。実際に試すと、全角スペースはそのまま残ります。</p>



<pre class="wp-block-code"><code>Sub 全角スペースは消えないことを確認()

    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したのに消えない」と感じたら、まずは全角スペースを疑ってください。対処法は後述しますが、<code>Replace</code>関数で個別に消すのが基本です。</p>



<h3 class="wp-block-heading"><span id="toc10">タブ・改行・NBSPもTrimの対象外</span></h3>



<p class="wp-block-paragraph">全角スペース以外にも、Trim系で消えない「空白に見える文字」があります。次の表で整理しておきましょう。</p>



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



<p class="wp-block-paragraph">特に厄介なのが <strong>NBSP（ノーブレークスペース）</strong> です。Webページからコピーしたデータに紛れ込みやすく、見た目はただの半角スペースなのにTrimでは消えません。VLOOKUPが完全一致のはずなのに #N/A を返す、という原因不明のトラブルの正体がこれだったりします。NBSPの詳しい対策は<a href="https://mashukabu.com/about-nbsp/">ノーブレークスペース完全対策ガイド</a>で解説しています。</p>



<p class="wp-block-paragraph">「Trimしても消えない空白」の正体を突き止めたいときは、<code>AscW</code>関数で文字コードを調べるのが確実です。</p>



<pre class="wp-block-code"><code>Sub 消えない空白の正体を調べる()

    Dim s As String, 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の結果が <strong>32なら半角スペース、160ならNBSP、12288なら全角スペース</strong> です。正体さえわかれば、対応する<code>Replace</code>文を書くだけで解決できます。</p>



<h3 class="wp-block-heading"><span id="toc11">どの空白をどう消す？判断フローチャート</span></h3>



<p class="wp-block-paragraph">空白の種類が整理できたら、あとは「どの関数を使うか」を判断するだけです。次のフローで考えると迷いません。</p>



<ol class="wp-block-list"><li><strong>半角スペースが前後だけ？</strong> → そのまま <strong>Trim（LTrim / RTrim）</strong> でOK。</li><li><strong>半角スペースが文字列の途中で連続している？</strong> → <strong>WorksheetFunction.Trim</strong> で1つに圧縮（次のセクションで解説）。</li><li><strong>全角スペースが混ざっている？</strong> → <strong><code>Replace(s, ChrW(12288), "")</code></strong> で削除。半角に統一したいなら<code>StrConv(s, vbNarrow)</code>で全角→半角変換してからTrim。</li><li><strong>NBSP・タブ・改行が混ざっている？</strong> → <strong><code>Replace</code></strong> でそれぞれの文字コードを指定して削除。</li></ol>



<p class="wp-block-paragraph">つまり、<strong>「半角スペースの前後」だけがTrim系の守備範囲</strong> で、それ以外はすべてReplaceや別の関数の出番、と覚えておけば判断に迷いません。具体的なReplaceの使い方は<a href="https://mashukabu.com/vba-replace-function/">VBA Replace関数の使い方</a>で詳しく解説しています。</p>



<h2 class="wp-block-heading"><span id="toc12">WorksheetFunction.TrimとVBA Trimの違い</span></h2>



<p class="wp-block-paragraph">VBAには、これまで紹介したTrimのほかに <code>WorksheetFunction.Trim</code> という書き方もあります。名前がそっくりなので混同しがちですが、<strong>動作はまったくの別物</strong> です。ここを押さえておくと「Trimしたのに中間の空白が残る」トラブルを避けられます。</p>



<h3 class="wp-block-heading"><span id="toc13">中間の連続スペースの扱いが違う</span></h3>



<p class="wp-block-paragraph">2つの最大の違いは、<strong>文字列の途中にある連続スペースの扱い</strong> です。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>VBA Trim</th><th>WorksheetFunction.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">VBA Trimは前後しか触りませんが、WorksheetFunction.Trim（＝ワークシート関数のTRIMと同じ動作）は前後に加えて中間の連続スペースを1つにまとめます。実際に比べてみましょう。</p>



<pre class="wp-block-code"><code>Sub 中間スペースの扱いを比較()

    Dim s As String
    s = &quot;田中  太郎  &quot;  '--- 中間に半角スペース2つ ---

    Debug.Print &quot;[&quot; &amp; Trim(s) &amp; &quot;]&quot;
    '--- VBA Trim → [田中  太郎]（中間は2つのまま残る） ---

    Debug.Print &quot;[&quot; &amp; Application.WorksheetFunction.Trim(s) &amp; &quot;]&quot;
    '--- ワークシート版 → [田中 太郎]（中間が1つに圧縮される） ---

End Sub</code></pre>



<p class="wp-block-paragraph">「氏名の途中に余分なスペースが入ってしまったデータを、見栄えよく整えたい」——そんなときはWorksheetFunction.Trimの出番です。逆に「前後だけ確実に消したい」場面ではVBA Trimで十分。中間まで勝手に圧縮されないぶん、データを意図せず変えてしまう心配がありません。</p>



<p class="wp-block-paragraph">なお、どちらも <strong>全角スペースは消せない</strong> 点は共通です。ワークシート関数版だからといって全角に対応するわけではないので注意してください。</p>



<h3 class="wp-block-heading"><span id="toc14">VBAからワークシート版Trimを呼ぶ方法</span></h3>



<p class="wp-block-paragraph">VBAのコード内からワークシート版のTrimを使いたいときは、次のように書きます。</p>



<pre class="wp-block-code"><code>Application.WorksheetFunction.Trim(対象文字列)</code></pre>



<p class="wp-block-paragraph"><code>Application.</code>は省略して<code>WorksheetFunction.Trim(s)</code>と書いても動きます。VBA Trimとの使い分けは、</p>



<ul class="wp-block-list"><li><strong>前後だけ消せば十分</strong> → <code>Trim(s)</code>（VBA版）</li><li><strong>中間の連続スペースも1つにまとめたい</strong> → <code>WorksheetFunction.Trim(s)</code>（ワークシート版）</li></ul>



<p class="wp-block-paragraph">と覚えておくと迷いません。ワークシート上の数式としてのTRIM関数について詳しくは、<a href="https://mashukabu.com/excel-function-howto-use-trim/">ExcelのTRIM関数の使い方</a>で解説しています。</p>



<h2 class="wp-block-heading"><span id="toc15">実務で使えるTrim・LTrim・RTrimの活用コード</span></h2>



<p class="wp-block-paragraph">ここからは、3関数の使い分けを実感できる実務コードを3つ紹介します。いずれもVarType判定で文字列セルだけを処理しているので、数値や日付のセルが混ざっていても安全に動きます。</p>



<h3 class="wp-block-heading"><span id="toc16">コピペデータの先頭空白を一括削除（LTrim）</span></h3>



<p class="wp-block-paragraph">他システムや固定長データからコピーしたデータは、桁を揃えるために先頭にスペースが詰められていることがあります。「末尾の空白は意味があるので残したいが、先頭のパディングだけ消したい」——そんなときはLTrimの出番です。</p>



<pre class="wp-block-code"><code>Sub A列の先頭空白を一括削除()

    Dim ws As Worksheet '--- 対象シート ---
    Dim cell As Range   '--- ループ用セル ---

    Set ws = ActiveSheet

    '--- A列の各セルから先頭の半角スペースを削除 ---
    For Each cell In ws.Range(&quot;A1:A&quot; &amp; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row)
        If VarType(cell.Value) = vbString Then
            cell.Value = LTrim(cell.Value)
        End If
    Next cell

    MsgBox &quot;A列の先頭空白を削除しました。&quot;, vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph">ここでTrimではなくLTrimを選ぶのがポイントです。前後まとめて消したいならTrimですが、「先頭だけ」という明確な意図があるならLTrimのほうがコードの意図が伝わります。<code>For Each</code>の基本は<a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">LTrim関数の使い方</a>でも触れています。</p>



<h3 class="wp-block-heading"><span id="toc17">氏名フィールドの全角スペースを正しく除去する</span></h3>



<p class="wp-block-paragraph">事務作業で頻発するのが、氏名の前後に全角スペースが入ってしまうケースです。前述のとおりTrimでは全角スペースを消せないので、<code>Replace</code>で全角スペースを消してからTrimで半角スペースを仕上げる、という二段構えが定番になります。</p>



<pre class="wp-block-code"><code>Sub 氏名の全角スペースを正しく除去()

    Dim ws As Worksheet '--- 対象シート ---
    Dim cell As Range   '--- ループ用セル ---
    Dim sVal As String  '--- セルの値 ---

    Set ws = ActiveSheet

    For Each cell In ws.UsedRange
        If VarType(cell.Value) = vbString Then
            sVal = cell.Value

            '--- Step1: 全角スペースを削除（Trimでは消せない） ---
            sVal = Replace(sVal, ChrW(12288), &quot;&quot;)

            '--- Step2: 残った前後の半角スペースを削除 ---
            sVal = Trim(sVal)

            cell.Value = sVal
        End If
    Next cell

    MsgBox &quot;氏名フィールドの空白を除去しました。&quot;, vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph">処理の順番が大切です。先に<code>Replace</code>で全角スペースを消し、最後に<code>Trim</code>で半角スペースを仕上げます。「Trimだけで済ませようとして全角が残る」という典型的な失敗を、この二段構えで確実に防げます。</p>



<h3 class="wp-block-heading"><span id="toc18">シート全体の前後空白をまとめてクレンジング（Trim）</span></h3>



<p class="wp-block-paragraph">「どの列に空白が混じっているか分からない」というときは、UsedRange全体を走査して前後空白をまとめて削除するのがいちばん手軽です。前後どちらも対象なのでTrimを使います。</p>



<pre class="wp-block-code"><code>Sub シート全体の前後空白をクレンジング()

    Dim ws As Worksheet '--- 対象シート ---
    Dim cell As Range   '--- ループ用セル ---
    Dim lCount As Long  '--- 処理件数カウンタ ---

    Set ws = ActiveSheet

    For Each cell In ws.UsedRange
        '--- 文字列セルかつ数式でないセルだけを処理 ---
        If VarType(cell.Value) = vbString And Not cell.HasFormula Then
            cell.Value = Trim(cell.Value)
            lCount = lCount + 1
        End If
    Next cell

    MsgBox lCount &amp; &quot; 件のセルから前後の空白を削除しました。&quot;, vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph">ポイントは<code>And Not cell.HasFormula</code>の一文です。VLOOKUPやTEXT関数など結果が文字列になる数式セルも<code>VarType</code>ではvbStringを返すため、これを入れておかないと数式を計算結果の文字列で上書きしてしまう恐れがあります。計算式と手入力データが混在する業務ファイルでは、この一行が事故防止に効いてきますよ。空白処理の全体像は<a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBAで空白を削除する方法まとめ</a>で一覧できます。</p>



<h2 class="wp-block-heading"><span id="toc19">まとめ｜Trim・LTrim・RTrimの使い分け早見表</span></h2>



<p class="wp-block-paragraph">最後に、VBAの空白除去の使い分けを早見表でおさらいしましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>やりたいこと</th><th>使う関数・方法</th></tr></thead><tbody><tr><td>前後の半角スペースを消す</td><td><strong>Trim</strong></td></tr><tr><td>先頭の半角スペースだけ消す</td><td><strong>LTrim</strong></td></tr><tr><td>末尾の半角スペースだけ消す</td><td><strong>RTrim</strong></td></tr><tr><td>中間の連続スペースを1つに圧縮</td><td><strong>WorksheetFunction.Trim</strong></td></tr><tr><td>全角スペースを消す</td><td><strong>Replace(s, ChrW(12288), &#8220;&#8221;)</strong></td></tr><tr><td>NBSP・タブ・改行を消す</td><td><strong>Replace</strong> で各文字コードを指定</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">押さえるべきポイントは次の3つです。</p>



<ul class="wp-block-list"><li><strong>Trim・LTrim・RTrimの違いは「削除する位置」だけ</strong>。迷ったらTrimでOK。</li><li><strong>3関数が消せるのは半角スペースだけ</strong>。全角スペースやNBSPは消えないので、<code>Replace</code>を併用する。</li><li><strong>中間の連続スペースを整えたいときはWorksheetFunction.Trim</strong>。VBA Trimは前後しか触らない。</li></ul>



<p class="wp-block-paragraph">空白の処理は地味ですが、VLOOKUPの照合ミスや集計ズレを防ぐ大切な前処理です。本記事の比較表とフローチャートを手元の地図にして、クリーンなデータを手に入れてくださいね。各関数の実践コードをもっと見たい方は、<a href="https://mashukabu.com/excel-vba-howto-use-trim/">VBA Trim関数の使い方</a>・<a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">LTrim関数の使い方</a>・<a href="https://mashukabu.com/excel-vba-howto-use-rtrim/">RTrim関数の使い方</a>もあわせてどうぞ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/vba-trim-ltrim-rtrim/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA】RTrim関数の使い方｜末尾の空白を一括削除する方法</title>
		<link>https://mashukabu.com/excel-vba-howto-use-rtrim/</link>
					<comments>https://mashukabu.com/excel-vba-howto-use-rtrim/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sun, 06 Mar 2022 11:24:25 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[RTrim]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[データクレンジング]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[文字列操作]]></category>
		<category><![CDATA[空白削除]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=1297</guid>

					<description><![CDATA[VBAのRTrim関数を使って文字列末尾の空白を削除する方法を解説。基本構文からFor Eachでのセル一括クレンジング、固定長データの末尾空白除去まで、コピペで動くコードで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">手入力やデータベースから取り込んだデータに、末尾の空白が紛れ込んでいた経験はありませんか？</p>



<p class="wp-block-paragraph">見た目は同じなのに、文字列比較で「不一致」が返ってくる。原因を調べてみると、セルの末尾に半角スペースが入っていた――こんなトラブルは意外と多いものです。</p>



<p class="wp-block-paragraph">数件なら手作業で直せますが、数百行・数千行のデータとなると目視チェックは現実的ではありませんよね。</p>



<p class="wp-block-paragraph">そんなときに活躍するのが、VBAの <strong>RTrim関数</strong> です。たった1行のコードで、末尾の空白をまとめてクレンジングできます。この記事では、VBA RTrimの基本的な使い方から業務で使える実践コードまで、順を追って解説していきます。</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">VBA RTrim関数とは？末尾の空白を削除する関数</a><ol><li><a href="#toc2" tabindex="0">RTrimとWorksheetFunction.Trimの違いに注意</a></li><li><a href="#toc3" tabindex="0">LTrim・RTrim・Trimの違い</a></li><li><a href="#toc4" tabindex="0">削除できない空白に注意</a></li></ol></li><li><a href="#toc5" tabindex="0">VBEの起動とコードの書き方</a><ol><li><a href="#toc6" tabindex="0">VBE（Visual Basic Editor）の開き方</a></li><li><a href="#toc7" tabindex="0">標準モジュールの挿入</a></li></ol></li><li><a href="#toc8" tabindex="0">VBA RTrimの基本コード（コピペで動く）</a></li><li><a href="#toc9" tabindex="0">RTrim関数の仕組みを深掘りする</a><ol><li><a href="#toc10" tabindex="0">Strings.RTrimとRTrimの違い</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">VBA RTrimの実践コード3選</a><ol><li><a href="#toc14" tabindex="0">セルの末尾空白を一括クレンジングする</a></li><li><a href="#toc15" tabindex="0">固定長データの末尾空白を除去する</a></li><li><a href="#toc16" tabindex="0">RTrim + Replaceで見えない空白も一掃する</a></li><li><a href="#toc17" tabindex="0">VLOOKUPやIFが一致しない原因は末尾空白かもしれません</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">型の不一致（実行時エラー 13）</a></li><li><a href="#toc21" tabindex="0">コンパイルエラー（あいまいな名前が検出されました）</a></li><li><a href="#toc22" tabindex="0">マクロ無効・.xlsm保存の注意</a></li></ol></li><li><a href="#toc23" tabindex="0">よくある質問</a><ol><li><a href="#toc24" tabindex="0">RTrimは複数の末尾スペースをまとめて削除できますか？</a></li><li><a href="#toc25" tabindex="0">RTrimとLTrimを両方かけたい場合はどう書きますか？</a></li><li><a href="#toc26" tabindex="0">全角スペースが削除されないときはどうすればよいですか？</a></li><li><a href="#toc27" tabindex="0">CSVやテキストファイルを読み込んだ文字列にも使えますか？</a></li><li><a href="#toc28" tabindex="0">RTrimで処理したあと、削除した空白は元に戻せますか？</a></li></ol></li><li><a href="#toc29" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBA RTrim関数とは？末尾の空白を削除する関数</span></h2>



<p class="wp-block-paragraph">RTrimは、文字列の <strong>末尾（右側）にある空白だけを削除する</strong> VBA関数です。「Right Trim」の略で、右側をトリミングするイメージですね。</p>



<p class="wp-block-paragraph">たとえば、こんなふうに変換されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>Before</th><th>After</th></tr></thead><tbody><tr><td><code>"Excel   "</code></td><td><code>"Excel"</code></td></tr><tr><td><code>"  VBA 入門  "</code></td><td><code>"  VBA 入門"</code></td></tr><tr><td><code>"データ"</code></td><td><code>"データ"</code>（変化なし）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ポイントは、<strong>先頭の空白はそのまま残る</strong> ということです。末尾だけをピンポイントで処理したい場面で使いますよ。</p>



<h3 class="wp-block-heading"><span id="toc2">RTrimとWorksheetFunction.Trimの違いに注意</span></h3>



<p class="wp-block-paragraph">VBAには、これまで紹介したTrim族のほかに <code>WorksheetFunction.Trim</code> という書き方もあります。名前が似ていて混同しやすいのですが、動作はまったくの別物なので押さえておきましょう。</p>



<p class="wp-block-paragraph">VBAのRTrim・LTrim・Trimは、あくまで文字列の前後にある空白だけを処理します。文字列の途中（中間）にある空白には一切手をつけません。</p>



<p class="wp-block-paragraph">一方、<code>Application.WorksheetFunction.Trim</code> は、ワークシート関数のTRIMと同じ動作をします。前後の空白を削除するのに加えて、文字列の途中にある連続スペースを1つにまとめて圧縮するのが大きな違いです。</p>



<figure class="wp-block-table"><table><thead><tr><th>目的</th><th>使う関数</th></tr></thead><tbody><tr><td>末尾だけ削除したい</td><td>RTrim</td></tr><tr><td>前後だけ削除したい</td><td>Trim</td></tr><tr><td>前後に加えて中間の連続スペースも圧縮したい</td><td>WorksheetFunction.Trim</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">たとえば「田中　　太郎」のように氏名の間に余分なスペースが混ざっているデータを整形したいときは、<code>WorksheetFunction.Trim</code> の出番です。</p>



<pre class="wp-block-code"><code>Debug.Print Trim(&quot;田中  太郎  &quot;)
'--- 結果: &quot;田中  太郎&quot;（中間スペースは残る） ---

Debug.Print Application.WorksheetFunction.Trim(&quot;田中  太郎  &quot;)
'--- 結果: &quot;田中 太郎&quot;（中間スペースが1つに圧縮される） ---</code></pre>



<p class="wp-block-paragraph">「末尾だけ」を確実に処理したいときはRTrim、「見栄えのために中間も整えたい」ときはWorksheetFunction.Trim、と覚えておくと迷いません。</p>



<h3 class="wp-block-heading"><span id="toc3">LTrim・RTrim・Trimの違い</span></h3>



<p class="wp-block-paragraph">VBAには空白を削除する関数が3つあります。違いをまとめると次のとおりです。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>削除する位置</th><th>用途</th></tr></thead><tbody><tr><td><strong><a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">LTrim</a></strong></td><td>先頭のみ</td><td>先頭空白だけ除去したいとき</td></tr><tr><td><strong>RTrim</strong></td><td>末尾のみ</td><td>末尾空白だけ除去したいとき</td></tr><tr><td><strong><a href="https://mashukabu.com/excel-vba-howto-use-trim/">Trim</a></strong></td><td>前後両方</td><td>前後どちらの空白も不要なとき</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">3つの使い分けをもっと詳しく知りたい方は、<a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBA 空白削除まとめ</a>で比較表つきで解説しています。</p>



<p class="wp-block-paragraph">なお、VBAのTrimはワークシート関数の <a href="https://mashukabu.com/excel-function-howto-use-trim/">TRIM関数</a> とは動作が異なります。ワークシートのTRIMは文字列内部の連続スペースも1つに圧縮しますが、VBAのTrimは前後の空白を削除するだけです。内部の空白には手をつけません。</p>



<h3 class="wp-block-heading"><span id="toc4">削除できない空白に注意</span></h3>



<p class="wp-block-paragraph">RTrimが削除できるのは、半角スペース（Chr(32)）と全角スペース（ChrW(12288)）です。</p>



<p class="wp-block-paragraph">一方、以下の文字は空白のように見えても <strong>RTrimでは削除されません</strong>。</p>



<ul class="wp-block-list"><li>タブ文字（Chr(9)）</li><li>改行（Chr(10) / Chr(13)）</li><li><a href="https://mashukabu.com/about-nbsp/">ノーブレークスペース（NBSP）</a></li></ul>



<p class="wp-block-paragraph">特にWebページからコピーしたデータには、NBSP（Chr(160)）が含まれていることがあります。NBSPを除去したい場合は、<code>Replace</code> 関数で個別に対処しましょう。</p>



<pre class="wp-block-code"><code>Replace(対象文字列, ChrW(160), &quot;&quot;)</code></pre>



<p class="wp-block-paragraph">この点は <a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">LTrim</a> や <a href="https://mashukabu.com/excel-vba-howto-use-trim/">Trim</a> でも同じです。</p>



<h2 class="wp-block-heading"><span id="toc5">VBEの起動とコードの書き方</span></h2>



<p class="wp-block-paragraph">VBAのコードを動かすには、まずVBE（Visual Basic Editor）を開いて、コードを書く場所を用意する必要があります。</p>



<h3 class="wp-block-heading"><span id="toc6">VBE（Visual Basic Editor）の開き方</span></h3>



<p class="wp-block-paragraph">Excelを開いた状態で、キーボードの <strong>Alt + F11</strong> を押してください。VBEのウィンドウが表示されます。</p>



<p class="wp-block-paragraph">リボンから開く場合は、「開発」タブ →「Visual Basic」をクリックします。「開発」タブが見当たらないときは、リボンのカスタマイズから追加できますよ。「ファイル」→「オプション」→「リボンのユーザー設定」で「開発」にチェックを入れてください。</p>



<p class="wp-block-paragraph">VBEの画面構成についてもっと知りたい方は、<a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBE画面の見方ガイド</a>を参考にしてみてください。</p>



<h3 class="wp-block-heading"><span id="toc7">標準モジュールの挿入</span></h3>



<p class="wp-block-paragraph">VBEが開いたら、コードを書く場所（標準モジュール）を追加します。</p>



<ol class="wp-block-list"><li>メニューバーの「挿入」→「標準モジュール」をクリック</li><li>左側のプロジェクトエクスプローラーに「Module1」が追加される</li><li>右側に表示されるコードウィンドウに、コードを書いていく</li></ol>



<p class="wp-block-paragraph">ここまで準備できたら、さっそくRTrimを使ってみましょう。</p>



<h2 class="wp-block-heading"><span id="toc8">VBA RTrimの基本コード（コピペで動く）</span></h2>



<p class="wp-block-paragraph">RTrimの構文はとてもシンプルです。</p>



<pre class="wp-block-code"><code>Strings.RTrim(string)</code></pre>



<p class="wp-block-paragraph">引数に文字列を渡すと、末尾の空白を取り除いた文字列が返ってきます。</p>



<p class="wp-block-paragraph">まずは動作確認用のコードを試してみましょう。Module1のコードウィンドウに、以下をそのまま貼り付けてください。</p>



<pre class="wp-block-code"><code>Sub RTrimの動作確認()

    Dim sBefore As String '--- 変換前の文字列 ---
    Dim sAfter As String  '--- 変換後の文字列 ---

    sBefore = &quot;Excel VBA   &quot;
    sAfter = RTrim(sBefore)

    '--- 結果をメッセージボックスで確認 ---
    MsgBox &quot;変換前: [&quot; &amp; sBefore &amp; &quot;]&quot; &amp; vbCrLf &amp; _
           &quot;変換後: [&quot; &amp; sAfter &amp; &quot;]&quot;, vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph">コードを貼り付けたら、<strong>F5キー</strong> を押して実行してみてください。メッセージボックスに変換前と変換後の文字列が表示されます。角括弧で囲んでいるので、末尾のスペースが消えたことが一目でわかるはずです。</p>



<h2 class="wp-block-heading"><span id="toc9">RTrim関数の仕組みを深掘りする</span></h2>



<p class="wp-block-paragraph">基本コードが動いたところで、VBA RTrimのポイントをもう少し掘り下げておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc10">Strings.RTrimとRTrimの違い</span></h3>



<p class="wp-block-paragraph">先ほどの構文で <code>Strings.RTrim</code> と書きましたが、サンプルコードでは <code>RTrim</code> だけで動いていましたよね。</p>



<p class="wp-block-paragraph">実はこの2つは同じ関数です。<code>Strings</code> はVBAの標準ライブラリ名で、通常は省略して書けます。ただし、複数のライブラリを参照設定している場合は注意が必要です。同じ名前の関数が存在すると名前の衝突が起きて、コンパイルエラーになることがあります。</p>



<p class="wp-block-paragraph">普段は <code>RTrim</code> だけで問題ありません。エラーが出た場合は <code>Strings.RTrim</code> とフル修飾で書くと解決しますよ。</p>



<h3 class="wp-block-heading"><span id="toc11">空白がない場合の挙動</span></h3>



<p class="wp-block-paragraph">末尾に空白がない文字列をRTrimに渡しても、エラーにはなりません。元の文字列がそのまま返ってきます。</p>



<pre class="wp-block-code"><code>Debug.Print RTrim(&quot;Excel&quot;) '--- 結果: &quot;Excel&quot;（変化なし） ---</code></pre>



<p class="wp-block-paragraph">「空白があるかどうか事前にチェックしなきゃ」と心配する必要はないので、安心してまとめて処理できますよ。</p>



<p class="wp-block-paragraph">なお、Nullを渡した場合はNullがそのまま返ります。こちらもエラーにはなりません。</p>



<h3 class="wp-block-heading"><span id="toc12">対応する空白の種類</span></h3>



<p class="wp-block-paragraph">あらためて整理しておきます。</p>



<figure class="wp-block-table"><table><thead><tr><th>文字</th><th>コード</th><th>RTrimで削除</th></tr></thead><tbody><tr><td>半角スペース</td><td>Chr(32)</td><td>される</td></tr><tr><td>全角スペース</td><td>ChrW(12288)</td><td>される</td></tr><tr><td>タブ</td><td>Chr(9)</td><td>されない</td></tr><tr><td>改行（LF）</td><td>Chr(10)</td><td>されない</td></tr><tr><td>改行（CR）</td><td>Chr(13)</td><td>されない</td></tr><tr><td>NBSP</td><td>Chr(160)</td><td>されない</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">削除されない空白を含むデータを扱う場合は、<code>Replace</code> 関数を併用するのがおすすめです。具体的なコードはこのあとの実践コードで紹介します。</p>



<h2 class="wp-block-heading"><span id="toc13">VBA RTrimの実践コード3選</span></h2>



<p class="wp-block-paragraph">ここからは、実際の業務で使えるコードを紹介します。</p>



<h3 class="wp-block-heading"><span id="toc14">セルの末尾空白を一括クレンジングする</span></h3>



<p class="wp-block-paragraph">A列に入力されたデータの末尾空白を、まとめて除去するマクロです。データ整形の前処理に便利ですよ。</p>



<pre class="wp-block-code"><code>Sub A列の末尾空白を一括削除()

    Dim ws As Worksheet   '--- 対象シート ---
    Dim rng As Range      '--- データ範囲 ---
    Dim cell As Range     '--- ループ用セル ---
    Dim lCount As Long    '--- 処理件数カウンタ ---

    Set ws = ThisWorkbook.Sheets(1)
    Set rng = ws.Range(&quot;A1:A&quot; &amp; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row)

    '--- 各セルの末尾空白を削除 ---
    For Each cell In rng
        If VarType(cell.Value) = vbString Then
            cell.Value = RTrim(cell.Value)
            lCount = lCount + 1
        End If
    Next cell

    MsgBox lCount &amp; &quot;件のセルを処理しました。&quot;, vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph"><code>VarType(cell.Value) = vbString</code> で文字列セルだけを対象にしています。数値や日付のセルをそのままRTrimに渡すと型の不一致が起きる場合があるので、この判定を入れておくのが安全です。</p>



<p class="wp-block-paragraph">対象列を変えたい場合は、<code>Range("A1:A"...)</code> の「A」を任意の列に書き換えてください。<a href="https://mashukabu.com/vba-howto-use-for-each-next/">For Each</a>の基本を押さえておくと、このパターンの応用が広がります。</p>



<h3 class="wp-block-heading"><span id="toc15">固定長データの末尾空白を除去する</span></h3>



<p class="wp-block-paragraph">RTrimが特に活躍するのが、固定長データの処理です。COBOL系システムやデータベースのCHAR型フィールドでは、文字数が足りない部分を空白で埋める「パディング」が行われます。こうしたデータをExcelに取り込むと、各項目の末尾に大量のスペースが付いてきます。</p>



<p class="wp-block-paragraph">以下は、固定長レコードを項目ごとに切り出して、末尾のパディングを除去するコードです。</p>



<pre class="wp-block-code"><code>Sub 固定長データの末尾空白を除去()

    Dim sRecord As String   '--- 固定長レコード1行分 ---
    Dim sName As String     '--- 氏名（20文字固定） ---
    Dim sDept As String     '--- 部署名（15文字固定） ---
    Dim sArea As String     '--- 地域（10文字固定） ---

    '--- サンプルデータ（実務ではファイル読み込み） ---
    sRecord = &quot;田中太郎            営業部            東京都       &quot;

    '--- 固定長で切り出し ---
    sName = Mid(sRecord, 1, 20)
    sDept = Mid(sRecord, 21, 15)
    sArea = Mid(sRecord, 36, 10)

    '--- 末尾のパディング空白を除去 ---
    sName = RTrim(sName)
    sDept = RTrim(sDept)
    sArea = RTrim(sArea)

    '--- 結果を確認 ---
    MsgBox &quot;氏名: [&quot; &amp; sName &amp; &quot;]&quot; &amp; vbCrLf &amp; _
           &quot;部署: [&quot; &amp; sDept &amp; &quot;]&quot; &amp; vbCrLf &amp; _
           &quot;地域: [&quot; &amp; sArea &amp; &quot;]&quot;, vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph"><code>Mid</code>（文字列の指定位置から指定文字数を切り出す関数）で固定長の位置を指定して切り出し、<code>RTrim</code> で末尾の空白を除去しています。先頭には空白が入らないデータなので、<a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">LTrim</a> や <a href="https://mashukabu.com/excel-vba-howto-use-trim/">Trim</a> ではなくRTrimだけで十分です。</p>



<p class="wp-block-paragraph">このパターンは、基幹システムからのデータ移行や帳票出力のときに重宝しますよ。</p>



<h3 class="wp-block-heading"><span id="toc16">RTrim + Replaceで見えない空白も一掃する</span></h3>



<p class="wp-block-paragraph">RTrimだけでは取り切れないタブやNBSPも末尾からまとめて除去したい場面があります。次のコードは、RTrimに加えてReplaceで非対応の空白文字も一掃します。</p>



<pre class="wp-block-code"><code>Sub 末尾の見えない空白もまとめて一掃()

    Dim ws As Worksheet   '--- 対象シート ---
    Dim cell As Range     '--- ループ用セル ---
    Dim sVal As String    '--- セルの値 ---
    Dim lCount As Long    '--- 処理件数カウンタ ---

    Set ws = ActiveSheet

    For Each cell In ws.UsedRange
        If VarType(cell.Value) = vbString Then
            sVal = cell.Value

            '--- 末尾のタブ・改行を除去 ---
            Do While Right(sVal, 1) = vbTab Or _
                     Right(sVal, 1) = vbLf Or _
                     Right(sVal, 1) = vbCr
                sVal = Left(sVal, Len(sVal) - 1)
            Loop

            '--- NBSPを除去 ---
            sVal = Replace(sVal, ChrW(160), &quot;&quot;)

            '--- 通常の末尾空白を除去 ---
            sVal = RTrim(sVal)

            If cell.Value &lt;&gt; sVal Then
                cell.Value = sVal
                lCount = lCount + 1
            End If
        End If
    Next cell

    MsgBox lCount &amp; &quot;件のセルを修正しました。&quot;, vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph">処理の流れは3ステップです。まず <code>Do While</code> ループ（<a href="https://mashukabu.com/how-to-use-do-loop/">Do Loopの基本</a>）で末尾のタブ・改行を1文字ずつ削り取ります。次に <code>Replace</code> でNBSPを除去。最後に <code>RTrim</code> で通常の半角・全角スペースを仕上げます。</p>



<p class="wp-block-paragraph">Webページからコピーしたデータや、複数システムを経由したデータにはいろいろな空白文字が混在しがちです。このコードを使えば、まとめてクリーニングできますよ。</p>



<h3 class="wp-block-heading"><span id="toc17">VLOOKUPやIFが一致しない原因は末尾空白かもしれません</span></h3>



<p class="wp-block-paragraph">「データは確かに入っているのにVLOOKUPが #N/A を返す」「IF関数で等号比較したら、見た目は同じなのに不一致になる」――こうしたトラブルの隠れた原因が、末尾の見えない空白です。</p>



<p class="wp-block-paragraph">ワークシート上で見ているだけでは、セルの末尾にスペースが付いていることに気づけません。特に、Webページからコピーしたデータや、基幹システム・データベースから取り込んだデータで起こりがちです。</p>



<p class="wp-block-paragraph">原因を切り分けるには、次の2つの方法が手軽です。</p>



<ul class="wp-block-list"><li><code>=LEN(A1)</code> で実際の文字数を数え、目で見た文字数とズレていないか確認する</li><li><code>=A1="テスト"</code> のように直接比較して、TRUE になるかチェックする</li></ul>



<p class="wp-block-paragraph">LENの結果が想定より多い場合や、直接比較がFALSEになる場合は、末尾空白が紛れ込んでいる可能性が高いです。</p>



<pre class="wp-block-code"><code>Sub 末尾空白の有無をチェック()

    Dim cell As Range

    For Each cell In Selection
        If VarType(cell.Value) = vbString Then
            '--- 元の文字数とRTrim後の文字数を比較 ---
            If Len(cell.Value) &lt;&gt; Len(RTrim(cell.Value)) Then
                Debug.Print cell.Address &amp; &quot; に末尾空白あり（&quot; &amp; _
                    Len(cell.Value) - Len(RTrim(cell.Value)) &amp; &quot;文字）&quot;
            End If
        End If
    Next cell

End Sub</code></pre>



<p class="wp-block-paragraph">チェックしたいセル範囲を選択してから実行すると、末尾空白があるセルのアドレスと余分な文字数がイミディエイトウィンドウに出力されます。原因がわかったら、前述の一括クレンジングコードでまとめて除去し、再計算すればVLOOKUPやIFが正しく動くようになりますよ。</p>



<h3 class="wp-block-heading"><span id="toc18">数式セルへの誤上書きを防ぐ安全なクレンジングコード</span></h3>



<p class="wp-block-paragraph">一括クレンジングのコードでは <code>VarType(cell.Value) = vbString</code> で文字列セルだけを対象にしていますが、もう1点だけ気をつけたいことがあります。</p>



<p class="wp-block-paragraph">それは、数式セルの扱いです。VLOOKUPやTEXT関数など、結果が文字列になる数式が入ったセルも <code>VarType</code> ではvbStringを返すことがあります。そのままRTrimをかけて <code>cell.Value</code> に代入すると、せっかくの数式が計算結果の文字列で上書きされてしまうのです。</p>



<p class="wp-block-paragraph">これを防ぐには、<code>HasFormula</code>（セルに数式が入っているかを判定するプロパティ）で数式セルを除外します。</p>



<pre class="wp-block-code"><code>For Each cell In rng
    '--- 文字列セルかつ数式でないセルだけを処理 ---
    If VarType(cell.Value) = vbString And Not cell.HasFormula Then
        cell.Value = RTrim(cell.Value)
    End If
Next cell</code></pre>



<p class="wp-block-paragraph"><code>And Not cell.HasFormula</code> を条件に加えるだけで、数式セルは触らずに済みます。計算式と手入力データが混在する業務ファイルでは、この一行が事故防止に効いてきますよ。</p>



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



<p class="wp-block-paragraph">RTrim自体はシンプルな関数ですが、周辺で引っかかりやすいポイントがあります。</p>



<h3 class="wp-block-heading"><span id="toc20">型の不一致（実行時エラー 13）</span></h3>



<p class="wp-block-paragraph">数値が入っているセルの値を、String型の変数に直接代入しようとすると「型の不一致」エラーが発生することがあります。</p>



<pre class="wp-block-code"><code>'--- これはエラーになる場合がある ---
Dim s As String
s = Range(&quot;A1&quot;).Value  '--- A1が数値だとエラー ---</code></pre>



<p class="wp-block-paragraph">対策は2つあります。<code>CStr</code>（値を文字列に変換する関数）で明示的に文字列に変換するか、<code>VarType</code> で文字列セルだけを処理対象にするかです。実践コードでは <code>VarType</code> による判定を入れているので、そのまま使えば安心です。</p>



<h3 class="wp-block-heading"><span id="toc21">コンパイルエラー（あいまいな名前が検出されました）</span></h3>



<p class="wp-block-paragraph">複数のライブラリを参照設定していると、<code>RTrim</code> という名前が衝突してコンパイルエラーが出ることがあります。この場合は <code>Strings.RTrim</code> とフル修飾で書けば解決します。</p>



<p class="wp-block-paragraph">VBEの参照設定は<a href="https://mashukabu.com/excel-vbe-local-window-explanation/">ローカルウィンドウの活用ガイド</a>でも触れていますので、参考にしてみてください。</p>



<h3 class="wp-block-heading"><span id="toc22">マクロ無効・.xlsm保存の注意</span></h3>



<p class="wp-block-paragraph">VBAマクロを含むファイルは、必ず <strong>マクロ有効ブック（.xlsm）</strong> 形式で保存してください。通常の .xlsx 形式で保存すると、マクロのコードがすべて失われます。</p>



<p class="wp-block-paragraph">ファイルを開いたときに「マクロが無効にされました」と表示されたら、「コンテンツの有効化」をクリックしてください。これでマクロが有効になりますよ。</p>



<h2 class="wp-block-heading"><span id="toc23">よくある質問</span></h2>



<p class="wp-block-paragraph">RTrimを使うときに寄せられがちな疑問をまとめました。</p>



<h3 class="wp-block-heading"><span id="toc24">RTrimは複数の末尾スペースをまとめて削除できますか？</span></h3>



<p class="wp-block-paragraph">はい、できます。末尾にスペースが何個あっても、連続しているものはすべて一括で除去します。「末尾の1個だけ消える」といった挙動ではないので、何個付いているか数える必要はありません。</p>



<h3 class="wp-block-heading"><span id="toc25">RTrimとLTrimを両方かけたい場合はどう書きますか？</span></h3>



<p class="wp-block-paragraph"><code>LTrim(RTrim(str))</code> のように入れ子にすれば、先頭と末尾の両方を削除できます。ただし、前後どちらも削除したいだけなら <code>Trim(str)</code> を使うほうが簡潔です。コードの意図も伝わりやすいので、特別な理由がなければTrimをおすすめします。</p>



<h3 class="wp-block-heading"><span id="toc26">全角スペースが削除されないときはどうすればよいですか？</span></h3>



<p class="wp-block-paragraph">RTrimの全角スペースの扱いは、Excelのバージョンや環境によって挙動が異なる場合があります。確実に除去したいときは、<code>Replace</code> 関数を併用するのが安全です。</p>



<pre class="wp-block-code"><code>sVal = Replace(RTrim(sVal), ChrW(12288), &quot;&quot;)</code></pre>



<p class="wp-block-paragraph"><code>ChrW(12288)</code> が全角スペースのコードです。RTrimのあとにReplaceをかければ、環境に左右されず末尾の全角スペースを取り除けます。</p>



<h3 class="wp-block-heading"><span id="toc27">CSVやテキストファイルを読み込んだ文字列にも使えますか？</span></h3>



<p class="wp-block-paragraph">使えます。<code>Line Input</code> で1行ずつ読み込んだ文字列変数に、そのまま <code>sLine = RTrim(sLine)</code> とかけるだけです。CSVやテキストファイルには末尾にCR（Chr(13)）や余分なスペースが紛れ込むことがあるので、読み込んだ直後にRTrimをかけておくと、後処理のクレンジングを省けて便利ですよ。セルに対する処理とまったく同じ要領で扱えます。</p>



<h3 class="wp-block-heading"><span id="toc28">RTrimで処理したあと、削除した空白は元に戻せますか？</span></h3>



<p class="wp-block-paragraph">いいえ、RTrimで削除した空白を元に戻すことはできません。セルの値を直接書き換える一括クレンジングを実行する前には、シートをコピーしてバックアップを取っておくことをおすすめします。Ctrl + Z で戻せる場合もありますが、マクロ実行後は元に戻せないことが多いため、バックアップが確実です。</p>



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



<p class="wp-block-paragraph">VBA RTrim関数のポイントを振り返っておきましょう。</p>



<ul class="wp-block-list"><li><strong>RTrimは末尾の空白だけを削除する関数</strong>。先頭は残る</li><li>半角・全角スペースは削除されるが、タブやNBSPは削除されない</li><li>空白がない文字列を渡してもエラーにならないので、安心してまとめて処理できる</li><li>固定長データの末尾パディング除去に特に活躍する</li><li>タブやNBSPも除去したい場合は、Replace関数と組み合わせる</li></ul>



<p class="wp-block-paragraph">空白の処理は地味ですが、データの正確性に直結する大事な前処理です。RTrimをうまく使って、クリーンなデータを手に入れましょう。</p>



<p class="wp-block-paragraph">用途に応じて、<a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">LTrim（先頭の空白削除）</a>や<a href="https://mashukabu.com/excel-vba-howto-use-trim/">Trim（前後の空白削除）</a>も使い分けてみてください。空白処理をもっと詳しく知りたい方は、<a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBA 文字列の空白を削除する方法まとめ</a>もあわせてどうぞ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-vba-howto-use-rtrim/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-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">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>
