<?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/%e3%83%87%e3%83%bc%e3%82%bf%e3%82%af%e3%83%aa%e3%83%bc%e3%83%8b%e3%83%b3%e3%82%b0/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Sat, 04 Jul 2026 01:49:30 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>データクリーニング &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>VBA WorksheetFunction.Trim の使い方｜VBA Trim との違いと使い分けを解説</title>
		<link>https://mashukabu.com/vba-worksheetfunction-trim/</link>
					<comments>https://mashukabu.com/vba-worksheetfunction-trim/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 15:50:48 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[Trim]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[WorksheetFunction]]></category>
		<category><![CDATA[データクリーニング]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[文字列操作]]></category>
		<category><![CDATA[空白除去]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7849</guid>

					<description><![CDATA[VBA の WorksheetFunction.Trim は、文字列の先頭・末尾だけでなく単語間の連続スペースも1つに圧縮できます。中間スペースを残す VBA 標準の Trim 関数との違いを入力→出力の比較表で解説し、CSV やシステム出力のデータクリーニングに使える実務コードも紹介。Chr(160) ノーブレークスペースが消えない落とし穴と対処法もカバーしました。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">VBA の <code>Trim</code> 関数を使ったのに、文字列の途中にある余分なスペースが消えなくて困ったことはありませんか。実は、VBA の標準 <code>Trim</code> 関数は先頭と末尾のスペースしか削除しません。単語の間にある連続スペースを1つにまとめたいときは、<code>WorksheetFunction.Trim</code> を使います。</p>



<p class="wp-block-paragraph">この記事では、<code>WorksheetFunction.Trim</code> の使い方を、VBA 標準の <code>Trim</code>・<code>LTrim</code>・<code>RTrim</code> との違いとあわせて解説します。4つの空白処理の挙動は、入力と出力の比較表で整理します。</p>



<p class="wp-block-paragraph">CSV やシステム出力のデータクリーニングに使える実務コードも紹介します。最後に取り上げるのは、<code>Trim</code> 系をどれだけ使っても消えないノーブレークスペース（Chr(160)）の落とし穴と対処法。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">VBA の WorksheetFunction.Trim とは？</a></li><li><a href="#toc2" tabindex="0">WorksheetFunction.Trim の使い方</a><ol><li><a href="#toc3" tabindex="0">VBE の起動と標準モジュールの準備</a></li><li><a href="#toc4" tabindex="0">基本コード</a></li></ol></li><li><a href="#toc5" tabindex="0">VBA Trim・LTrim・RTrim との違い｜4関数の比較表</a></li><li><a href="#toc6" tabindex="0">WorksheetFunction.Trim が活躍する実務シーン</a><ol><li><a href="#toc7" tabindex="0">実務コード1: 1つのセルをクレンジングする</a></li><li><a href="#toc8" tabindex="0">実務コード2: セル範囲を一括クレンジングする</a></li></ol></li><li><a href="#toc9" tabindex="0">ノーブレークスペース（Chr(160)）が削除できない落とし穴と対処法</a></li><li><a href="#toc10" tabindex="0">WorksheetFunction.Trim を使うときの注意点・よくあるエラー</a></li><li><a href="#toc11" tabindex="0">まとめ</a><ol><li><a href="#toc12" tabindex="0">関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBA の WorksheetFunction.Trim とは？</span></h2>



<p class="wp-block-paragraph"><code>WorksheetFunction.Trim</code> は、ワークシート関数の TRIM を VBA から呼び出すメソッドです。文字列の先頭と末尾のスペースを削除します。さらに、<strong>単語の間にある連続したスペース</strong>も1つだけ残して圧縮します。</p>



<p class="wp-block-paragraph">VBA には標準の <code>Trim</code> 関数もあります。ただし標準の <code>Trim</code> 関数は、中間の連続スペースには手を付けません。「単語間のスペースを1つに詰める」処理は、VBA 標準関数にはない機能です。</p>



<p class="wp-block-paragraph">そこで <code>WorksheetFunction</code> オブジェクトを経由して、ワークシート関数の TRIM を借りてくるわけです。具体的な挙動を見てみましょう。</p>



<pre class="wp-block-code"><code>result = WorksheetFunction.Trim(&quot;A   B   C&quot;)
'--- 結果は &quot;A B C&quot;（単語間スペースが1つに圧縮される）---</code></pre>



<p class="wp-block-paragraph">入力 <code>"A   B   C"</code> の単語間には、それぞれ3つのスペースがあります。<code>WorksheetFunction.Trim</code> を通すと、すべて1つにまとめられて <code>"A B C"</code> になります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>NOTE: ワークシート関数を VBA から呼ぶ仕組み全般については、<a href="https://mashukabu.com/excel-vba-howto-use-worksheetfunction/">VBAでWorksheetFunctionを使う方法</a>で詳しく解説しています。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc2">WorksheetFunction.Trim の使い方</span></h2>



<p class="wp-block-paragraph">まずは基本の構文と、実際に動かすための準備を確認します。</p>



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



<p class="wp-block-paragraph">引数は次のとおり。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/省略</th><th>データ型</th><th>説明</th></tr></thead><tbody><tr><td>Arg1</td><td>必須</td><td>String</td><td>余分なスペースを削除したい文字列</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">戻り値は String 型です。<code>Application.WorksheetFunction.Trim(Arg1)</code> と書いても同じ動作になります。<code>Application.</code> は省略しても問題ありません。</p>



<h3 class="wp-block-heading"><span id="toc3">VBE の起動と標準モジュールの準備</span></h3>



<p class="wp-block-paragraph">コードを書くには、まず VBE（Visual Basic Editor）を開きます。Excel で <code>Alt + F11</code> キーを押すと VBE が起動します。</p>



<p class="wp-block-paragraph">「開発」タブの「Visual Basic」ボタンから開けることも覚えておきましょう。「開発」タブが表示されていない場合は、次の手順で追加します。</p>



<ol class="wp-block-list"><li>「ファイル」→「オプション」を開きます。</li><li>「リボンのユーザー設定」を選びます。</li><li>右側の一覧で「開発」にチェックを入れます。</li></ol>



<p class="wp-block-paragraph">VBE が開いたら、メニューの「挿入」→「標準モジュール」をクリックします。表示されたコード入力欄に、これから紹介するコードを貼り付けてください。</p>



<h3 class="wp-block-heading"><span id="toc4">基本コード</span></h3>



<p class="wp-block-paragraph">実際に <code>WorksheetFunction.Trim</code> を動かす基本コードです。変換前と変換後をメッセージボックスで見比べられるようにしています。</p>



<pre class="wp-block-code"><code>Sub WorksheetFunctionTrimSample()
    Dim sBefore As String '変換前の文字列
    Dim sAfter As String  '変換後の文字列

    '--- 変換前の文字列を用意 ---
    sBefore = &quot;  Excel   VBA   入門  &quot;

    '--- 連続スペースを1つに圧縮し、先頭末尾も削除 ---
    sAfter = WorksheetFunction.Trim(sBefore)

    '--- 変換前後を確認 ---
    MsgBox &quot;変換前：[&quot; &amp; sBefore &amp; &quot;]&quot; &amp; vbCrLf &amp; _
           &quot;変換後：[&quot; &amp; sAfter &amp; &quot;]&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">このコードを実行すると、変換後は <code>[Excel VBA 入門]</code> と表示されます。先頭と末尾のスペースが消え、単語間の連続スペースも1つに詰まりました。<code>[ ]</code> で囲んでいるのは、両端のスペースが消えたことを目で確認しやすくするためです。</p>



<h2 class="wp-block-heading"><span id="toc5">VBA Trim・LTrim・RTrim との違い｜4関数の比較表</span></h2>



<p class="wp-block-paragraph">ここがこの記事の核心です。VBA には空白を扱う関数が複数ありますが、削除する範囲はそれぞれ異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>先頭のスペース</th><th>末尾のスペース</th><th>中間の連続スペース</th></tr></thead><tbody><tr><td><code>Trim</code></td><td>削除する</td><td>削除する</td><td>残す</td></tr><tr><td><code>LTrim</code></td><td>削除する</td><td>残す</td><td>残す</td></tr><tr><td><code>RTrim</code></td><td>残す</td><td>削除する</td><td>残す</td></tr><tr><td><code>WorksheetFunction.Trim</code></td><td>削除する</td><td>削除する</td><td>1つに圧縮する</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">同じ文字列に4つの関数を通すと、結果はどう変わるでしょうか。入力は <code>"  A   B  "</code> とします。先頭に2つ、中間に3つ、末尾に2つのスペースがある文字列です。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>出力結果</th></tr></thead><tbody><tr><td><code>Trim("  A   B  ")</code></td><td><code>"A   B"</code></td></tr><tr><td><code>LTrim("  A   B  ")</code></td><td><code>"A   B  "</code></td></tr><tr><td><code>RTrim("  A   B  ")</code></td><td><code>"  A   B"</code></td></tr><tr><td><code>WorksheetFunction.Trim("  A   B  ")</code></td><td><code>"A B"</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><code>Trim</code>・<code>LTrim</code>・<code>RTrim</code> はいずれも、中間の連続スペースをそのまま残します。中間スペースを1つに詰めるのは <code>WorksheetFunction.Trim</code> だけです。ここが<strong>両者の最大の違い</strong>。</p>



<p class="wp-block-paragraph">「先頭と末尾だけ消えればいい」場合は VBA 標準の <code>Trim</code> で十分です。「単語間の余分なスペースも整えたい」場合は <code>WorksheetFunction.Trim</code> を選びます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>TIP: 各関数の単体の使い方は、<a href="https://mashukabu.com/excel-vba-howto-use-trim/">VBA Trim関数</a>・<a href="https://mashukabu.com/excel-vba-howto-use-ltrim/">VBA LTrim関数</a>・<a href="https://mashukabu.com/excel-vba-howto-use-rtrim/">VBA RTrim関数</a>の各記事で解説しています。空白処理全体の使い分けは<a href="https://mashukabu.com/excel-vba-howto-remove-space/">VBAで空白を削除する方法まとめ</a>も参考にしてください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc6">WorksheetFunction.Trim が活躍する実務シーン</span></h2>



<p class="wp-block-paragraph"><code>WorksheetFunction.Trim</code> の出番は、間隔がそろっていないデータを受け取ったときです。代表的なのが、システムから出力されたレポートや CSV ファイル。項目の区切りが複数スペースになっていることがよくあります。</p>



<p class="wp-block-paragraph">実務で使えるコードを2つ紹介します。</p>



<h3 class="wp-block-heading"><span id="toc7">実務コード1: 1つのセルをクレンジングする</span></h3>



<p class="wp-block-paragraph">A 列のセルに入った文字列を整え、B 列に書き出すコードです。</p>



<pre class="wp-block-code"><code>Sub CleanSingleCell()
    Dim sRaw As String   '元の文字列
    Dim sClean As String '整形後の文字列

    '--- A2セルの値を取得 ---
    sRaw = Range(&quot;A2&quot;).Value

    '--- 先頭末尾＋中間スペースを正規化 ---
    sClean = WorksheetFunction.Trim(sRaw)

    '--- 整形結果をB2セルに出力 ---
    Range(&quot;B2&quot;).Value = sClean
End Sub</code></pre>



<p class="wp-block-paragraph">A2 に <code>"  山田    太郎  "</code> のような値が入っていても、B2 の出力はきれいな <code>"山田 太郎"</code>。</p>



<h3 class="wp-block-heading"><span id="toc8">実務コード2: セル範囲を一括クレンジングする</span></h3>



<p class="wp-block-paragraph">実務では1セルだけでなく、列全体を一気に処理したい場面が多いはずです。A 列のデータを最終行まで順番に整えるコードです。</p>



<pre class="wp-block-code"><code>Sub CleanRangeWithTrim()
    Dim lastRow As Long '最終行の行番号
    Dim i As Long       '行カウンター

    '--- A列の最終行を取得 ---
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    '--- 2行目から最終行まで繰り返す ---
    For i = 2 To lastRow
        '--- 文字列のセルだけを対象に正規化 ---
        If VarType(Cells(i, 1).Value) = vbString Then
            Cells(i, 1).Value = WorksheetFunction.Trim(Cells(i, 1).Value)
        End If
    Next i

    MsgBox &quot;クレンジングが完了しました。&quot;
End Sub</code></pre>



<p class="wp-block-paragraph"><code>VarType</code> でセルの値が文字列かどうかを確認しています。数値や日付のセルに <code>Trim</code> をかけると、意図しない型変換が起きることがあるためです。文字列のセルだけを対象にすれば安心でしょう。</p>



<h2 class="wp-block-heading"><span id="toc9">ノーブレークスペース（Chr(160)）が削除できない落とし穴と対処法</span></h2>



<p class="wp-block-paragraph"><code>WorksheetFunction.Trim</code> には<strong>1つ大きな落とし穴</strong>があります。それが「ノーブレークスペース」です。Web ページや一部のシステムからコピーしたデータに混ざっていることがあります。</p>



<p class="wp-block-paragraph">ノーブレークスペースは、文字コードの値が160の空白文字です。HTML での表記は <code>&nbsp;</code>。見た目は普通のスペースとそっくりですが、別の文字です。</p>



<p class="wp-block-paragraph"><code>WorksheetFunction.Trim</code> が削除できるのは、値が32の半角スペース（Chr(32)）だけです。これは公式ドキュメントにも明記されています。VBA 標準の <code>Trim</code>・<code>LTrim</code>・<code>RTrim</code> も同じく、ノーブレークスペースには反応しません。</p>



<pre class="wp-block-code"><code>Sub TrimCannotRemoveNbsp()
    Dim sText As String '元の文字列

    '--- 単語の間にノーブレークスペースを含む文字列 ---
    sText = &quot;A&quot; &amp; Chr(160) &amp; Chr(160) &amp; &quot;B&quot;

    '--- Trimをかけてもノーブレークスペースは残る ---
    MsgBox &quot;[&quot; &amp; WorksheetFunction.Trim(sText) &amp; &quot;]&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">このコードを実行しても、A と B の間のノーブレークスペースは消えません。「Trim を試したのに空白が消えない」という現象の正体は、たいていこれです。</p>



<p class="wp-block-paragraph">対処法は、ノーブレークスペースを先に半角スペースへ変換することです。<code>Replace</code> 関数を使います。半角スペースに変えてから <code>WorksheetFunction.Trim</code> を通すと、区切りのスペースを残しつつ正規化できます。</p>



<pre class="wp-block-code"><code>Sub CleanWithNbsp()
    Dim sRaw As String   '元の文字列
    Dim sClean As String '整形後の文字列

    '--- A2セルの値を取得 ---
    sRaw = Range(&quot;A2&quot;).Value

    '--- ノーブレークスペースを半角スペースに変換 ---
    sClean = Replace(sRaw, Chr(160), &quot; &quot;)

    '--- 連続スペースを1つに圧縮し先頭末尾も削除 ---
    sClean = WorksheetFunction.Trim(sClean)

    '--- 整形結果をB2セルに出力 ---
    Range(&quot;B2&quot;).Value = sClean
End Sub</code></pre>



<p class="wp-block-paragraph">「<code>Chr(160)</code> を半角スペースに変換 → <code>WorksheetFunction.Trim</code>」の順番がポイント。いきなり全削除すると、本来必要な区切りスペースまで失われることがあります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>NOTE: ノーブレークスペースの正体と消し方は、<a href="https://mashukabu.com/about-nbsp/">Excelで消えない空白の正体と消し方</a>でさらに詳しく解説しています。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc10">WorksheetFunction.Trim を使うときの注意点・よくあるエラー</span></h2>



<p class="wp-block-paragraph">最後に、つまずきやすいポイントを整理しておきましょう。</p>



<p class="wp-block-paragraph">1つ目は、タブや改行は削除されないことです。削除対象はあくまで半角スペースだけです。タブ（Chr(9)）や改行（Chr(10)、Chr(13)）が混じっている場合は、<code>Replace</code> で個別に処理しましょう。</p>



<p class="wp-block-paragraph">2つ目は、全角スペースの扱いです。<code>WorksheetFunction.Trim</code> は半角スペースを対象に設計されています。全角スペースを確実に消したいときは、<code>Replace(s, "　", " ")</code> で半角に変換してから処理するのが安全です。</p>



<p class="wp-block-paragraph">3つ目は、空セルや数値セルへの適用。空のセルや数値のセルを直接渡すと、思わぬ型変換が起きることがあります。実務コード2のように <code>VarType</code> で文字列かどうかを確認してから渡すと、トラブルを防げます。</p>



<figure class="wp-block-table"><table><thead><tr><th>つまずきポイント</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td>中間スペースが残る</td><td>VBA 標準の <code>Trim</code> を使っている</td><td><code>WorksheetFunction.Trim</code> を使う</td></tr><tr><td>ある空白だけ消えない</td><td>ノーブレークスペース（Chr(160)）</td><td><code>Replace</code> で半角スペースに変換してから処理</td></tr><tr><td>全角スペースが残る</td><td>対象は半角スペースのみ</td><td><code>Replace(s, "　", " ")</code> で半角に変換</td></tr><tr><td>タブ・改行が残る</td><td>対象は半角スペースのみ</td><td><code>Replace</code> で Chr(9)/Chr(10)/Chr(13) を処理</td></tr></tbody></table></figure>



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



<p class="wp-block-paragraph"><code>WorksheetFunction.Trim</code> は、文字列の先頭・末尾のスペースに加えて、単語間の連続スペースも1つに圧縮できるメソッドです。VBA 標準の <code>Trim</code> 関数が中間スペースを残すのに対し、こちらは中間スペースを詰めてくれます。この違いこそが、両者を使い分ける<strong>決め手</strong>。</p>



<p class="wp-block-paragraph">システム出力や CSV インポート後のデータで、間隔が不規則な文字列を整えたいときに役立ちます。ただし、ノーブレークスペース（Chr(160)）は <code>Trim</code> 系では消せません。<code>Replace</code> で半角スペースに変換してから処理する、という流れを覚えておくと安心です。</p>



<p class="wp-block-paragraph">空白処理の関数はそれぞれ役割が違います。先頭・末尾だけなら <code>Trim</code>、片側だけなら <code>LTrim</code>/<code>RTrim</code>、中間も整えるなら <code>WorksheetFunction.Trim</code>、と使い分けてみてください。</p>



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



<ul class="wp-block-list"><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で空白を削除する方法｜Trim・Replace・全角スペースの対処法まとめ</a></li><li><a href="https://mashukabu.com/vba-trim-ltrim-rtrim/">VBAのTrim・LTrim・RTrim関数で文字列の空白を除去する方法</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-worksheetfunction/">VBAでWorksheetFunctionを使う方法｜Excel関数をマクロで活用する</a></li><li><a href="https://mashukabu.com/about-nbsp/">Excelで消えない空白の正体と消し方｜ノーブレークスペース完全対策ガイド</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/vba-worksheetfunction-trim/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのSUMIF・COUNTIFが0になる・集計されない原因と解決法9選</title>
		<link>https://mashukabu.com/sumif-countif-zero/</link>
					<comments>https://mashukabu.com/sumif-countif-zero/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 23 May 2026 08:10:09 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[COUNTIF]]></category>
		<category><![CDATA[SUMIF]]></category>
		<category><![CDATA[データクリーニング]]></category>
		<category><![CDATA[関数トラブル]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=6975</guid>

					<description><![CDATA[スプレッドシートのSUMIFやCOUNTIFが0になる・正しく集計されない原因を症状別に9パターンで解説。数値の文字列化・空白混入・全角半角・比較演算子ミスなど、確認手順と修正方法をまとめました。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートでSUMIFやCOUNTIFを使ったのに「合計が0」「目視では5件あるのに2件しかカウントされない」――そんな経験はありませんか。数式自体は間違っていないように見えるのに結果がおかしい。原因が自分の入力か関数の仕様かわからず、無駄に時間を溶かしてしまいがちです。</p>



<p class="wp-block-paragraph">この記事では、スプレッドシートでSUMIF・COUNTIFが0になる・正しく集計されない原因を9パターンに整理しました。症状から原因を逆引きできる早見表も用意しています。上から順に読むよりも、自分の症状に近い見出しを探して使ってもらうのがオススメです。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのSUMIF・COUNTIFが0になるときに最初に確認する3つのこと</a></li><li><a href="#toc2" tabindex="0">原因1〜3：数値が「文字列」になっているパターン</a><ol><li><a href="#toc3" tabindex="0">原因1：合計対象のセルが文字列になっている</a></li><li><a href="#toc4" tabindex="0">原因2：条件側に余分な空白や不可視文字が混ざっている</a></li><li><a href="#toc5" tabindex="0">原因3：全角と半角が混在している</a></li></ol></li><li><a href="#toc6" tabindex="0">原因4〜6：条件指定のミスで集計されないパターン</a><ol><li><a href="#toc7" tabindex="0">原因4：比較演算子の引用符を忘れている</a></li><li><a href="#toc8" tabindex="0">原因5：ワイルドカード（* ?）のエスケープ忘れ</a></li><li><a href="#toc9" tabindex="0">原因6：範囲サイズの不一致でズレが起きる</a></li></ol></li><li><a href="#toc10" tabindex="0">原因7〜9：スプレッドシート特有の落とし穴</a><ol><li><a href="#toc11" tabindex="0">原因7：日付が「文字列としての日付」になっている</a></li><li><a href="#toc12" tabindex="0">原因8：IMPORTRANGE経由のデータで0が返る</a></li><li><a href="#toc13" tabindex="0">原因9：ARRAYFORMULAと組み合わせて配列展開されない</a></li></ol></li><li><a href="#toc14" tabindex="0">症状別 早見表：原因の逆引きチートシート</a></li><li><a href="#toc15" tabindex="0">SUMIF・COUNTIFが0になるのを防ぐためのチェック習慣</a></li><li><a href="#toc16" tabindex="0">まとめ：症状から原因を逆引きして集計ミスをゼロに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのSUMIF・COUNTIFが0になるときに最初に確認する3つのこと</span></h2>



<p class="wp-block-paragraph">原因を探す前に、まず「症状の切り分け」をしましょう。同じ「0になる」でも、原因の絞り込み方が大きく変わります。</p>



<ol class="wp-block-list"><li><strong>全件が0なのか、一部だけ0なのか</strong>：全件0なら数値の型や条件の書き方を、一部だけ0なら個別データの違いを疑います。</li><li><strong>データ側に問題があるのか、条件側に問題があるのか</strong>：<code>=COUNTA(範囲)</code> と <code>=COUNT(範囲)</code> の差を見て、文字列セルが混ざっていないか確認します。</li><li><strong>数式自体が動いているか</strong>：表示が数式のままなら <code>Ctrl+</code>` で数式表示モードを切り替えます。</li></ol>



<p class="wp-block-paragraph">まずはこの3点を確認するだけで、原因をかなり絞れます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>NOTE: COUNT は数値セルのみ、COUNTA は空白以外を全部カウントする関数です。「目視で10件あるのに COUNT が3件」なら、残り7件は数値ではなく文字列扱いになっています。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc2">原因1〜3：数値が「文字列」になっているパターン</span></h2>



<p class="wp-block-paragraph">最も頻出するのが、「数値に見えるけど実は文字列」というケースです。CSVを取り込んだとき・別システムからエクスポートしたとき・コピペで持ってきたときに発生しやすいです。</p>



<h3 class="wp-block-heading"><span id="toc3">原因1：合計対象のセルが文字列になっている</span></h3>



<p class="wp-block-paragraph">セルに <code>1500</code> と入っていても、表示位置が左寄せだったら要注意。スプレッドシートでは数値は右寄せがデフォルトです。文字列の数値は SUM でも合計されないので、SUMIF も当然0を返します。</p>



<p class="wp-block-paragraph">!<a href="https://mashukabu.com/_images/sumif-countif-zero/01_data_string-vs-number.png/">_images/sumif-countif-zero/01_data_string-vs-number.png</a></p>



<p class="wp-block-paragraph"><strong>確認方法</strong></p>



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



<p class="wp-block-paragraph">TRUE なら数値、FALSE なら文字列です。範囲全体を一気に確認したいときは、<code>=COUNT(B:B)</code> と <code>=COUNTA(B:B)</code> の値を比べてみてください。差分が文字列セルの数になります。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/05/02_result_isnumber-check.png" alt="02 result isnumber check" /></figure>



<p class="wp-block-paragraph"><strong>修正方法</strong></p>



<p class="wp-block-paragraph">1セルずつなら <code>=VALUE(A2)</code> で数値に変換します。範囲を一括変換するなら別の列に以下のように入力します。</p>



<pre class="wp-block-code"><code>=ARRAYFORMULA(VALUE(A2:A100))</code></pre>



<p class="wp-block-paragraph">シート全体を一気に直したいときは、メニューの「データ」→「データクリーンアップ」→「数値に変換」も使えます。</p>



<h3 class="wp-block-heading"><span id="toc4">原因2：条件側に余分な空白や不可視文字が混ざっている</span></h3>



<p class="wp-block-paragraph">「りんご」を条件にしたつもりが、データ側のセルが「りんご 」（末尾に半角スペース）だと一致しません。CSVや他システムからの取り込み時に発生しがちです。よく混入するのは、半角スペース・改行コード・NBSP（ノーブレークスペース、<code>CHAR(160)</code>）の3種類です。</p>



<p class="wp-block-paragraph"><strong>確認方法</strong></p>



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



<p class="wp-block-paragraph">表示上の文字数より大きければ、見えない文字が混ざっています。完全一致を直接確認したいときは <code>=A2="りんご"</code> で TRUE が返るかチェックします。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/05/03_result_len-hidden-chars.png" alt="03 result len hidden chars" /></figure>



<p class="wp-block-paragraph"><strong>修正方法</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>状況</th><th>関数</th></tr></thead><tbody><tr><td>前後・連続する半角スペースを除去</td><td><code>=TRIM(A2)</code></td></tr><tr><td>NBSP（Chr(160)）を除去</td><td><code>=SUBSTITUTE(A2, CHAR(160), "")</code></td></tr><tr><td>改行・タブなどの制御文字を除去</td><td><code>=CLEAN(A2)</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">3つを組み合わせる場合は次のようにネストします。一発で正規化できます。</p>



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



<h3 class="wp-block-heading"><span id="toc5">原因3：全角と半角が混在している</span></h3>



<p class="wp-block-paragraph">「Apple」と「Ａｐｐｌｅ」、「100」と「１００」は別物として扱われます。データ側が全角で条件側が半角だったら、当然マッチしません。</p>



<p class="wp-block-paragraph"><strong>修正方法</strong></p>



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



<p class="wp-block-paragraph">全角を半角に統一する場合は <code>ASC</code>、逆に半角を全角にしたいときは <code>JIS</code> を使います。比較用の作業列を作り、そこに正規化した値を入れて SUMIF/COUNTIF の対象範囲にすると確実です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>NOTE: 全角半角の不一致は ASC/JIS で対応。前後の空白は TRIM。混同しないように気をつけましょう。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc6">原因4〜6：条件指定のミスで集計されないパターン</span></h2>



<p class="wp-block-paragraph">数値も文字も正しいのに0になるときは、条件の書き方を見直しましょう。</p>



<h3 class="wp-block-heading"><span id="toc7">原因4：比較演算子の引用符を忘れている</span></h3>



<p class="wp-block-paragraph"><code>>100</code> のような比較演算子は、<strong>必ずダブルクオートで囲む</strong> 必要があります。</p>



<pre class="wp-block-code"><code>=SUMIF(A:A, &gt;100, B:B)</code></pre>



<p class="wp-block-paragraph">これは誤り。スプレッドシートはエラーは出さないものの、条件として正しく認識されず0や予期しない値を返します。正しくは以下です。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/05/04_result_operator-quote-comparison.png" alt="04 result operator quote comparison" /></figure>



<pre class="wp-block-code"><code>=SUMIF(A:A, &quot;&gt;100&quot;, B:B)</code></pre>



<p class="wp-block-paragraph">セル参照と組み合わせる場合は <code>&</code> で連結します。</p>



<pre class="wp-block-code"><code>=SUMIF(A:A, &quot;&gt;&quot;&amp;C1, B:B)</code></pre>



<h3 class="wp-block-heading"><span id="toc8">原因5：ワイルドカード（* ?）のエスケープ忘れ</span></h3>



<p class="wp-block-paragraph">商品コードに <code><em></code> や <code>?</code> が含まれる場合、そのままだとワイルドカードとして解釈されます。たとえば商品コード <code>ABC</em>123</code> を COUNTIF で数えたいのに、すべての <code>ABC</code> で始まる商品にマッチしてしまいます。</p>



<p class="wp-block-paragraph">リテラル文字として扱いたいときは、チルダ（<code>~</code>）でエスケープします。</p>



<pre class="wp-block-code"><code>=COUNTIF(A:A, &quot;ABC~*123&quot;)</code></pre>



<p class="wp-block-paragraph">逆に「ABCで始まる全件」を数えたいときはエスケープ不要で <code>"ABC*"</code> です。</p>



<h3 class="wp-block-heading"><span id="toc9">原因6：範囲サイズの不一致でズレが起きる</span></h3>



<p class="wp-block-paragraph">SUMIFは <code>SUMIF(範囲, 条件, 合計範囲)</code> の3引数です。<strong>範囲と合計範囲のサイズが違うと、合計範囲を範囲と同じサイズに暗黙的に揃えてしまう</strong> ため、想定外のセルが集計対象になり、結果が0や中途半端な値になります。</p>



<pre class="wp-block-code"><code>=SUMIF(A2:A100, &quot;&gt;100&quot;, B2:B50)</code></pre>



<p class="wp-block-paragraph">これは合計範囲が範囲より短いため、実質 <code>B2:B100</code> として扱われ、空白や別データが混ざる原因になります。両方とも同じ行範囲、または両方とも列全体（<code>A:A</code>, <code>B:B</code>）で揃えるのがオススメです。</p>



<h2 class="wp-block-heading"><span id="toc10">原因7〜9：スプレッドシート特有の落とし穴</span></h2>



<p class="wp-block-paragraph">ここからは Excel と挙動が少し違う、スプレッドシートで特に気をつけたいパターンです。</p>



<h3 class="wp-block-heading"><span id="toc11">原因7：日付が「文字列としての日付」になっている</span></h3>



<p class="wp-block-paragraph">セルに <code>2026/05/14</code> と入力しても、表示形式によっては文字列扱いになっているケースがあります。SUMIF/COUNTIF で日付を条件にするには、データ側がシリアル値（日付型）である必要があります。</p>



<p class="wp-block-paragraph"><strong>確認方法</strong></p>



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



<p class="wp-block-paragraph">日付セルに対して FALSE が返ったら文字列です。<code>">="&DATE(2026,1,1)</code> のような比較条件にもマッチしません。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/05/05_result_date-isnumber-check.png" alt="05 result date isnumber check" /></figure>



<p class="wp-block-paragraph"><strong>修正方法</strong></p>



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



<p class="wp-block-paragraph">日付文字列をシリアル値に変換します。または「データ」→「列を分割」「形式を変更」→「日付」でも変換可能です。</p>



<h3 class="wp-block-heading"><span id="toc12">原因8：IMPORTRANGE経由のデータで0が返る</span></h3>



<p class="wp-block-paragraph">IMPORTRANGE で別のスプレッドシートから値を取り込んでいる場合、初回読み込みやリロード時に「Loading&#8230;」状態になります。値がまだ読み込まれていないタイミングで SUMIF/COUNTIF が評価されると、一時的に0や空が返ることがあります。</p>



<p class="wp-block-paragraph">また、IMPORTRANGE の結果を直接 SUMIF の範囲に指定すると、配列として展開されないケースもあります。</p>



<p class="wp-block-paragraph"><strong>対処法</strong></p>



<ul class="wp-block-list"><li>IMPORTRANGE の結果を一度別のシートに値貼り付けしてから SUMIF/COUNTIF で参照する</li><li>IFERROR でラップして「読み込み中」と表示する: <code>=IFERROR(SUMIF(IMPORTRANGE(...), "条件", IMPORTRANGE(...)), "読み込み中")</code></li><li>数分待ってリロードし、Loading の解消を待つ</li></ul>



<h3 class="wp-block-heading"><span id="toc13">原因9：ARRAYFORMULAと組み合わせて配列展開されない</span></h3>



<p class="wp-block-paragraph">「複数条件の合計を一気に出したい」と思って ARRAYFORMULA で SUMIF をラップしても、意図通り動かないことが多いです。</p>



<pre class="wp-block-code"><code>=ARRAYFORMULA(SUMIF(A:A, C2:C10, B:B))</code></pre>



<p class="wp-block-paragraph">これは C2〜C10 の条件ごとに合計を出してくれそうに見えますが、実際には先頭セルだけ評価されたりエラーになったりします。配列対応で条件付き集計を一括で行いたい場合は、SUMPRODUCT や QUERY のほうが安定して動きます。</p>



<pre class="wp-block-code"><code>=SUMPRODUCT((A2:A100=C2)*(B2:B100))</code></pre>



<p class="wp-block-paragraph">複数条件なら SUMIFS、もっと複雑な集計なら QUERY を検討しましょう。詳しくは <a href="https://mashukabu.com/spreadsheet-sumifs-function/">スプレッドシートのSUMIFS関数の使い方</a> も参考にしてください。</p>



<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></tr></thead><tbody><tr><td>合計・カウントが全件0</td><td>原因1（文字列化数値）/ 原因2（空白混入）/ 原因3（全角半角）/ 原因4（条件記法ミス）</td></tr><tr><td>一部だけ集計されない</td><td>原因2（特定セルだけ空白）/ 原因3（一部だけ全角）/ 原因7（一部だけ文字列日付）</td></tr><tr><td>数値は出るが期待値とズレる</td><td>原因6（範囲サイズ不一致）</td></tr><tr><td>日付条件で0になる</td><td>原因7（日付が文字列）/ 原因4（比較演算子の引用符忘れ）</td></tr><tr><td>商品コードでヒットしすぎる</td><td>原因5（ワイルドカードのエスケープ忘れ）</td></tr><tr><td>IMPORTRANGE経由で0が出る</td><td>原因8（読み込み遅延・配列扱い）</td></tr><tr><td>ARRAYFORMULAで動かない</td><td>原因9（配列対応関数への置換）</td></tr><tr><td>数式がそのまま表示される</td><td>数式表示モード（Ctrl+`）</td></tr></tbody></table></figure>



<h2 class="wp-block-heading"><span id="toc15">SUMIF・COUNTIFが0になるのを防ぐためのチェック習慣</span></h2>



<p class="wp-block-paragraph">一度ハマると地味に時間を食うこの問題、未然に防ぐためのちょっとした習慣を紹介します。</p>



<ul class="wp-block-list"><li><strong>データ取り込み直後に <code>=COUNT(範囲)</code> と <code>=COUNTA(範囲)</code> を比べる</strong>：差があれば、その分だけ文字列セルが混ざっています。</li><li><strong>条件側の文字列をいったん <code>=A1="条件値"</code> で完全一致確認する</strong>：空白や全角半角の罠を早期発見できます。</li><li><strong>比較演算子はダブルクオートで囲むのを習慣化</strong>：<code>></code> <code><</code> <code>>=</code> <code><=</code> <code><></code> を使うときは反射的に <code>"</code> を打つ癖をつけます。</li><li><strong>IMPORTRANGE経由のデータは別シートに一度貼り付けてから集計</strong>：読み込み遅延と配列の問題を一括回避できます。</li><li><strong>集計範囲のサイズは必ず合わせる</strong>：範囲と合計範囲は同じ行数、または両方とも列全体で揃えます。</li></ul>



<p class="wp-block-paragraph">関連する関数の基本的な使い方は、以下の記事で詳しく解説しています。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-sumif-function/">スプレッドシートのSUMIF関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-countif-function/">スプレッドシートのCOUNTIF関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-sumifs-function/">スプレッドシートのSUMIFS関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-countifs-function/">スプレッドシートのCOUNTIFS関数の使い方</a></li></ul>



<h2 class="wp-block-heading"><span id="toc16">まとめ：症状から原因を逆引きして集計ミスをゼロに</span></h2>



<p class="wp-block-paragraph">スプレッドシートでSUMIF・COUNTIFが0になる原因と対処法を9パターン紹介しました。</p>



<ul class="wp-block-list"><li>原因1〜3：数値が文字列扱いになっている。<code>VALUE</code>、<code>TRIM</code>、<code>ASC</code> で正規化する</li><li>原因4〜6：条件の引用符・ワイルドカードエスケープ・範囲サイズの揃え方を見直す</li><li>原因7〜9：スプレッドシート特有の日付認識・IMPORTRANGE遅延・ARRAYFORMULA非対応の落とし穴に注意</li></ul>



<p class="wp-block-paragraph">「合計が0」「カウントが合わない」と気づいた瞬間に、まず <code>=ISNUMBER</code> と <code>=LEN</code> で型と長さを確認する習慣をつけると、原因の特定がぐっと早くなります。今回の早見表を手元に置いて、似た症状に出会ったときに逆引きしてみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/sumif-countif-zero/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
