<?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/%e7%a9%ba%e7%99%bd%e5%89%8a%e9%99%a4/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Thu, 11 Jun 2026 23:51:44 +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>ExcelのTRIM関数の使い方｜余分なスペースを一括削除する方法</title>
		<link>https://mashukabu.com/excel-function-howto-use-trim/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-trim/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Wed, 03 Aug 2022 09:00:00 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[TRIM関数]]></category>
		<category><![CDATA[スペース除去]]></category>
		<category><![CDATA[データ整形]]></category>
		<category><![CDATA[空白削除]]></category>
		<category><![CDATA[関数比較]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=2479</guid>

					<description><![CDATA[ExcelのTRIM関数で文字列の余分なスペースを削除する方法を解説。前後の空白除去や連続スペースの圧縮、VLOOKUP前のデータ整形など実務例を紹介し、SUBSTITUTE・CLEANとの使い分けも整理しています。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">コピペしたデータの前後に余計なスペースが入っていて、VLOOKUPが一致しない。そんな経験はありませんか？ 目に見えないスペースは手作業で探すと大変ですし、見落としも起こりがちです。TRIM関数を使えば、文字列の余分なスペースをまとめて削除できます。この記事では基本の書き方から実務の活用パターンまで紹介します。</p>



<p class="wp-block-paragraph">この記事は次のような人におすすめ</p>



<ul class="wp-block-list"><li>セルの前後についた余計なスペースを一括で削除したい</li><li>コピペやCSVインポート後のデータを整形したい</li><li>TRIM関数とSUBSTITUTE関数・CLEAN関数の違いを知りたい</li></ul>




  <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">TRIM関数とは？</a></li><li><a href="#toc2" tabindex="0">TRIM関数の書き方（構文と引数）</a><ol><li><a href="#toc3" tabindex="0">基本構文</a></li><li><a href="#toc4" tabindex="0">引数の説明</a></li></ol></li><li><a href="#toc5" tabindex="0">TRIM関数の基本的な使い方</a><ol><li><a href="#toc6" tabindex="0">前後のスペースを削除する</a></li><li><a href="#toc7" tabindex="0">連続スペースを1つに圧縮する</a></li><li><a href="#toc8" tabindex="0">文字列を直接指定する</a></li></ol></li><li><a href="#toc9" tabindex="0">TRIM関数の実務活用パターン</a><ol><li><a href="#toc10" tabindex="0">VLOOKUP前のデータ整形</a></li><li><a href="#toc11" tabindex="0">CSVインポート後のクレンジング</a></li><li><a href="#toc12" tabindex="0">TRIM関数とSUBSTITUTE関数の合わせ技</a></li><li><a href="#toc13" tabindex="0">名前リストの姓名間スペース統一</a></li></ol></li><li><a href="#toc14" tabindex="0">TRIM関数で削除できないスペース・文字</a></li><li><a href="#toc15" tabindex="0">TRIM関数とCLEAN関数の違い</a></li><li><a href="#toc16" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc17" tabindex="0">まとめ</a><ol><li><a href="#toc18" tabindex="0">関連記事</a></li><li><a href="#toc19" tabindex="0">関数一覧</a></li></ol></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">TRIM（トリム）関数は、文字列から余分な半角スペースを削除する関数です。英語の「trim」は「刈り込む・整える」という意味で、まさにデータを綺麗にするための関数です。</p>



<p class="wp-block-paragraph">TRIM関数は次の2つの処理を同時に行います。</p>



<ul class="wp-block-list"><li>文字列の<strong>先頭と末尾</strong>にあるスペースをすべて削除する</li><li>文字列の<strong>内部</strong>にある連続した半角スペースを<strong>1つ</strong>に圧縮する</li></ul>



<p class="wp-block-paragraph">たとえば「<code>   田中  太郎  </code>」という文字列にTRIM関数を使うと、「<code>田中 太郎</code>」になります。前後のスペースが消えて、名前の間の連続スペースも1つにまとまります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>ワークシートのTRIM関数は半角スペース専用です。VBAにも同名のTrim関数がありますが、VBA版は前後のスペースだけを除去します。内部の連続スペースは圧縮しません。VBAの空白除去については<a href="https://mashukabu.com/excel-vba-howto-use-trim/">VBA Trim関数</a>の記事を参照してください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc2">TRIM関数の書き方（構文と引数）</span></h2>



<h3 class="wp-block-heading"><span id="toc3">基本構文</span></h3>



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



<h3 class="wp-block-heading"><span id="toc4">引数の説明</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/省略可</th><th>説明</th></tr></thead><tbody><tr><td>文字列</td><td>必須</td><td>余分なスペースを削除したいテキスト、またはセル参照</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">引数は「文字列」の1つだけなので、とてもシンプルです。セル参照のほか、ダブルクォーテーションで囲んだ文字列を直接指定することもできます。</p>



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



<h3 class="wp-block-heading"><span id="toc6">前後のスペースを削除する</span></h3>



<p class="wp-block-paragraph">セルA1に「<code>  東京都新宿区 </code>」と前後にスペースが入っている場合です。</p>



<pre class="wp-block-code"><code>=TRIM(A1)</code></pre>



<p class="wp-block-paragraph">結果は「<code>東京都新宿区</code>」になります。先頭と末尾のスペースがすべて消えます。</p>



<h3 class="wp-block-heading"><span id="toc7">連続スペースを1つに圧縮する</span></h3>



<p class="wp-block-paragraph">セルA1に「<code>田中  太郎</code>」と名前の間にスペースが2つ入っている場合です。</p>



<pre class="wp-block-code"><code>=TRIM(A1)</code></pre>



<p class="wp-block-paragraph">結果は「<code>田中 太郎</code>」になります。内部の連続スペースが1つに圧縮されます。もちろん前後にもスペースがあれば同時に削除されます。</p>



<h3 class="wp-block-heading"><span id="toc8">文字列を直接指定する</span></h3>



<p class="wp-block-paragraph">セル参照ではなく、数式の中に文字列を直接書くこともできます。</p>



<pre class="wp-block-code"><code>=TRIM(&quot;  Excel 関数   &quot;)</code></pre>



<p class="wp-block-paragraph">結果は「<code>Excel 関数</code>」です。前後のスペースが消え、内部の連続スペースが1つに圧縮されます。</p>



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



<h3 class="wp-block-heading"><span id="toc10">VLOOKUP前のデータ整形</span></h3>



<p class="wp-block-paragraph">外部システムから取り込んだデータには、見えないスペースが紛れ込んでいることがあります。このスペースが原因で<a href="https://mashukabu.com/excel-function-howto-use-vlookup/">VLOOKUP関数</a>が「一致なし」になるケースは非常に多いです。</p>



<p class="wp-block-paragraph">検索値と検索範囲の両方にTRIM関数を適用して、スペースの影響を排除しましょう。</p>



<pre class="wp-block-code"><code>=VLOOKUP(TRIM(A2),B:C,2,FALSE)</code></pre>



<p class="wp-block-paragraph">VLOOKUP・INDEX/MATCHで結果がおかしいときは、まずTRIM関数を試してみてください。<a href="https://mashukabu.com/excel-function-howto-use-len/">LEN関数</a>で「見た目は同じなのに文字数が違う」かどうかを確認するのも有効です。</p>



<pre class="wp-block-code"><code>=LEN(A2)=LEN(TRIM(A2))</code></pre>



<p class="wp-block-paragraph">この数式がFALSEなら、セルに余分なスペースが含まれている証拠です。</p>



<h3 class="wp-block-heading"><span id="toc11">CSVインポート後のクレンジング</span></h3>



<p class="wp-block-paragraph">CSVファイルをExcelに取り込むと、フィールドの前後にスペースが入ることがあります。データが大量にある場合は、作業列を使ってTRIM関数で一括整形するのが効率的です。</p>



<pre class="wp-block-code"><code>=TRIM(A2)</code></pre>



<p class="wp-block-paragraph">この数式を下方向にコピーして、整形後のデータを「値として貼り付け」で元の列に上書きすれば完了です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>CSVデータにはスペース以外にも改行コードなどの制御文字が混ざることがあります。その場合は<a href="https://mashukabu.com/excel-function-howto-use-clean/">CLEAN関数</a>と組み合わせると確実です。<code>=TRIM(CLEAN(A2))</code> で制御文字の除去とスペース整形を同時に行えます。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc12">TRIM関数とSUBSTITUTE関数の合わせ技</span></h3>



<p class="wp-block-paragraph">TRIM関数は半角スペースだけを処理します。全角スペースも含めて除去したい場合は、<a href="https://mashukabu.com/excel-function-howto-use-substitute/">SUBSTITUTE関数</a>との合わせ技が便利です。</p>



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



<p class="wp-block-paragraph">この数式はまずSUBSTITUTE関数で全角スペースを半角スペースに変換し、その後TRIM関数で余分な半角スペースを整理します。全角・半角が混在したデータを一発で綺麗にできるので、覚えておくと重宝します。</p>



<p class="wp-block-paragraph">すべてのスペースを完全に消したい場合はSUBSTITUTE関数だけで対応できます。</p>



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



<p class="wp-block-paragraph">「単語間のスペースは1つ残したい」ならTRIM関数、「スペースを全部消したい」ならSUBSTITUTE関数と使い分けてください。</p>



<h3 class="wp-block-heading"><span id="toc13">名前リストの姓名間スペース統一</span></h3>



<p class="wp-block-paragraph">社員名簿や顧客リストで「田中  太郎」「佐藤 花子」のように姓名間のスペースがバラバラなことがあります。TRIM関数を使えば、連続スペースが1つに統一されます。</p>



<pre class="wp-block-code"><code>=TRIM(A2)</code></pre>



<p class="wp-block-paragraph">結果はすべて「姓（スペース1つ）名」の形に揃います。データの見た目が統一されるだけでなく、検索や集計の精度も上がります。</p>



<h2 class="wp-block-heading"><span id="toc14">TRIM関数で削除できないスペース・文字</span></h2>



<p class="wp-block-paragraph">TRIM関数は万能ではありません。処理できるのは半角スペース（文字コード32）だけです。</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>32</td><td>できる</td><td>TRIM関数でOK</td></tr><tr><td>全角スペース</td><td>12288</td><td><strong>できない</strong></td><td>SUBSTITUTE関数で半角に変換してからTRIM</td></tr><tr><td>改行（LF）</td><td>10</td><td><strong>できない</strong></td><td>CLEAN関数、またはSUBSTITUTE(A1,CHAR(10),&#8221;&#8221;)</td></tr><tr><td>タブ</td><td>9</td><td><strong>できない</strong></td><td>CLEAN関数、またはSUBSTITUTE(A1,CHAR(9),&#8221;&#8221;)</td></tr><tr><td>ノーブレークスペース（NBSP）</td><td>160</td><td><strong>できない</strong></td><td>SUBSTITUTE(A1,CHAR(160),&#8221;&#8221;)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Webページからコピーしたデータには、<a href="https://mashukabu.com/about-nbsp/">ノーブレークスペース</a>（CHAR(160)）が含まれていることがあります。見た目は通常のスペースと同じなのにTRIM関数で消えない場合は、この文字を疑ってみてください。</p>



<pre class="wp-block-code"><code>=TRIM(SUBSTITUTE(A1,CHAR(160),&quot; &quot;))</code></pre>



<p class="wp-block-paragraph">CHAR(160)を半角スペースに変換してからTRIM関数に渡すことで、ノーブレークスペースも除去できます。</p>



<h2 class="wp-block-heading"><span id="toc15">TRIM関数とCLEAN関数の違い</span></h2>



<p class="wp-block-paragraph">TRIM関数と<a href="https://mashukabu.com/excel-function-howto-use-clean/">CLEAN関数</a>は、どちらも「不要な文字を消す」関数ですが、削除対象が異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>TRIM関数</th><th>CLEAN関数</th></tr></thead><tbody><tr><td>削除対象</td><td><strong>余分な半角スペース</strong></td><td><strong>印刷できない制御文字</strong>（文字コード0〜31）</td></tr><tr><td>スペースの処理</td><td>前後削除 + 内部を1つに圧縮</td><td>スペースは削除しない</td></tr><tr><td>改行の削除</td><td>できない</td><td>できる（改行は文字コード10）</td></tr><tr><td>タブの削除</td><td>できない</td><td>できる（タブは文字コード9）</td></tr><tr><td>使う場面</td><td>スペースの整理</td><td>制御文字の除去</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">両方を同時に行いたい場合は、組み合わせて使うのがベストです。</p>



<pre class="wp-block-code"><code>=TRIM(CLEAN(A1))</code></pre>



<p class="wp-block-paragraph">CLEAN関数で制御文字を除去し、TRIM関数でスペースを整理する順番で使います。CSVや外部データの取り込み後には、このセットで処理しておくと安心です。</p>



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



<p class="wp-block-paragraph">TRIM関数自体はエラーが出にくい関数ですが、意図した結果にならないケースがあります。</p>



<figure class="wp-block-table"><table><thead><tr><th>症状</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td>スペースが消えない</td><td>全角スペースが含まれている</td><td>SUBSTITUTE関数で半角に変換してからTRIMを適用（上述の合わせ技を参照）</td></tr><tr><td>スペースが消えない</td><td>ノーブレークスペース（CHAR(160)）が含まれている</td><td><code>=TRIM(SUBSTITUTE(A1,CHAR(160)," "))</code> で対応</td></tr><tr><td>#VALUE!エラー</td><td>引数が指定されていない</td><td>文字列の引数は必須です。空にせずセル参照または文字列を指定してください</td></tr><tr><td>VLOOKUPが一致しない</td><td>TRIM後もまだ不一致</td><td><a href="https://mashukabu.com/excel-function-howto-use-asc/">ASC関数</a>で全角英数字を半角に統一してみてください</td></tr><tr><td>数値として認識されない</td><td>TRIM後の値が文字列のまま</td><td>TRIM関数の結果は文字列です。数値として使いたい場合は<code>=TRIM(A1)*1</code>や<a href="https://mashukabu.com/excel-function-howto-use-value/">VALUE関数</a>で変換してください</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>TRIM関数でスペースが消えないときは、<code>=CODE(LEFT(A1,1))</code> で先頭の文字コードを確認してみましょう。32（半角スペース）以外の値が返ってきたら、その文字コードに対応したSUBSTITUTE関数で処理できます。</p></blockquote>



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



<p class="wp-block-paragraph">TRIM関数は「文字列の余分な半角スペースを削除する」ための関数です。</p>



<ul class="wp-block-list"><li>前後のスペースをすべて削除し、内部の連続スペースを1つに圧縮する</li><li>引数は「文字列」の1つだけでシンプル</li><li>VLOOKUP前のデータ整形やCSVクレンジングに効果的</li><li>全角スペースには<a href="https://mashukabu.com/excel-function-howto-use-substitute/">SUBSTITUTE関数</a>、制御文字には<a href="https://mashukabu.com/excel-function-howto-use-clean/">CLEAN関数</a>と組み合わせる</li><li><code>=TRIM(CLEAN(A1))</code> で制御文字とスペースを同時に処理できる</li></ul>



<p class="wp-block-paragraph">データの整形はVLOOKUPや集計の精度に直結します。外部データを取り込んだらまずTRIM関数で整えるクセをつけておくと、トラブルを未然に防げます。ぜひ活用してみてください。</p>



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



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-howto-use-substitute/">SUBSTITUTE関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-clean/">CLEAN関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-asc/">ASC関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-len/">LEN関数の使い方</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-trim/">VBA Trim関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-vlookup/">VLOOKUP関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-iferror/">IFERROR関数の使い方</a></li></ul>



<h3 class="wp-block-heading"><span id="toc19">関数一覧</span></h3>



<p class="wp-block-paragraph">Excel関数の一覧は下記の記事で確認できます。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-list-by-function/">Excel関数 機能別一覧</a></li></ul>



<p class="wp-block-paragraph">エラー値が表示される場合は、下記の記事も参考にしてみてください。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-error-value-list/">Excelのエラー値一覧</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-trim/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Excelで消えない空白の正体と消し方｜ノーブレークスペース完全対策ガイド</title>
		<link>https://mashukabu.com/about-nbsp/</link>
					<comments>https://mashukabu.com/about-nbsp/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 11 Mar 2022 14:07:12 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[CHAR関数]]></category>
		<category><![CDATA[CLEAN関数]]></category>
		<category><![CDATA[NBSP]]></category>
		<category><![CDATA[SUBSTITUTE関数]]></category>
		<category><![CDATA[TRIM関数]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[VLOOKUP不一致]]></category>
		<category><![CDATA[データ整形]]></category>
		<category><![CDATA[ノーブレークスペース]]></category>
		<category><![CDATA[空白削除]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=1303</guid>

					<description><![CDATA[ExcelでTRIMやReplaceで消せない空白の正体はノーブレークスペース（NBSP）です。原因・見分け方・SUBSTITUTE+CHAR(160)での削除方法・VBAでの一括処理・VLOOKUPの不一致対策まで完全解説します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Webサイトからコピーしたデータに空白が入っていて、TRIM関数で消そうとしたのに消えない。そんな経験はありませんか？</p>



<p class="wp-block-paragraph">見た目はただのスペースなのに、いつもの方法では消せないのは本当に厄介ですよね。そのまま放置すると、VLOOKUPの不一致や集計ミスの原因になってしまいます。</p>



<p class="wp-block-paragraph">この記事では、その正体である<strong>ノーブレークスペース（NBSP）</strong> の見分け方から、関数やVBAでの削除方法まで解説します。</p>



<p class="wp-block-paragraph">この記事は次のような人におすすめ</p>



<ul class="wp-block-list"><li>TRIMやReplaceで消せない空白に困っている</li><li>Webや外部システムから取り込んだデータの整形をしたい</li><li>ノーブレークスペースの原因と対処法をまとめて知りたい</li></ul>




  <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">ノーブレークスペースとは？</a></li><li><a href="#toc2" tabindex="0">ノーブレークスペースが混入する原因</a><ol><li><a href="#toc3" tabindex="0">Webサイトからのコピペ</a></li><li><a href="#toc4" tabindex="0">外部システムからのデータ連携</a></li><li><a href="#toc5" tabindex="0">Wordや他のOfficeアプリからの貼り付け</a></li><li><a href="#toc6" tabindex="0">ChromeやTeamsなどのChromiumアプリからのコピペ</a></li></ol></li><li><a href="#toc7" tabindex="0">ノーブレークスペースの見分け方</a><ol><li><a href="#toc8" tabindex="0">CODE関数で文字コードを確認する</a></li><li><a href="#toc9" tabindex="0">LEN関数とSUBSTITUTE関数で個数を特定する</a></li></ol></li><li><a href="#toc10" tabindex="0">条件付き書式でNBSPを含むセルをハイライトする</a><ol><li><a href="#toc11" tabindex="0">設定手順</a></li><li><a href="#toc12" tabindex="0">複数の見えない空白をまとめてハイライトする</a></li><li><a href="#toc13" tabindex="0">作業列に「マーカー」を立てる方法</a></li></ol></li><li><a href="#toc14" tabindex="0">ノーブレークスペースを関数で削除する方法</a><ol><li><a href="#toc15" tabindex="0">パターン1: NBSPだけを削除する</a></li><li><a href="#toc16" tabindex="0">パターン2: NBSPと前後の半角スペースをまとめて削除する</a></li><li><a href="#toc17" tabindex="0">パターン3: 制御文字も含めて一括クレンジングする</a></li><li><a href="#toc18" tabindex="0">パターン4: すべてのスペースを削除する</a></li></ol></li><li><a href="#toc19" tabindex="0">空白の種類と対処関数の早見表</a></li><li><a href="#toc20" tabindex="0">ノーブレークスペースをVBAで削除する方法</a><ol><li><a href="#toc21" tabindex="0">Replace関数でNBSPを削除する</a></li><li><a href="#toc22" tabindex="0">選択範囲のNBSPを一括削除するマクロ</a></li><li><a href="#toc23" tabindex="0">すべての空白を一括削除するマクロ</a></li><li><a href="#toc24" tabindex="0">VBEの起動方法</a></li><li><a href="#toc25" tabindex="0">WorksheetFunction.TrimではNBSPは削除できない</a></li></ol></li><li><a href="#toc26" tabindex="0">VLOOKUPやCOUNTIFで不一致が起きたときの対処法</a><ol><li><a href="#toc27" tabindex="0">VLOOKUPで一致しないときの確認手順</a></li><li><a href="#toc28" tabindex="0">COUNTIFやSUMIFで集計がずれるとき</a></li><li><a href="#toc29" tabindex="0">XLOOKUPやXMATCHでNBSPが原因で#N/Aになるとき</a></li><li><a href="#toc30" tabindex="0">EXACT関数で&#8221;見た目は同じなのに不一致&#8221;の原因を特定する</a></li></ol></li><li><a href="#toc31" tabindex="0">CSV出力時の文字化け対策</a></li><li><a href="#toc32" tabindex="0">検索と置換（Ctrl+H）でNBSPを一括削除する</a><ol><li><a href="#toc33" tabindex="0">テンキーがある場合</a></li><li><a href="#toc34" tabindex="0">テンキーがない場合</a></li></ol></li><li><a href="#toc35" tabindex="0">Mac版Excelでの注意点</a><ol><li><a href="#toc36" tabindex="0">Macでの代替手段</a></li><li><a href="#toc37" tabindex="0">Mac特有のNBSP混入経路</a></li></ol></li><li><a href="#toc38" tabindex="0">Power QueryでNBSPを削除する方法</a><ol><li><a href="#toc39" tabindex="0">GUI操作で削除する手順</a></li><li><a href="#toc40" tabindex="0">M言語のコードで削除する</a></li></ol></li><li><a href="#toc41" tabindex="0">GoogleスプレッドシートでNBSPを削除する方法</a></li><li><a href="#toc42" tabindex="0">ピボットテーブルでNBSPが引き起こす集計エラーと対策</a><ol><li><a href="#toc43" tabindex="0">起きやすい3つの症状</a></li><li><a href="#toc44" tabindex="0">よくある発生パターン</a></li><li><a href="#toc45" tabindex="0">対策：ピボット作成前にクレンジングする</a></li></ol></li><li><a href="#toc46" tabindex="0">Excel 365のREGEXREPLACE関数でNBSPを削除する</a><ol><li><a href="#toc47" tabindex="0">NBSPを正規表現で削除する数式</a></li><li><a href="#toc48" tabindex="0">NBSPと半角スペースをまとめて整形する</a></li><li><a href="#toc49" tabindex="0">SUBSTITUTE式との使い分け</a></li></ol></li><li><a href="#toc50" tabindex="0">ノーブレークスペース以外の「見えない空白」の見分けと削除</a><ol><li><a href="#toc51" tabindex="0">代表的な見えない空白文字の一覧</a></li><li><a href="#toc52" tabindex="0">UNICHAR関数で指定して削除する</a></li><li><a href="#toc53" tabindex="0">Microsoft 365なら正規表現で一括処理する</a></li></ol></li><li><a href="#toc54" tabindex="0">よくある質問（FAQ）</a></li><li><a href="#toc55" tabindex="0">NBSPを最初から混入させない3つの予防策</a><ol><li><a href="#toc56" tabindex="0">予防策1: テキストエディタ経由でペーストする</a></li><li><a href="#toc57" tabindex="0">予防策2: 値のみ貼り付け（Ctrl+Shift+V / Alt+E+S+V）を習慣にする</a></li><li><a href="#toc58" tabindex="0">予防策3: Power Queryを取り込み窓口にする</a></li><li><a href="#toc59" tabindex="0">Q. TeamsやSlackからコピペするとNBSPが入りますか？</a></li><li><a href="#toc60" tabindex="0">Q. EXACT関数でFALSEなのに目視では同じ文字列です。なぜですか？</a></li><li><a href="#toc61" tabindex="0">Q. XLOOKUPでも#N/Aが出ます。VLOOKUPと同じ対処法ですか？</a></li><li><a href="#toc62" tabindex="0">Q. Ctrl+Vで貼り付けるたびにNBSPが入ります。防ぐ方法はありますか？</a></li><li><a href="#toc63" tabindex="0">Q. CODE関数で160と出ました。これは必ずNBSPですか？</a></li><li><a href="#toc64" tabindex="0">Q. SUBSTITUTE+CHAR(160)を入れたのに、VLOOKUPの不一致が直りません。</a></li><li><a href="#toc65" tabindex="0">Q. スマートフォンのメモアプリからコピーするとNBSPが入りますか？</a></li><li><a href="#toc66" tabindex="0">Q. Power QueryのText.TrimでNBSPも消えますか？</a></li><li><a href="#toc67" tabindex="0">Q. 「検索と置換」で削除したのに、まだ空白があります。</a></li><li><a href="#toc68" tabindex="0">Q. NBSP以外にも「見えない空白」はありますか？</a></li><li><a href="#toc69" tabindex="0">Q. Mac版ExcelでもAlt+0160は使えますか？</a></li></ol></li><li><a href="#toc70" tabindex="0">まとめ</a><ol><li><a href="#toc71" tabindex="0">関連記事</a></li><li><a href="#toc72" tabindex="0">関数一覧</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ノーブレークスペースとは？</span></h2>



<p class="wp-block-paragraph">ノーブレークスペース（Non-Breaking Space、略称: NBSP）は、文字コード <strong>160</strong> の特殊な空白文字です。</p>



<p class="wp-block-paragraph">通常の半角スペース（文字コード 32）とは別の文字として扱われます。見た目はまったく同じスペースなのに、Excelの関数やVBAの標準的な処理では「空白」として認識されません。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>半角スペース</th><th>ノーブレークスペース</th></tr></thead><tbody><tr><td>文字コード</td><td>32</td><td>160</td></tr><tr><td>HTMLエンティティ</td><td><code> </code></td><td><code>&nbsp;</code></td></tr><tr><td>TRIM関数</td><td>削除できる</td><td>削除できない</td></tr><tr><td>VBA Trim関数</td><td>削除できる</td><td>削除できない</td></tr><tr><td>見た目</td><td>スペース</td><td>スペース（見分けがつかない）</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>NBSPはもともとHTMLで「この位置では改行しない」ことを指定するための文字です。Webページの文字間隔を調整する目的で使われることが多く、Webからデータをコピーすると混入しやすくなっています。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc2">ノーブレークスペースが混入する原因</span></h2>



<p class="wp-block-paragraph">NBSPがExcelに入り込む主なルートは次のとおりです。</p>



<h3 class="wp-block-heading"><span id="toc3">Webサイトからのコピペ</span></h3>



<p class="wp-block-paragraph">最も多い原因がWebサイトからのコピー&#038;ペーストです。HTMLソースに <code>&nbsp;</code> が含まれていると、Excelに貼り付けたときにNBSPとして残ります。</p>



<h3 class="wp-block-heading"><span id="toc4">外部システムからのデータ連携</span></h3>



<p class="wp-block-paragraph">基幹システムや会計ソフトからCSVやテキストで出力したデータに含まれていることがあります。システム側がNBSPを空白の代わりに使っているケースです。</p>



<h3 class="wp-block-heading"><span id="toc5">Wordや他のOfficeアプリからの貼り付け</span></h3>



<p class="wp-block-paragraph">Wordで作成した文書をコピーすると、NBSPが混入することがあります。Wordでは <code>Ctrl + Shift + Space</code> で意図的にNBSPを挿入できます。知らずに入力されている場合もあるので注意が必要です。</p>



<h3 class="wp-block-heading"><span id="toc6">ChromeやTeamsなどのChromiumアプリからのコピペ</span></h3>



<p class="wp-block-paragraph">近年、業務でよく使われるアプリからのコピペが混入経路として増えています。Chrome・Edge・Teams・Slack・VS Codeはいずれも内部でChromiumベースのレンダリングエンジンを使っています。テキストをコピーするとHTMLもクリップボードに乗るため、Excelに貼り付けたとき、HTML内の <code>&nbsp;</code> がそのままNBSPとして混入します。</p>



<figure class="wp-block-table"><table><thead><tr><th>アプリ</th><th>混入のしやすさ</th><th>補足</th></tr></thead><tbody><tr><td>Chrome / Edge</td><td>高い</td><td>Webページから直接コピーするとHTMLが同伴する</td></tr><tr><td>Microsoft Teams</td><td>高い</td><td>チャットメッセージにNBSPが含まれることが多い</td></tr><tr><td>Slack</td><td>中程度</td><td>環境・バージョンによって差がある</td></tr><tr><td>VS Code</td><td>中程度</td><td>MarkdownやHTMLファイルの内容をコピーした場合</td></tr><tr><td>macOS（Option+Space）</td><td>高い</td><td>macOSの入力ショートカットでNBSPが意図せず入力される</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">コピペの頻度が多いほどNBSPが累積しやすくなります。「どのアプリから貼ったか」を思い出すだけで、混入原因の絞り込みに役立ちます。</p>



<h2 class="wp-block-heading"><span id="toc7">ノーブレークスペースの見分け方</span></h2>



<p class="wp-block-paragraph">NBSPは見た目では普通のスペースと区別できません。「空白があるのに消せない」と感じたら、次の方法で確認してみてください。</p>



<h3 class="wp-block-heading"><span id="toc8">CODE関数で文字コードを確認する</span></h3>



<p class="wp-block-paragraph">セルの先頭文字を調べるには、次の数式を使います。</p>



<pre class="wp-block-code"><code>=CODE(LEFT(A1,1))</code></pre>



<p class="wp-block-paragraph">結果が <strong>160</strong> であればNBSPです。通常の半角スペースなら <strong>32</strong> が返ります。</p>



<p class="wp-block-paragraph">途中に隠れている場合は、<a href="https://mashukabu.com/excel-function-howto-use-len/">LEN関数</a>で文字数を数えてみてください。見た目の文字数とLEN関数の結果がずれていたら、見えない文字が混入しています。</p>



<pre class="wp-block-code"><code>=LEN(A1)</code></pre>



<h3 class="wp-block-heading"><span id="toc9">LEN関数とSUBSTITUTE関数で個数を特定する</span></h3>



<p class="wp-block-paragraph">NBSPが何個含まれているかを数えるには、次の数式が便利です。</p>



<pre class="wp-block-code"><code>=LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(160),&quot;&quot;))</code></pre>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-function-howto-use-substitute/">SUBSTITUTE関数</a>でNBSPを削除した文字列のLENと比較することで、NBSP文字数がわかります。</p>



<h2 class="wp-block-heading"><span id="toc10">条件付き書式でNBSPを含むセルをハイライトする</span></h2>



<p class="wp-block-paragraph">クレンジングする前に、まず「どのセルにNBSPが入っているか」を視覚的に確認したいときに便利な方法です。条件付き書式と組み合わせると、データ全体を見渡しながらNBSPの混入状況を一目で把握できます。</p>



<h3 class="wp-block-heading"><span id="toc11">設定手順</span></h3>



<ol class="wp-block-list"><li>NBSPの有無を確認したいセル範囲を選択する（例: A2:A100）</li><li>[ホーム] タブ → [条件付き書式] → [新しいルール] をクリック</li><li>[数式を使用して、書式設定するセルを決定] を選ぶ</li><li>数式欄に次の式を入力する</li></ol>



<pre class="wp-block-code"><code>=ISNUMBER(SEARCH(CHAR(160),A2))</code></pre>



<ol class="wp-block-list"><li>[書式] ボタンから塗りつぶし色（例: 薄い赤）を選んで [OK] をクリック</li></ol>



<p class="wp-block-paragraph">これで、A列の中でNBSPを含むセルだけが赤く塗られて表示されます。データの行数が多くても、スクロールしながら混入箇所を確認できます。</p>



<h3 class="wp-block-heading"><span id="toc12">複数の見えない空白をまとめてハイライトする</span></h3>



<p class="wp-block-paragraph">NBSPだけでなく、ゼロ幅スペースや全角スペースなど、複数の「見えない空白」を一括で見つけたい場合は、OR関数で条件を組み合わせます。</p>



<pre class="wp-block-code"><code>=OR(ISNUMBER(SEARCH(CHAR(160),A2)),ISNUMBER(SEARCH(UNICHAR(8203),A2)),ISNUMBER(SEARCH(&quot;　&quot;,A2)))</code></pre>



<p class="wp-block-paragraph">NBSP・ゼロ幅スペース・全角スペースのいずれかを含むセルがすべてハイライトされます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>条件付き書式を設定したまま「検索と置換」でNBSPを削除すると、削除されたセルからハイライトが消えていく様子が見えるので、進捗確認にもなります。クレンジングのビフォーアフターを記録に残したいときにも便利です。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc13">作業列に「マーカー」を立てる方法</span></h3>



<p class="wp-block-paragraph">条件付き書式の代わりに作業列を追加して、フラグを立てるやり方もあります。</p>



<pre class="wp-block-code"><code>=IF(ISNUMBER(SEARCH(CHAR(160),A2)),&quot;NBSP有&quot;,&quot;&quot;)</code></pre>



<p class="wp-block-paragraph">該当するセルだけ「NBSP有」と表示されるので、オートフィルターで絞り込めば一覧で確認できます。データを別のシートに整理したい場合は、条件付き書式より作業列のほうが扱いやすいです。</p>



<h2 class="wp-block-heading"><span id="toc14">ノーブレークスペースを関数で削除する方法</span></h2>



<p class="wp-block-paragraph">見分け方がわかったら、実際に削除してみましょう。ここでは用途別に4つの関数パターンを紹介します。</p>



<h3 class="wp-block-heading"><span id="toc15">パターン1: NBSPだけを削除する</span></h3>



<p class="wp-block-paragraph">最もシンプルな方法です。<a href="https://mashukabu.com/excel-function-howto-use-substitute/">SUBSTITUTE関数</a>と<a href="https://mashukabu.com/excel-function-howto-use-char/">CHAR関数</a>を組み合わせます。</p>



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



<p class="wp-block-paragraph">CHAR(160) がNBSPを指定しています。これを空文字 <code>""</code> に置き換えることで削除できます。</p>



<h3 class="wp-block-heading"><span id="toc16">パターン2: NBSPと前後の半角スペースをまとめて削除する</span></h3>



<p class="wp-block-paragraph">外部データには、NBSPと通常のスペースが両方入っていることがよくあります。<a href="https://mashukabu.com/excel-function-howto-use-trim/">TRIM関数</a>も組み合わせると、まとめてきれいにできます。</p>



<pre class="wp-block-code"><code>=TRIM(SUBSTITUTE(A1,CHAR(160),&quot; &quot;))</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>ここでのポイントは、NBSPを <strong>空文字ではなく半角スペースに置換</strong> している点です。NBSPを半角スペースに変換してからTRIM関数で処理すると、前後の空白除去と連続スペースの圧縮が同時に行えます。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc17">パターン3: 制御文字も含めて一括クレンジングする</span></h3>



<p class="wp-block-paragraph">Webデータには改行コードやタブなどの制御文字が混じることもあります。<a href="https://mashukabu.com/excel-function-howto-use-clean/">CLEAN関数</a>を加えると、印刷できない制御文字もまとめて削除できます。</p>



<pre class="wp-block-code"><code>=TRIM(CLEAN(SUBSTITUTE(A1,CHAR(160),&quot; &quot;)))</code></pre>



<p class="wp-block-paragraph">処理の流れはこうなっています。</p>



<ol class="wp-block-list"><li>SUBSTITUTE: NBSPを半角スペースに変換</li><li>CLEAN: 制御文字（文字コード 0〜31）を削除</li><li>TRIM: 前後のスペース削除 + 連続スペースの圧縮</li></ol>



<h3 class="wp-block-heading"><span id="toc18">パターン4: すべてのスペースを削除する</span></h3>



<p class="wp-block-paragraph">全角スペース・半角スペース・NBSPをすべて削除したい場合は、SUBSTITUTE関数をネストします。</p>



<pre class="wp-block-code"><code>=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(CLEAN(A1),CHAR(160),&quot;&quot;),&quot; &quot;,&quot;&quot;),&quot;　&quot;,&quot;&quot;)</code></pre>



<p class="wp-block-paragraph">ちょっと長く見えますが、やっていることはシンプルです。内側から順に「制御文字の削除 → NBSPの削除 → 半角スペースの削除 → 全角スペースの削除」と処理しています。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>すべてのスペースを消してしまうと、姓名間のスペースなど必要な空白まで消えてしまいます。用途に応じてパターン1〜3を使い分けてください。</p></blockquote>



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



<p class="wp-block-paragraph">Excelで遭遇する「消せない空白」はNBSPだけではありません。まとめて整理しておきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>空白の種類</th><th>文字コード</th><th>原因</th><th>対処方法</th></tr></thead><tbody><tr><td>半角スペース</td><td>32</td><td>手入力・システム出力</td><td><a href="https://mashukabu.com/excel-function-howto-use-trim/">TRIM関数</a></td></tr><tr><td>全角スペース</td><td>12288</td><td>日本語入力</td><td><a href="https://mashukabu.com/excel-function-howto-use-substitute/">SUBSTITUTE関数</a>で <code>"　"</code> を置換</td></tr><tr><td>NBSP</td><td>160</td><td>Webコピー・Word貼付</td><td><code>SUBSTITUTE(A1,CHAR(160),"")</code></td></tr><tr><td>タブ文字</td><td>9</td><td>テキストファイル取込</td><td><code>SUBSTITUTE(A1,CHAR(9),"")</code></td></tr><tr><td>改行（LF）</td><td>10</td><td>Alt+Enter・CSV</td><td><code>SUBSTITUTE(A1,CHAR(10),"")</code></td></tr><tr><td>改行（CR）</td><td>13</td><td>Mac系データ</td><td><code>SUBSTITUTE(A1,CHAR(13),"")</code></td></tr><tr><td>制御文字全般</td><td>0〜31</td><td>システム出力</td><td><a href="https://mashukabu.com/excel-function-howto-use-clean/">CLEAN関数</a></td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>「何の文字が入っているかわからない」ときは、まず <code>=CODE(MID(A1,N,1))</code> で1文字ずつ文字コードを確認するのが確実です。Nに位置番号を入れて調べてみてください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc20">ノーブレークスペースをVBAで削除する方法</span></h2>



<p class="wp-block-paragraph">大量のデータを処理する場合は、VBAを使うと効率的です。VBAでの空白削除の基本は<a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBA 文字列の空白を削除する方法まとめ</a>でまとめていますが、ここではNBSPに特化した方法を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc21">Replace関数でNBSPを削除する</span></h3>



<p class="wp-block-paragraph">VBAでは <code>ChrW(160)</code> でNBSPを指定できます。</p>



<pre class="wp-block-code"><code>'--- NBSPを削除する基本コード ---
Dim sBefore As String '変換前の文字列
Dim sAfter As String  '変換後の文字列

sBefore = Range(&quot;A1&quot;).Value
sAfter = Replace(sBefore, ChrW(160), &quot;&quot;)

MsgBox &quot;[&quot; &amp; sBefore &amp; &quot;] → [&quot; &amp; sAfter &amp; &quot;]&quot;</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p><code>ChrW</code> はUnicodeの文字コードに対応した関数です。<code>Chr</code> 関数でも160を指定できますが、環境によっては正しく動作しないことがあります。確実に処理するには <code>ChrW</code> を使ってください。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc22">選択範囲のNBSPを一括削除するマクロ</span></h3>



<p class="wp-block-paragraph">実務で使いやすい、範囲を選択して一括処理するマクロを紹介します。</p>



<pre class="wp-block-code"><code>Sub NBSPを一括削除()

    Dim rng As Range    '処理対象の範囲
    Dim cell As Range   '各セル

    '--- 範囲を選択するダイアログを表示 ---
    Set rng = Application.InputBox( _
        Prompt:=&quot;NBSPを削除する範囲を選択してください。&quot;, _
        Title:=&quot;範囲選択&quot;, _
        Type:=8)

    '--- 各セルのNBSPを削除 ---
    For Each cell In rng
        If Not IsEmpty(cell) Then
            cell.Value = Replace(cell.Value, ChrW(160), &quot;&quot;)
        End If
    Next cell

    MsgBox &quot;処理が完了しました。&quot;

End Sub</code></pre>



<p class="wp-block-paragraph">このマクロを実行すると範囲選択のダイアログが表示されます。対象範囲をドラッグで選択すれば、その中のNBSPをまとめて削除できます。</p>



<h3 class="wp-block-heading"><span id="toc23">すべての空白を一括削除するマクロ</span></h3>



<p class="wp-block-paragraph">NBSPだけでなく、半角・全角スペースやタブ・改行もまとめて削除したい場合は、次のマクロが便利です。</p>



<pre class="wp-block-code"><code>Sub すべての空白を一括削除()

    Dim rng As Range    '処理対象の範囲
    Dim cell As Range   '各セル
    Dim sTemp As String '一時変数

    '--- 範囲を選択するダイアログを表示 ---
    Set rng = Application.InputBox( _
        Prompt:=&quot;空白を削除する範囲を選択してください。&quot;, _
        Title:=&quot;範囲選択&quot;, _
        Type:=8)

    '--- 各セルの空白を削除 ---
    For Each cell In rng
        If Not IsEmpty(cell) Then
            sTemp = cell.Value
            sTemp = Replace(sTemp, ChrW(160), &quot;&quot;) 'NBSP
            sTemp = Replace(sTemp, &quot; &quot;, &quot;&quot;)        '半角スペース
            sTemp = Replace(sTemp, &quot;　&quot;, &quot;&quot;)       '全角スペース
            sTemp = Replace(sTemp, vbCrLf, &quot;&quot;)     '改行(CR+LF)
            sTemp = Replace(sTemp, vbLf, &quot;&quot;)       '改行(LF)
            sTemp = Replace(sTemp, vbTab, &quot;&quot;)      'タブ
            cell.Value = sTemp
        End If
    Next cell

    MsgBox &quot;処理が完了しました。&quot;

End Sub</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>姓名間のスペースなど、残したい空白がある場合はNBSPの行（<code>ChrW(160)</code>）だけ残して他の行をコメントアウトしてください。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc24">VBEの起動方法</span></h3>



<p class="wp-block-paragraph">マクロの実行にはVBE（Visual Basic Editor）を開く必要があります。</p>



<ol class="wp-block-list"><li><code>Alt + F11</code> でVBEを起動する</li><li>リボンから起動する場合: [開発] タブ → [Visual Basic] をクリック</li><li>[開発] タブが表示されていない場合: [ファイル] → [オプション] → [リボンのユーザー設定] → [開発] にチェックを入れて [OK]</li><li>VBEが開いたら [挿入] → [標準モジュール] でモジュールを追加し、コードを貼り付ける</li></ol>



<h3 class="wp-block-heading"><span id="toc25">WorksheetFunction.TrimではNBSPは削除できない</span></h3>



<p class="wp-block-paragraph">VBAで空白を整形しようとして <code>WorksheetFunction.Trim</code> を試す方がいますが、これではNBSPは削除できません。<code>WorksheetFunction.Trim</code> はExcelのTRIM関数と同じ動作で、半角スペース（コード32）の除去と連続スペースの圧縮のみを行います。NBSPには無効です。</p>



<pre class="wp-block-code"><code>' NG: これではNBSPは消えない
cell.Value = Application.WorksheetFunction.Trim(cell.Value)

' OK: ChrW(160)でNBSPを明示的に指定する
cell.Value = Replace(cell.Value, ChrW(160), &quot;&quot;)</code></pre>



<p class="wp-block-paragraph">VBEの通常の <code>Trim</code> 関数も同様で、NBSPは削除されません。VBAでNBSPを消すには、必ず <code>Replace(文字列, ChrW(160), "")</code> を使ってください。WorksheetFunction.Trim と VBA の Trim 関数の違いは<a href="https://mashukabu.com/vba-worksheetfunction-trim/">VBA WorksheetFunction.Trim の使い方</a>で詳しく解説しています。</p>



<h2 class="wp-block-heading"><span id="toc26">VLOOKUPやCOUNTIFで不一致が起きたときの対処法</span></h2>



<p class="wp-block-paragraph">NBSPが原因で最もよく困るのが、VLOOKUPやCOUNTIFの不一致です。検索値にNBSPが混入していると、見た目は同じ文字列でも「別の値」として判定されてしまいます。</p>



<h3 class="wp-block-heading"><span id="toc27">VLOOKUPで一致しないときの確認手順</span></h3>



<p class="wp-block-paragraph">VLOOKUPで <code>#N/A</code> エラーが出たら、まず検索値と検索範囲の文字コードを比べてみてください。</p>



<pre class="wp-block-code"><code>=CODE(LEFT(A1,1))
=CODE(LEFT(B1,1))</code></pre>



<p class="wp-block-paragraph">片方が160、もう片方が32であれば、NBSPが原因です。次の数式でNBSPを除去してからVLOOKUPに渡せば解決します。</p>



<pre class="wp-block-code"><code>=VLOOKUP(TRIM(SUBSTITUTE(A1,CHAR(160),&quot; &quot;)),B:C,2,FALSE)</code></pre>



<h3 class="wp-block-heading"><span id="toc28">COUNTIFやSUMIFで集計がずれるとき</span></h3>



<p class="wp-block-paragraph">COUNTIFやSUMIF（条件に合うセルを数える・合計する関数）でも同じ問題が起きます。条件値にNBSPが含まれていると、一致するはずのセルがカウントされません。</p>



<p class="wp-block-paragraph">対処法は2つあります。</p>



<ol class="wp-block-list"><li><strong>事前クレンジング</strong>: 前述のパターン2の数式で列全体のNBSPを除去してから集計する</li><li><strong>作業列を追加</strong>: <code>=TRIM(SUBSTITUTE(A1,CHAR(160)," "))</code> の列を作り、その列を集計対象にする</li></ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>「数式は合っているのに結果がおかしい」と感じたら、NBSPを疑ってみてください。特にWebからコピーしたデータや外部システムのCSVデータは要注意です。</p></blockquote>



<p class="wp-block-paragraph">VBAで空白を一括処理する方法は、<a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBA 文字列の空白を削除する方法まとめ</a>で詳しく解説しています。</p>



<h3 class="wp-block-heading"><span id="toc29">XLOOKUPやXMATCHでNBSPが原因で#N/Aになるとき</span></h3>



<p class="wp-block-paragraph">Microsoft 365を使っている場合、VLOOKUPの代わりに<a href="https://mashukabu.com/excel-function-howto-use-xlookup/">XLOOKUP関数</a>を使っているケースも多いでしょう。XLOOKUPでもNBSPが混入した検索値は「別の文字列」として扱われるため、同じく <code>#N/A</code> になります。</p>



<p class="wp-block-paragraph">対処法はVLOOKUPと同じで、検索値をSUBSTITUTEで包みます。</p>



<pre class="wp-block-code"><code>=XLOOKUP(TRIM(SUBSTITUTE(A2,CHAR(160),&quot; &quot;)),B:B,C:C,&quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">XMATCHも同様です。検索値だけでなく、検索範囲にもNBSPが混入している場合は両方をクレンジングする必要があります。</p>



<pre class="wp-block-code"><code>=XMATCH(TRIM(SUBSTITUTE(A2,CHAR(160),&quot; &quot;)),TRIM(SUBSTITUTE(B:B,CHAR(160),&quot; &quot;)))</code></pre>



<h3 class="wp-block-heading"><span id="toc30">EXACT関数で&#8221;見た目は同じなのに不一致&#8221;の原因を特定する</span></h3>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-function-howto-use-exact/">EXACT関数</a>はアルファベットの大文字・小文字まで区別して2つのセルを比較する関数です。NBSPの診断ツールとしても使えます。</p>



<pre class="wp-block-code"><code>=EXACT(A1,B1)</code></pre>



<p class="wp-block-paragraph">目視では同じ文字列なのにEXACTが <code>FALSE</code> を返す場合、NBSPか制御文字が混入しています。VLOOKUPが一致しない原因を追うときは、まずEXACTで「本当に同じ文字列か」を確認してください。確認できたら、CODE関数で文字コードを調べると効率よく特定できます。</p>



<p class="wp-block-paragraph">クレンジング後にEXACTで <code>TRUE</code> になったことを確認すれば、削除が完了したかのビフォーアフター検証にも使えます。</p>



<h2 class="wp-block-heading"><span id="toc31">CSV出力時の文字化け対策</span></h2>



<p class="wp-block-paragraph">NBSPが含まれたセルをCSVで保存すると、文字コード 160 が正しく変換されず「?」に化けることがあります。</p>



<p class="wp-block-paragraph">CSVで出力する前にNBSPを削除しておくのが確実な対策です。前述の関数パターンやVBAマクロで事前にクレンジングしてから保存してください。</p>



<h2 class="wp-block-heading"><span id="toc32">検索と置換（Ctrl+H）でNBSPを一括削除する</span></h2>



<p class="wp-block-paragraph">関数や作業列を作らずに、その場でNBSPを消したいときは、Excelの「検索と置換」が便利です。<code>Ctrl + H</code> で置換ダイアログを開けば、選択範囲やシート全体のNBSPをまとめて削除できます。</p>



<p class="wp-block-paragraph">数式を残さず元のセルを直接きれいにできるので、「とにかく今すぐ消したい」というときの即効性ある方法です。</p>



<h3 class="wp-block-heading"><span id="toc33">テンキーがある場合</span></h3>



<p class="wp-block-paragraph">テンキー付きのキーボードなら、検索欄に直接NBSPを入力できます。</p>



<ol class="wp-block-list"><li><code>Ctrl + H</code> で「検索と置換」を開く</li><li>「検索する文字列」の欄にカーソルを置く</li><li><code>Alt</code> キーを押しながら、テンキーで <code>0160</code> と入力する</li><li>「置換後の文字列」は空欄のままにする</li><li>「すべて置換」をクリック</li></ol>



<p class="wp-block-paragraph"><code>Alt</code> + <code>0160</code> は、文字コード160のNBSPを直接入力するショートカットです。見た目には何も入力されていないように見えますが、検索欄にはきちんとNBSPが入っています。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>このショートカットは必ずテンキー（キーボード右側の数字キー）を使ってください。キーボード上部の数字キーでは正しく入力できません。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc34">テンキーがない場合</span></h3>



<p class="wp-block-paragraph">ノートパソコンなどテンキーがない場合は、削除したいNBSPをセルからコピーして使います。</p>



<ol class="wp-block-list"><li>NBSPが含まれているセルをダブルクリックして編集状態にする</li><li>NBSPの部分だけをドラッグで選択して <code>Ctrl + C</code> でコピーする</li><li><code>Ctrl + H</code> で「検索と置換」を開く</li><li>「検索する文字列」の欄に <code>Ctrl + V</code> で貼り付ける</li><li>「置換後の文字列」は空欄のままにする</li><li>「すべて置換」をクリック</li></ol>



<p class="wp-block-paragraph">実際のNBSP文字をコピーして使うので、文字コードを覚えていなくても確実に処理できます。NBSPと半角スペースが区別しにくくて不安なときも、この方法なら間違いがありません。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>NBSPを残しつつ前後の余分なスペースだけ整えたい場合は、置換後の文字列に半角スペースを1つ入れて「すべて置換」してください。連続スペースの圧縮は、そのあと<a href="https://mashukabu.com/excel-function-howto-use-trim/">TRIM関数</a>で仕上げると確実です。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc35">Mac版Excelでの注意点</span></h2>



<p class="wp-block-paragraph">Mac版Excelを使っている方は、Windowsとは操作が一部異なります。前述のテンキーを使った <code>Alt + 0160</code> の入力ショートカットは、Mac版Excelでは使えません。</p>



<h3 class="wp-block-heading"><span id="toc36">Macでの代替手段</span></h3>



<p class="wp-block-paragraph">Mac版Excelでは、次のいずれかの方法でNBSPを「検索と置換」で扱えます。</p>



<ol class="wp-block-list"><li><strong>コピペ法を使う</strong>: NBSPを含むセルから該当部分をコピーして、検索ダイアログに貼り付ける（前述の「テンキーがない場合」と同じ手順）</li><li><strong>数式バーで <code>=CHAR(160)</code> を計算して値貼り付け</strong>: 別のセルに <code>=CHAR(160)</code> を入力し、結果を値としてコピーして検索欄に貼り付ける</li><li><strong>関数またはVBAで処理する</strong>: <code>=SUBSTITUTE(A1,CHAR(160),"")</code> を使うか、Mac版でもVBAは動くので前述のマクロをそのまま実行する</li></ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>Mac版Excelの「検索と置換」を開くショートカットは <code>Cmd + H</code> です（Windowsの <code>Ctrl + H</code> 相当）。ダイアログを開いたあとの操作はWindowsとほぼ同じですが、NBSPの直接入力ショートカットは使えない点だけ注意してください。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc37">Mac特有のNBSP混入経路</span></h3>



<p class="wp-block-paragraph">macOSでは、<code>Option + Space</code> でNBSPが入力できます。文章の途中で「改行してほしくない箇所」に意図的に入れているユーザーもいるので、Macで作成された文書をコピペするとNBSPが混入しやすい傾向があります。Pages・Keynote・Mailなどのアプリ間コピペでも同様です。</p>



<h2 class="wp-block-heading"><span id="toc38">Power QueryでNBSPを削除する方法</span></h2>



<p class="wp-block-paragraph">外部システムのCSVやデータベースから定期的にデータを取り込む方には、Power Queryでの処理がおすすめです。一度設定しておけば、次回からはデータを更新するだけで自動的にNBSPが削除されます。</p>



<p class="wp-block-paragraph">毎回手作業でクレンジングする手間がなくなるので、繰り返し取り込むデータには特に効果的です。</p>



<h3 class="wp-block-heading"><span id="toc39">GUI操作で削除する手順</span></h3>



<p class="wp-block-paragraph">Power Queryエディター上でメニューを操作するだけで、NBSPを削除できます。</p>



<ol class="wp-block-list"><li>NBSPを削除したい列を選択する</li><li>リボンの [変換] タブ → [値の置換] をクリック</li><li>[詳細オプション] を展開し、[特殊文字を使用して置換] → [特殊文字を挿入] → [改行なしスペース] を選ぶ</li><li>「検索する値」に <code>#(00A0)</code> が自動で挿入される</li><li>「置換後の値」は空欄のまま（削除する場合）にして [OK] をクリック</li></ol>



<p class="wp-block-paragraph"><code>#(00A0)</code> は、Power Queryでの文字コード160（16進数で00A0）の表記です。[特殊文字を挿入] から選べば、この記述を手で打たなくても自動で入力されます。</p>



<h3 class="wp-block-heading"><span id="toc40">M言語のコードで削除する</span></h3>



<p class="wp-block-paragraph">数式バー（詳細エディター）に直接書く場合は、M言語の <code>Text.Replace</code> を使います。</p>



<pre class="wp-block-code"><code>= Text.Replace([列名], Character.FromNumber(160), &quot;&quot;)</code></pre>



<p class="wp-block-paragraph"><code>Character.FromNumber(160)</code> がNBSPを指定しています。これを空文字 <code>""</code> に置き換えることで削除できます。NBSPと前後のスペースをまとめて整えたい場合は、<code>Text.Trim</code> と組み合わせます。</p>



<pre class="wp-block-code"><code>= Text.Trim(Text.Replace([列名], Character.FromNumber(160), &quot; &quot;))</code></pre>



<p class="wp-block-paragraph">NBSPをいったん半角スペースに変換してから <code>Text.Trim</code> で前後の空白を除去する流れです。Excelの関数で言うと <code>=TRIM(SUBSTITUTE(A1,CHAR(160)," "))</code> と同じ考え方です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>Power Queryの <code>Text.Trim</code> は、半角スペースは除去できますがNBSPは除去できません。これはExcelのTRIM関数と同じ落とし穴です。NBSPを消すには、必ず <code>Character.FromNumber(160)</code> を指定した <code>Text.Replace</code> を先にかけてください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc41">GoogleスプレッドシートでNBSPを削除する方法</span></h2>



<p class="wp-block-paragraph">GoogleスプレッドシートでもNBSPに悩まされることがありますが、対処法はExcelとほとんど同じです。</p>



<pre class="wp-block-code"><code>=SUBSTITUTE(A2, CHAR(160), &quot;&quot;)</code></pre>



<p class="wp-block-paragraph">Excelとまったく同じ構文で動作します。<code>CHAR(160)</code> でNBSPを指定し、空文字に置き換えるだけです。Excelで使っていた数式をそのままコピーして使えるので、スプレッドシートに移行しても覚え直す必要はありません。</p>



<p class="wp-block-paragraph">注意点もExcelと共通で、TRIM関数だけではNBSPは削除できません。スプレッドシートでも「TRIMで消えない空白」に出くわしたら、まず <code>CHAR(160)</code> を疑ってみてください。</p>



<h2 class="wp-block-heading"><span id="toc42">ピボットテーブルでNBSPが引き起こす集計エラーと対策</span></h2>



<p class="wp-block-paragraph">NBSPの影響はVLOOKUPだけにとどまりません。ピボットテーブルでも深刻な問題を引き起こします。</p>



<h3 class="wp-block-heading"><span id="toc43">起きやすい3つの症状</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>症状</th><th>原因</th><th>見分け方</th></tr></thead><tbody><tr><td>同じ値なのに別々の行に集計される</td><td>NBSPありとなしが「別の文字列」として扱われる</td><td>ピボットの行ラベルに似た値が2行並ぶ</td></tr><tr><td>数値フィールドで「グループ化」できない</td><td>NBSPが混入したセルが「文字列」と判定される</td><td>「選択対象をグループ化することはできません」エラー</td></tr><tr><td>件数が合わない</td><td>見た目は同じ値なのに個別に集計される</td><td>COUNT/SUMの合計が元データと一致しない</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc44">よくある発生パターン</span></h3>



<p class="wp-block-paragraph">Webからコピーした都道府県名・商品名・担当者名にNBSPが入っていると、ピボットテーブルは「東京」と「東京（NBSP付き）」を別々の項目として集計します。行ラベルに「東京」が2行並び、それぞれに異なる集計値が表示される状態になります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>WARNING</strong></p><p>ピボットテーブルを更新しても直りません。元データのNBSPを除去してからテーブルを再作成（または更新）する必要があります。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc45">対策：ピボット作成前にクレンジングする</span></h3>



<p class="wp-block-paragraph">ピボットテーブルの元データ列にクレンジング済みの作業列を追加し、その列をピボットの行・列・フィルターフィールドに使います。</p>



<p class="wp-block-paragraph"><strong>手順</strong></p>



<ol class="wp-block-list"><li>元データの隣に作業列（例: D列）を追加する</li><li>作業列に次の数式を入力する</li></ol>



<pre class="wp-block-code"><code>=TRIM(SUBSTITUTE(A2,CHAR(160),&quot; &quot;))</code></pre>



<ol class="wp-block-list"><li>作業列全体を<strong>値として貼り付け</strong>（<code>Ctrl+C</code> → <code>Alt+E+S+V+Enter</code>）して数式を固定する</li><li>ピボットテーブルの参照範囲を元の列から作業列に変更して再作成する</li></ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>定期的にデータを更新している場合は、前述の「Power QueryでNBSPを削除する方法」を使うと、更新のたびに自動クレンジングが走るため作業列が不要になります。ピボットテーブルの元データソースをPower Queryの出力テーブルに変更しておくのがおすすめです。</p></blockquote>



<p class="wp-block-paragraph">ピボットテーブルの基本操作は<a href="https://mashukabu.com/excel-pivot-table-guide/">Excelピボットテーブルの使い方</a>で解説しています。</p>



<h2 class="wp-block-heading"><span id="toc46">Excel 365のREGEXREPLACE関数でNBSPを削除する</span></h2>



<p class="wp-block-paragraph">Microsoft 365では正規表現関数（REGEXREPLACE・REGEXTEST・REGEXEXTRACT）が追加されました。これを使うと、NBSPを含む複数種類の空白文字を1つの数式でまとめて削除できます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>REGEXREPLACE関数はMicrosoft 365（サブスクリプション版）専用です。Excel 2021・2019などの永続ライセンス版では使用できません。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc47">NBSPを正規表現で削除する数式</span></h3>



<pre class="wp-block-code"><code>=REGEXREPLACE(A1,&quot;x{00A0}&quot;,&quot;&quot;)</code></pre>



<p class="wp-block-paragraph"><code>x{00A0}</code> はNBSPのUnicodeコードポイント（U+00A0）を正規表現で指定する書き方です。これを空文字 <code>""</code> に置換することでNBSPを削除できます。</p>



<h3 class="wp-block-heading"><span id="toc48">NBSPと半角スペースをまとめて整形する</span></h3>



<p class="wp-block-paragraph">通常の半角スペースも一緒に処理する場合は、文字クラス <code>[...]</code> で両方を指定します。</p>



<pre class="wp-block-code"><code>=TRIM(REGEXREPLACE(A1,&quot;[x{00A0} ]+&quot;,&quot; &quot;))</code></pre>



<p class="wp-block-paragraph">NBSPと半角スペースの「1個以上の連続」をまとめて半角スペース1つに置換し、TRIM関数で前後を整えます。</p>



<h3 class="wp-block-heading"><span id="toc49">SUBSTITUTE式との使い分け</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>方法</th><th>対応バージョン</th><th>書きやすさ</th><th>柔軟性</th></tr></thead><tbody><tr><td><code>SUBSTITUTE(A1,CHAR(160),"")</code></td><td>すべてのExcel</td><td>高い</td><td>1種類ずつ指定</td></tr><tr><td><code>REGEXREPLACE(A1,"x{00A0}","")</code></td><td>Microsoft 365のみ</td><td>やや難しい</td><td>複数パターンを1式で処理可</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">日常的な用途ではSUBSTITUTE式で十分です。複数種類の特殊文字を一度に処理したい場合や、正規表現に慣れている場合はREGEXREPLACEが有効です。</p>



<p class="wp-block-paragraph">REGEXREPLACE関数のその他の使い方は<a href="https://mashukabu.com/excel-function-howto-use-regexreplace/">REGEXREPLACE関数の使い方</a>で解説しています。</p>



<h2 class="wp-block-heading"><span id="toc50">ノーブレークスペース以外の「見えない空白」の見分けと削除</span></h2>



<p class="wp-block-paragraph">NBSPがいちばん有名ですが、Webや海外システムから取り込んだデータには <strong>NBSP以外にも見えない空白文字</strong> が混入することがあります。「CHAR(160)を消しても、まだVLOOKUPが一致しない」というときは、これらを疑ってみてください。</p>



<h3 class="wp-block-heading"><span id="toc51">代表的な見えない空白文字の一覧</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>文字名</th><th>Unicode</th><th>10進コード</th><th>主な出現箇所</th></tr></thead><tbody><tr><td>ノーブレークスペース（NBSP）</td><td>U+00A0</td><td>160</td><td>Webコピー・Word貼付</td></tr><tr><td>ゼロ幅スペース</td><td>U+200B</td><td>8203</td><td>Web HTML・PDF抽出</td></tr><tr><td>ゼロ幅非接合子（ZWNJ）</td><td>U+200C</td><td>8204</td><td>アラビア語・ペルシャ語データ</td></tr><tr><td>狭い改行なしスペース</td><td>U+202F</td><td>8239</td><td>フランス語ロケールの数値区切り</td></tr><tr><td>全角スペース</td><td>U+3000</td><td>12288</td><td>日本語入力</td></tr><tr><td>BOM（バイトオーダーマーク）</td><td>U+FEFF</td><td>65279</td><td>UTF-8 CSVの先頭セル</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc52">UNICHAR関数で指定して削除する</span></h3>



<p class="wp-block-paragraph">文字コード255までしか扱えないCHAR関数では、ゼロ幅スペース（コード8203）などは指定できません。Excel 2013以降は <strong>UNICHAR関数</strong> を使えば、Unicode全範囲を指定できます。</p>



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



<p class="wp-block-paragraph">複数種類をまとめて削除したい場合は、SUBSTITUTE関数をネストします。</p>



<pre class="wp-block-code"><code>=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,CHAR(160),&quot;&quot;),UNICHAR(8203),&quot;&quot;),UNICHAR(65279),&quot;&quot;)</code></pre>



<p class="wp-block-paragraph">内側から「NBSP削除 → ゼロ幅スペース削除 → BOM削除」と順番に処理しています。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>「何の文字が入っているかさっぱりわからない」というときは、<code>=UNICODE(MID(A1,N,1))</code> を使うとUnicode値で確認できます。CODE関数は255までしか返せませんが、UNICODE関数は8203などの大きなコードも正しく取得できます。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc53">Microsoft 365なら正規表現で一括処理する</span></h3>



<p class="wp-block-paragraph">Microsoft 365の<a href="https://mashukabu.com/excel-function-howto-use-regexreplace/">REGEXREPLACE関数</a>なら、複数種類の見えない空白を1つの数式で削除できます。</p>



<pre class="wp-block-code"><code>=REGEXREPLACE(A1,&quot;[x{00A0}x{200B}x{200C}x{202F}x{FEFF}]&quot;,&quot;&quot;)</code></pre>



<p class="wp-block-paragraph">文字クラス <code>[...]</code> の中にUnicodeコードポイントを並べることで、該当する文字すべてを空文字に置換します。複数システムからデータを集約する業務では、この一行で大半の見えない空白を処理できます。</p>



<h2 class="wp-block-heading"><span id="toc54">よくある質問（FAQ）</span></h2>



<h2 class="wp-block-heading"><span id="toc55">NBSPを最初から混入させない3つの予防策</span></h2>



<p class="wp-block-paragraph">削除方法を知っておくことも大事ですが、そもそも混入させない習慣をつけると整形作業の手間が減ります。</p>



<h3 class="wp-block-heading"><span id="toc56">予防策1: テキストエディタ経由でペーストする</span></h3>



<p class="wp-block-paragraph">クリップボードにHTMLが乗っている状態のままExcelに貼ると、NBSPが一緒に入ります。ChromeやTeamsからコピーした内容は、一度メモ帳（Windows）やテキストエディット（Macのプレーンテキストモード）に貼り付けてから再コピーしてください。HTML情報が取り除かれて、NBSPのない純粋なテキストになります。</p>



<h3 class="wp-block-heading"><span id="toc57">予防策2: 値のみ貼り付け（Ctrl+Shift+V / Alt+E+S+V）を習慣にする</span></h3>



<p class="wp-block-paragraph">Excelのショートカット <code>Alt+E+S+V+Enter</code>（「形式を選択して貼り付け」→「値」）でペーストすると、書式やHTMLを除いたテキストだけが入ります。Ctrl+Vの代わりにこの操作を習慣にするだけで、Webや他アプリからの混入をかなり防げます。Googleスプレッドシートでは <code>Ctrl+Shift+V</code> が値のみ貼り付けのショートカットです。</p>



<h3 class="wp-block-heading"><span id="toc58">予防策3: Power Queryを取り込み窓口にする</span></h3>



<p class="wp-block-paragraph">定期的にCSVや外部データを取り込む業務なら、Power Queryを入口にして自動クレンジングを組み込むのが根本的な解決策です。一度設定しておけば、毎回手動で整形する必要がなくなります。具体的な設定方法は前述の「Power QueryでNBSPを削除する方法」を参照してください。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>入力規則（データの入力規則）ではNBSPの混入を防ぐことはできません。入力規則はキーボードからの直接入力を制限する機能であり、貼り付け操作には無力です。予防策は「貼り付け方法の工夫」で対応してください。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc59">Q. TeamsやSlackからコピペするとNBSPが入りますか？</span></h3>



<p class="wp-block-paragraph">入りやすい傾向があります。TeamsとSlackはChromiumベースのレンダリングを使っており、チャットのテキストをコピーするとHTMLが同伴することがあります。確認するには <code>=CODE(LEFT(A1,1))</code> で文字コードを見てください。160が出ればNBSPが混入しています。回避するには「テキストエディタ経由でペースト」か「値のみ貼り付け（Alt+E+S+V）」を使うのが確実です。</p>



<h3 class="wp-block-heading"><span id="toc60">Q. EXACT関数でFALSEなのに目視では同じ文字列です。なぜですか？</span></h3>



<p class="wp-block-paragraph">NBSPか制御文字が混入している可能性が高いです。<code>=CODE(MID(A1,N,1))</code> でN番目の文字のコードを確認し、160や制御文字のコード（0〜31）が出たら特殊文字が隠れています。<code>=SUBSTITUTE(A1,CHAR(160),"")</code> で削除してから再度EXACTで確認してください。</p>



<h3 class="wp-block-heading"><span id="toc61">Q. XLOOKUPでも#N/Aが出ます。VLOOKUPと同じ対処法ですか？</span></h3>



<p class="wp-block-paragraph">はい、同じです。XLOOKUP の検索値を <code>TRIM(SUBSTITUTE(A2,CHAR(160)," "))</code> で包んでください。<code>=XLOOKUP(TRIM(SUBSTITUTE(A2,CHAR(160)," ")),B:B,C:C,"該当なし")</code> のように記述します。XMATCHも同様に検索値のクレンジングが必要です。</p>



<h3 class="wp-block-heading"><span id="toc62">Q. Ctrl+Vで貼り付けるたびにNBSPが入ります。防ぐ方法はありますか？</span></h3>



<p class="wp-block-paragraph">「値のみ貼り付け」（<code>Alt+E+S+V+Enter</code>）をCtrl+Vの代わりに使う習慣が最も手軽な対策です。または、貼り付け前にメモ帳を経由してHTMLを除去する方法もあります。定期的に取り込むデータであれば、Power Queryをデータ入口にして自動クレンジングを設定しておくと根本的に解決できます。</p>



<h3 class="wp-block-heading"><span id="toc63">Q. CODE関数で160と出ました。これは必ずNBSPですか？</span></h3>



<p class="wp-block-paragraph">はい、文字コード160はNBSPです。確実に削除するには <code>=SUBSTITUTE(A1,CHAR(160),"")</code> を使ってください。160以外の文字コードが出た場合は、前述の「空白の種類と対処関数の早見表」を参照してください。</p>



<h3 class="wp-block-heading"><span id="toc64">Q. SUBSTITUTE+CHAR(160)を入れたのに、VLOOKUPの不一致が直りません。</span></h3>



<p class="wp-block-paragraph">NBSP以外にも見えない文字が混入している可能性があります。次の組み合わせ式で、NBSPと制御文字を一括除去してください。</p>



<pre class="wp-block-code"><code>=TRIM(CLEAN(SUBSTITUTE(A1,CHAR(160),&quot; &quot;)))</code></pre>



<p class="wp-block-paragraph">それでも解決しない場合は、<code>=CODE(MID(A1,N,1))</code> で各文字の文字コードを1文字ずつ調べ、想定外の値がないか確認してください。</p>



<h3 class="wp-block-heading"><span id="toc65">Q. スマートフォンのメモアプリからコピーするとNBSPが入りますか？</span></h3>



<p class="wp-block-paragraph">アプリによって異なりますが、iOSのメモ帳・Slackなど一部のアプリはNBSP（文字コード160）を使って単語間の折り返しを制御しています。「TRIMで消えない」と感じたら、<code>=CODE(LEFT(A1,1))</code> で文字コードを確認してみてください。</p>



<h3 class="wp-block-heading"><span id="toc66">Q. Power QueryのText.TrimでNBSPも消えますか？</span></h3>



<p class="wp-block-paragraph">消えません。Power QueryのText.TrimはExcelのTRIM関数と同様に半角スペース（コード32）の前後除去のみ対応しており、NBSPには無効です。前述の「Power QueryでNBSPを削除する方法」に記載のText.Replaceを先にかけてください。</p>



<h3 class="wp-block-heading"><span id="toc67">Q. 「検索と置換」で削除したのに、まだ空白があります。</span></h3>



<p class="wp-block-paragraph">複数種類の空白が混在している可能性があります。全角スペース（コード12288）やタブ（コード9）が残っている場合は、それぞれ別途置換が必要です。一度に全種類を処理したい場合は、前述の「すべての空白を一括削除するマクロ」を使うと確実です。</p>



<h3 class="wp-block-heading"><span id="toc68">Q. NBSP以外にも「見えない空白」はありますか？</span></h3>



<p class="wp-block-paragraph">はい、あります。代表的なのはゼロ幅スペース（Unicode U+200B、コード8203）で、Webからのコピーで混入することが多いです。CHAR関数は255までしか対応しないため、UNICHAR関数を使って <code>=SUBSTITUTE(A1,UNICHAR(8203),"")</code> で削除します。詳しくは「ノーブレークスペース以外の『見えない空白』の見分けと削除」の章を参照してください。</p>



<h3 class="wp-block-heading"><span id="toc69">Q. Mac版ExcelでもAlt+0160は使えますか？</span></h3>



<p class="wp-block-paragraph">使えません。Mac版Excelにはテンキーによる文字コード直接入力のショートカットがないため、「コピペ法」か「関数による削除」を使ってください。詳しくは「Mac版Excelでの注意点」の章を参照してください。</p>



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



<p class="wp-block-paragraph">TrimやReplaceで消せない空白の正体は、文字コード 160 のノーブレークスペース（NBSP）です。</p>



<ul class="wp-block-list"><li>NBSPはWebコピーや外部システム連携で混入しやすい</li><li>見た目では普通のスペースと区別できない</li><li><code>=CODE(LEFT(A1,1))</code> で文字コードを確認すれば判別できる</li><li>関数では <code>=SUBSTITUTE(A1,CHAR(160),"")</code> で削除できる</li><li>VBAでは <code>Replace(文字列, ChrW(160), "")</code> で削除できる</li><li>TRIM・CLEAN関数と組み合わせると一括クレンジングに便利</li></ul>



<p class="wp-block-paragraph">外部からデータを取り込む機会が多い方は、「CHAR(160)」というキーワードを覚えておくと安心です。ぜひ活用してみてください。</p>



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



<ul class="wp-block-list"><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/excel-function-howto-use-clean/">CLEAN関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-char/">CHAR関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-len/">LEN関数の使い方</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-trim/">VBA Trimで前後の空白を削除する方法</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">VBA LTrimで先頭の空白を削除する方法</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-rtrim/">VBA RTrimで末尾の空白を削除する方法</a></li><li><a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBA 文字列の空白を削除する方法まとめ</a></li></ul>



<h3 class="wp-block-heading"><span id="toc72">関数一覧</span></h3>



<p class="wp-block-paragraph">Excel関数の一覧は下記の記事で確認できます。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-list-by-function/">Excel関数 機能別一覧</a></li></ul>



<p class="wp-block-paragraph">エラー値が表示される場合は、下記の記事も参考にしてみてください。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-error-value-list/">Excel関数のエラー値一覧</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/about-nbsp/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-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 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】LTrim関数の使い方｜先頭の空白を削除する方法</title>
		<link>https://mashukabu.com/excel-vba-howto-use-ltrim/</link>
					<comments>https://mashukabu.com/excel-vba-howto-use-ltrim/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 05 Mar 2022 08:49:40 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[LTrim]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[データクレンジング]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[文字列操作]]></category>
		<category><![CDATA[空白削除]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=1295</guid>

					<description><![CDATA[VBAのLTrim関数で先頭の空白（半角スペース）を削除する方法を解説。基本構文からFor Eachでのセル一括クレンジング、固定長データのパディング除去まで、コピペで動くコードで紹介。RTrimとの違いや全角スペース対応のReplace併用コードも。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">手入力やCSVインポートで取り込んだデータに、先頭の空白が紛れ込んでいた経験はありませんか？</p>



<p class="wp-block-paragraph">見た目は同じなのに、VLOOKUPで「一致なし」が返ってくる。調べてみると、セルの先頭に半角スペースが入っていた――こんなトラブルは意外と多いものです。</p>



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



<p class="wp-block-paragraph">ExcelのVBAには <strong>LTrim関数</strong> という便利なツールがあります。たった1行のコードで、先頭の空白をまとめてクレンジングできます。この記事では、基本的な使い方から業務で使える実践コードまで順を追って解説していきます。</p>



<p class="wp-block-paragraph">空白削除の全体像を先に知りたい方は、<a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBA空白削除まとめ｜Trim・LTrim・RTrim・Replaceの使い分け方</a>をご覧ください。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">VBA LTrimとは？</a><ol><li><a href="#toc2" tabindex="0">LTrim・RTrim・Trimの違い</a></li><li><a href="#toc3" tabindex="0">削除できない空白に注意</a></li></ol></li><li><a href="#toc4" tabindex="0">VBEの起動とコードの書き方</a><ol><li><a href="#toc5" tabindex="0">VBE（Visual Basic Editor）の開き方</a></li><li><a href="#toc6" tabindex="0">標準モジュールの挿入</a></li></ol></li><li><a href="#toc7" tabindex="0">基本コード（コピペで動く）</a></li><li><a href="#toc8" tabindex="0">コードの仕組みを理解する</a><ol><li><a href="#toc9" tabindex="0">Strings.LTrimとLTrimの違い</a></li><li><a href="#toc10" tabindex="0">空白がない場合の挙動</a></li><li><a href="#toc11" tabindex="0">対応する空白の種類</a></li></ol></li><li><a href="#toc12" tabindex="0">実践コード（業務に使えるバージョン）</a><ol><li><a href="#toc13" tabindex="0">シートのセルを一括クレンジングする</a></li><li><a href="#toc14" tabindex="0">CSVインポート後の先頭空白を除去する</a></li><li><a href="#toc15" tabindex="0">固定長データの先頭パディングを除去する</a></li><li><a href="#toc16" tabindex="0">LTrim+Replaceで全角スペースも対応する</a></li></ol></li><li><a href="#toc17" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc18" tabindex="0">型の不一致を防ぐ</a></li><li><a href="#toc19" tabindex="0">変数宣言の漏れを防ぐ</a></li><li><a href="#toc20" tabindex="0">マクロ無効・.xlsm保存の注意</a></li></ol></li><li><a href="#toc21" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBA LTrimとは？</span></h2>



<p class="wp-block-paragraph">LTrimは、文字列の <strong>先頭（左側）にある半角スペースだけを削除する</strong> VBA関数です。「Left 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">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>LTrim</strong></td><td>先頭のみ</td><td>先頭空白だけ除去したいとき</td></tr><tr><td><strong><a href="https://mashukabu.com/excel-vba-howto-use-rtrim/">RTrim</a></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">なお、VBAのTrimはワークシート関数の <a href="https://mashukabu.com/excel-function-howto-use-trim/">TRIM関数</a> とは動作が異なります。ワークシートのTRIMは文字列内部の連続スペースも1つに圧縮しますが、VBAのTrimは前後の空白を削除するだけです。内部の空白には手をつけません。</p>



<p class="wp-block-paragraph">迷ったらTrimを選べば間違いありません。「先頭だけ消したい」という明確な理由があるときにLTrimを使い分けてみてください。</p>



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



<p class="wp-block-paragraph">LTrimが削除できるのは <strong>半角スペース（Chr(32)）のみ</strong> です。</p>



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



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



<p class="wp-block-paragraph">一部のサイトで「全角スペースも削除される」という情報がありますが、これは誤りです。全角スペースはLTrimの対象外なので注意してください。</p>



<p class="wp-block-paragraph">全角スペースやNBSPを除去したい場合は、<code>Replace</code>（文字列を置換する関数）で個別に対処しましょう。実践コードのセクションで具体的な方法を紹介しています。</p>



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



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



<h3 class="wp-block-heading"><span id="toc5">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="toc6">標準モジュールの挿入</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">ここまで準備できたら、さっそくLTrimを使ってみましょう。</p>



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



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



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



<p class="wp-block-paragraph">引数に文字列を渡すと、先頭の半角スペースを取り除いた文字列が返ってきます。</p>



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



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

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

    sBefore = &quot;   Excel VBA&quot;
    sAfter = LTrim(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="toc8">コードの仕組みを理解する</span></h2>



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



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



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



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



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



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



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



<pre class="wp-block-code"><code>Debug.Print LTrim(&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="toc11">対応する空白の種類</span></h3>



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



<figure class="wp-block-table"><table><thead><tr><th>文字</th><th>コード</th><th>LTrimで削除</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="toc12">実践コード（業務に使えるバージョン）</span></h2>



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



<h3 class="wp-block-heading"><span id="toc13">シートのセルを一括クレンジングする</span></h3>



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



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

    Dim ws As Worksheet   '--- 対象シート ---
    Dim rng As Range      '--- データ範囲 ---
    Dim cell As Range     '--- ループ用セル ---

    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 = LTrim(cell.Value)
        End If
    Next cell

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

End Sub</code></pre>



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



<p class="wp-block-paragraph">対象列を変えたいときは、<code>Range("A1:A"...)</code> の「A」を任意の列に書き換えてください。For Eachの詳細は<a href="https://mashukabu.com/vba-howto-use-for-each-next/">For Eachの使い方</a>も参考にどうぞ。</p>



<h3 class="wp-block-heading"><span id="toc14">CSVインポート後の先頭空白を除去する</span></h3>



<p class="wp-block-paragraph">CSVファイルから読み込んだ1行分のデータを、カンマで分割して各項目の先頭空白を除去するコードです。</p>



<pre class="wp-block-code"><code>Sub CSV行の先頭空白を除去()

    Dim sLine As String     '--- CSV1行分のデータ ---
    Dim vItems As Variant   '--- 分割後の配列 ---
    Dim i As Long           '--- ループカウンタ ---

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

    '--- カンマで分割 ---
    vItems = Split(sLine, &quot;,&quot;)

    '--- 各項目の先頭空白を除去 ---
    For i = LBound(vItems) To UBound(vItems)
        vItems(i) = LTrim(CStr(vItems(i)))
    Next i

    '--- 結果を確認 ---
    MsgBox &quot;1: &quot; &amp; vItems(0) &amp; vbCrLf &amp; _
           &quot;2: &quot; &amp; vItems(1) &amp; vbCrLf &amp; _
           &quot;3: &quot; &amp; vItems(2), vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph"><code>Split</code>（文字列を区切り文字で分割する関数）でカンマ区切りにしたあと、<code>For</code> ループで各要素にLTrimをかけています。CSVでよくある「カンマの後にスペースが入っている」パターンに対応できます。</p>



<h3 class="wp-block-heading"><span id="toc15">固定長データの先頭パディングを除去する</span></h3>



<p class="wp-block-paragraph">レガシーシステムから出力された固定長データでは、数値や文字列の先頭にスペースが詰められていることがあります。LTrimで先頭のパディングを除去すれば、数値変換やVLOOKUPの照合がスムーズになります。</p>



<pre class="wp-block-code"><code>Sub 固定長データの先頭パディングを除去()

    Dim ws As Worksheet    '--- 対象シート ---
    Dim lastRow As Long    '--- 最終行 ---
    Dim lastCol As Long    '--- 最終列 ---
    Dim i As Long          '--- 行カウンタ ---
    Dim j As Long          '--- 列カウンタ ---
    Dim lCount As Long     '--- 処理件数 ---

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

    '--- 全セルの先頭パディングを除去 ---
    For i = 2 To lastRow
        For j = 1 To lastCol
            If VarType(ws.Cells(i, j).Value) = vbString Then
                ws.Cells(i, j).Value = LTrim(ws.Cells(i, j).Value)
                lCount = lCount + 1
            End If
        Next j
    Next i

    MsgBox lCount &amp; &quot; 件のセルから先頭パディングを除去しました。&quot;, vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph">1行目をヘッダーとして2行目からループしています。固定長ファイルをExcelにインポートした直後に実行すると、そのまま集計やVLOOKUP照合に進めますよ。</p>



<h3 class="wp-block-heading"><span id="toc16">LTrim+Replaceで全角スペースも対応する</span></h3>



<p class="wp-block-paragraph">LTrimは半角スペースしか削除できません。全角スペースも先頭から除去したい場合は、<code>Replace</code>を使います。全角スペースを半角に変換してからLTrimをかけるのがおすすめです。</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

            '--- Step1: 全角スペースを半角スペースに変換 ---
            sVal = Replace(sVal, ChrW(12288), &quot; &quot;)

            '--- Step2: 先頭の半角スペースを削除 ---
            sVal = LTrim(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">ポイントは <strong>ReplaceでLTrimの前に全角→半角変換をかける</strong> ことです。この順序なら、全角スペースが先頭にあるケースもLTrimでまとめて削除できます。</p>



<p class="wp-block-paragraph">文字列の途中にある全角スペースも半角に変換される点に注意してください。途中の全角スペースを残したい場合は、先頭の全角スペースだけをループで除去するコードに書き換える必要があります。</p>



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



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



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td>型の不一致（実行時エラー 13）</td><td>数値セルの値をString型変数に直接代入</td><td><code>CStr</code> で明示的に変換するか、<code>VarType</code> で文字列セルだけを処理対象にする</td></tr><tr><td>あいまいな名前が検出されました</td><td>複数ライブラリで <code>LTrim</code> の名前が衝突</td><td><code>Strings.LTrim</code> とフル修飾で記述</td></tr><tr><td>マクロが無効にされました</td><td>.xlsx形式で保存、またはセキュリティ設定</td><td>.xlsm形式で保存し、「コンテンツの有効化」をクリック</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc18">型の不一致を防ぐ</span></h3>



<p class="wp-block-paragraph">数値が入っているセルをLTrimに渡すと、型の不一致エラーが出ることがあります。</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> で文字列セルだけを対象にするかです。実践コードでは後者の方法を使っています。</p>



<h3 class="wp-block-heading"><span id="toc19">変数宣言の漏れを防ぐ</span></h3>



<p class="wp-block-paragraph">モジュールの先頭に <code>Option Explicit</code> を書いておくと、変数の宣言漏れをコンパイル時に検出できます。スペルミスによるバグ防止にとても効果的です。</p>



<pre class="wp-block-code"><code>Option Explicit</code></pre>



<p class="wp-block-paragraph">詳しくは <a href="https://mashukabu.com/excel-vba-option-explicit/">Option Explicitの使い方</a> を参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc20">マクロ無効・.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="toc21">まとめ</span></h2>



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



<ul class="wp-block-list"><li><strong>LTrimは先頭の半角スペースだけを削除する関数</strong>。末尾は残る</li><li>全角スペース・タブ・NBSPは削除されない。全角対応には <code>Replace</code> を併用する</li><li>空白がない文字列を渡してもエラーにならないので、安心してまとめて処理できる</li><li>業務では <code>For Each</code> ループと組み合わせて、セルの一括クレンジングに使うのが定番</li></ul>



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



<p class="wp-block-paragraph">末尾の空白も消したいときは <a href="https://mashukabu.com/excel-vba-howto-use-rtrim/">RTrim（末尾の空白削除）</a>、前後まとめて消したいときは <a href="https://mashukabu.com/excel-vba-howto-use-trim/">Trim（前後の空白削除）</a> を使い分けてみてください。ワークシート上で空白を除去したい場合は、<a href="https://mashukabu.com/excel-function-howto-use-trim/">Excelの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-ltrim/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA】Trim関数の使い方｜前後の空白を一括削除する方法</title>
		<link>https://mashukabu.com/excel-vba-howto-use-trim/</link>
					<comments>https://mashukabu.com/excel-vba-howto-use-trim/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 04 Mar 2022 12:19:48 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></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=1290</guid>

					<description><![CDATA[VBAのTrim関数で文字列の前後にある半角スペースを削除する方法を解説。削除できるのは半角のみで全角スペースはReplaceで対処します。UsedRangeでのシート一括削除、VLOOKUP前のデータ整形まで、コピペで動くコードを紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">VLOOKUPの検索キーは合っているのに「一致するデータなし」になる――そんな経験はありませんか？原因の多くは、文字列の前後に紛れ込んだ見えない空白です。</p>



<p class="wp-block-paragraph">手入力のばらつきやシステム出力のデータには、前後に半角・全角スペースが混じりやすいもの。見た目だけでは判断できないのが厄介ですよね。</p>



<p class="wp-block-paragraph">VBAの <strong>Trim関数</strong> を使えば、文字列の前後にある空白をまとめて一括削除できます。この記事では、VBA Trimの基本構文から業務で使える実践コードまで紹介します。</p>



<p class="wp-block-paragraph">空白削除の全体像を先に把握したい方は、<a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBA空白削除まとめ｜Trim・LTrim・RTrim・Replaceの使い分け方</a>をご覧ください。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-5" checked><label class="toc-title" for="toc-checkbox-5">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">VBA Trim関数とは？前後の空白を削除する関数</a><ol><li><a href="#toc2" tabindex="0">LTrim・RTrim・Trimの違い</a></li><li><a href="#toc3" tabindex="0">ワークシート関数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 Trimの基本コード（コピペで動く）</a></li><li><a href="#toc9" tabindex="0">Trim関数の仕組みを深掘りする</a><ol><li><a href="#toc10" tabindex="0">Strings.TrimとTrimの違い</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 Trimの実践コード3選</a><ol><li><a href="#toc14" tabindex="0">シート全体の前後空白を一括削除する</a></li><li><a href="#toc15" tabindex="0">VLOOKUP前にデータを整形する</a></li><li><a href="#toc16" tabindex="0">Trim + Replaceで見えない空白も一掃する</a></li></ol></li><li><a href="#toc17" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc18" tabindex="0">型の不一致（実行時エラー 13）</a></li><li><a href="#toc19" tabindex="0">あいまいな名前のコンパイルエラー</a></li><li><a href="#toc20" tabindex="0">マクロ無効・.xlsm保存の注意</a></li></ol></li><li><a href="#toc21" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">VBAのTrim関数は、文字列の <strong>先頭と末尾</strong> にある空白を削除して返す関数です。</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">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><a href="https://mashukabu.com/excel-vba-howto-use-rtrim/">RTrim</a></strong></td><td>末尾のみ</td><td>末尾空白だけ除去したいとき</td></tr><tr><td><strong>Trim</strong></td><td>前後両方</td><td>前後どちらの空白も不要なとき</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">迷ったらTrimを選んでおけば間違いありません。前後どちらかだけ除去したい場面では、LTrimやRTrimを使い分けてみてください。</p>



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



<p class="wp-block-paragraph">ExcelのワークシートTRIM関数（セルの数式で使うほう）と、VBAの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><strong>そのまま残る</strong></td><td><strong>1つに圧縮</strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ワークシート版は内部の連続スペースも整理してくれます。VBAからワークシート版を呼びたい場合は、次のように書きます。</p>



<pre class="wp-block-code"><code>Application.WorksheetFunction.Trim(s)</code></pre>



<p class="wp-block-paragraph">通常の前後空白削除だけならVBA Trimで十分ですよ。「Trimしたのに内部のスペースが残っている」と感じたら、この違いを思い出してみてください。</p>



<p class="wp-block-paragraph">ワークシート版の詳しい使い方は <a href="https://mashukabu.com/excel-function-howto-use-trim/">ExcelのTRIM関数の使い方</a> で解説しています。</p>



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



<p class="wp-block-paragraph">Trimが削除できるのは、<strong>半角スペース（Chr(32)）だけ</strong> です。</p>



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



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



<p class="wp-block-paragraph">日本語のデータで特に注意したいのが全角スペースです。氏名の「姓　名」のような全角区切りはTrimでは消えません。また、Webページからコピーしたデータには、NBSPが含まれていることがあります。Trimで消えない空白に出くわしたら、<code>Replace</code> 関数で個別に対処しましょう。</p>



<pre class="wp-block-code"><code>Replace(対象文字列, ChrW(12288), &quot;&quot;)  '--- 全角スペースを削除 ---
Replace(対象文字列, Chr(160), &quot;&quot;)     '--- NBSPを削除 ---</code></pre>



<p class="wp-block-paragraph">後述の実践コード3つ目で、Replace併用の一括処理コードを紹介しています。</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">ここまで準備できたら、さっそくTrimを使ってみましょう。</p>



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



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



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



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



<p class="wp-block-paragraph">まずは動作確認用のコードを試してみましょう。Module1のコードウィンドウに、以下をそのまま貼り付けてください。</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">コードを貼り付けたら、<strong>F5キー</strong> を押して実行してみてください。メッセージボックスに変換前と変換後の文字列が表示されます。角括弧で囲んでいるので、前後のスペースが消えたことが一目でわかるはずです。</p>



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



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



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



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



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



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



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



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



<pre class="wp-block-code"><code>Debug.Print Trim(&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>Trimで削除</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 Trimの実践コード3選</span></h2>



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



<h3 class="wp-block-heading"><span id="toc14">シート全体の前後空白を一括削除する</span></h3>



<p class="wp-block-paragraph">実際の業務データでは、空白が混じる列は1つとは限りません。次のコードは、UsedRange全体を走査して、文字列が入っているセルの前後空白をまとめて削除します。</p>



<pre class="wp-block-code"><code>Sub シート全体の前後空白を一括削除()

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

    Set ws = ActiveSheet
    Set rng = ws.UsedRange

    '--- 各セルの前後空白を削除 ---
    For Each cell In rng
        If VarType(cell.Value) = vbString 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>VarType(cell.Value) = vbString</code> で文字列セルだけを対象にしているのがポイントです。数値や日付のセルをそのままTrimに渡すと型の不一致が起きる場合があるので、この判定を入れておくと安全ですよ。</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-rtrim/">RTrim</a>のA列限定コードとは違い、「どの列に空白があるか分からない」ときに便利です。</p>



<h3 class="wp-block-heading"><span id="toc15">VLOOKUP前にデータを整形する</span></h3>



<p class="wp-block-paragraph">VLOOKUPの検索がうまくいかない原因の多くは、キー列の空白です。次のコードは、検索キーが入っているA列をTrimで整形してから、VLOOKUPを実行します。</p>



<pre class="wp-block-code"><code>Sub Trim整形してからVLOOKUP()

    Dim ws As Worksheet    '--- 対象シート ---
    Dim lastRow As Long    '--- 最終行 ---
    Dim i As Long          '--- ループカウンタ ---
    Dim sKey As String     '--- 検索キー ---
    Dim vResult As Variant '--- 検索結果 ---

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    '--- A列の前後空白を除去 ---
    For i = 2 To lastRow
        If VarType(ws.Cells(i, &quot;A&quot;).Value) = vbString Then
            ws.Cells(i, &quot;A&quot;).Value = Trim(ws.Cells(i, &quot;A&quot;).Value)
        End If
    Next i

    '--- VLOOKUPでSheet2のマスタから値を取得 ---
    For i = 2 To lastRow
        sKey = ws.Cells(i, &quot;A&quot;).Value
        vResult = Application.VLookup( _
            sKey, Sheets(&quot;Sheet2&quot;).Range(&quot;A:B&quot;), 2, False)

        If IsError(vResult) Then
            ws.Cells(i, &quot;B&quot;).Value = &quot;該当なし&quot;
        Else
            ws.Cells(i, &quot;B&quot;).Value = vResult
        End If
    Next i

    MsgBox &quot;VLOOKUP完了&quot;, vbInformation

End Sub</code></pre>



<p class="wp-block-paragraph">先にTrimで整形するひと手間を入れるだけで、「データはあるのに一致しない」というトラブルを防げます。照合先のマスタ側にも空白がある場合は、マスタのA列にも同じTrim処理をかけてくださいね。</p>



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



<p class="wp-block-paragraph">Trimだけでは取り切れないタブやNBSPもまとめて除去したい場面があります。次のコードは、Trimに加えて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

            '--- Step1: 前後の半角スペースを削除 ---
            sVal = Trim(sVal)

            '--- Step2: 全角スペースを削除 ---
            sVal = Replace(sVal, ChrW(12288), &quot;&quot;)

            '--- Step3: タブ文字を削除 ---
            sVal = Replace(sVal, Chr(9), &quot;&quot;)

            '--- Step4: NBSP（ノーブレークスペース）を削除 ---
            sVal = Replace(sVal, Chr(160), &quot;&quot;)

            '--- Step5: 改行を削除（必要に応じて） ---
            sVal = Replace(sVal, vbCr, &quot;&quot;)
            sVal = Replace(sVal, vbLf, &quot;&quot;)

            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">Webページからコピーしたデータや、外部システムから出力したCSVには、全角スペースやタブ・NBSPが混じっていることが多いです。このコードなら、Trimで消せない空白もまとめて対処できますよ。なお、Step2のReplaceは文字列の途中にある全角スペースも削除します。「姓　名」のような内部の全角区切りを残したい場合は、Step2を外して使ってください。</p>



<p class="wp-block-paragraph">空白の種類別の対処法をもっと詳しく知りたい方は、<a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBA空白削除まとめ｜Trim・LTrim・RTrim・Replaceの使い分け方</a>もあわせてどうぞ。</p>



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



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



<h3 class="wp-block-heading"><span id="toc18">型の不一致（実行時エラー 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> で文字列セルだけを処理対象にするかです。</p>



<h3 class="wp-block-heading"><span id="toc19">あいまいな名前のコンパイルエラー</span></h3>



<p class="wp-block-paragraph">複数のライブラリを参照設定していると、<code>Trim</code> という名前が衝突してコンパイルエラーが出ることがあります。「あいまいな名前が検出されました」というメッセージが表示されたら、<code>Strings.Trim</code> とフル修飾で書けば解決しますよ。</p>



<h3 class="wp-block-heading"><span id="toc20">マクロ無効・.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="toc21">まとめ</span></h2>



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



<ul class="wp-block-list"><li><strong>Trimは前後の空白を両方削除する関数</strong>。文字列内部の空白はそのまま残る</li><li>削除されるのは<strong>半角スペースのみ</strong>。全角スペース・タブ・NBSPは削除されない</li><li>空白がない文字列を渡してもエラーにならないので、安心してまとめて処理できる</li><li>業務では <code>UsedRange</code> を走査して、シート全体を一括クレンジングするのが定番</li><li>全角スペースやタブ・NBSPも消したいときは、TrimとReplace関数を組み合わせる</li></ul>



<p class="wp-block-paragraph">空白の処理は地味ですが、データの正確性に直結する大事な前処理です。Trimをうまく使って、クリーンなデータを手に入れましょう。</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-rtrim/">RTrim（末尾の空白削除）</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-trim/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-6" checked><label class="toc-title" for="toc-checkbox-6">目次</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>
