<?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>Like演算子 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/like%E6%BC%94%E7%AE%97%E5%AD%90/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Thu, 04 Jun 2026 07:38:52 +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>Like演算子 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>VBA Like演算子の使い方 ― ワイルドカード5種で文字列を曖昧比較する方法</title>
		<link>https://mashukabu.com/excel-vba-like-wildcard/</link>
					<comments>https://mashukabu.com/excel-vba-like-wildcard/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 29 Jan 2022 13:42:10 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[InStr]]></category>
		<category><![CDATA[Like演算子]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[パターンマッチ]]></category>
		<category><![CDATA[ワイルドカード]]></category>
		<category><![CDATA[文字列比較]]></category>
		<category><![CDATA[曖昧検索]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=907</guid>

					<description><![CDATA[VBA Like演算子の使い方を基本から実践まで解説。ワイルドカード5種（*/?/#/[charlist]/[!charlist]）の使い分け、Not Likeの書き方、大文字小文字を区別しない比較方法、InStr関数との違いも網羅。コピペで使えるサンプルコード付き。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「この文字列、&#8221;売上&#8221;って文字が含まれてるかチェックしたいんだけど&#8230;&#8230;」そんな場面、VBAで処理を自動化していると結構ありますよね。</p>



<p class="wp-block-paragraph">普通の<code>=</code>で比較すると、完全に一致しないとTrueになりません。ちょっとでも違うと弾かれてしまうので、曖昧な比較には使えないんです。</p>



<p class="wp-block-paragraph">そこで活躍するのが<strong>Like演算子</strong>です。ワイルドカードを組み合わせれば、「〇〇を含む」「〇〇で始まる」といった柔軟な比較が一発でできます。この記事では、5種類のワイルドカードの使い方から、Not Likeの書き方、InStr関数との使い分けまで解説していきます。</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 Like演算子とは？</a><ol><li><a href="#toc2" tabindex="0">Like演算子が解決する「完全一致しか判定できない」問題</a></li><li><a href="#toc3" tabindex="0">Like演算子の基本構文</a></li></ol></li><li><a href="#toc4" tabindex="0">Like演算子で使えるワイルドカード5種一覧</a><ol><li><a href="#toc5" tabindex="0">*（アスタリスク）の使い方</a></li><li><a href="#toc6" tabindex="0">?（クエスチョンマーク）の使い方</a></li><li><a href="#toc7" tabindex="0">#（シャープ）の使い方</a></li><li><a href="#toc8" tabindex="0">[charlist]（文字リスト）の使い方</a></li><li><a href="#toc9" tabindex="0">[!charlist]（否定文字リスト）の使い方</a></li></ol></li><li><a href="#toc10" tabindex="0">Like演算子の実践コード</a><ol><li><a href="#toc11" tabindex="0">特定の文字列を含むセルを探す</a></li><li><a href="#toc12" tabindex="0">ファイル名のパターンチェック</a></li><li><a href="#toc13" tabindex="0">Select Caseと組み合わせてデータを振り分ける</a></li></ol></li><li><a href="#toc14" tabindex="0">Not Likeで「含まない」条件を書く方法</a><ol><li><a href="#toc15" tabindex="0">Not Like演算子の書き方</a></li><li><a href="#toc16" tabindex="0">特定の文字を含まない行だけ処理する</a></li></ol></li><li><a href="#toc17" tabindex="0">大文字・小文字を区別しないVBA Like演算子の比較方法</a><ol><li><a href="#toc18" tabindex="0">Option Compare Textで区別しない設定にする</a></li><li><a href="#toc19" tabindex="0">UCase・LCase関数で変換してから比較する方法</a></li></ol></li><li><a href="#toc20" tabindex="0">Like演算子とInStr関数の使い分け</a><ol><li><a href="#toc21" tabindex="0">InStrは「文字位置を返す」、Likeは「True/Falseを返す」</a></li><li><a href="#toc22" tabindex="0">If文と組み合わせるならLikeが読みやすい</a></li></ol></li><li><a href="#toc23" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc24" tabindex="0">ワイルドカード文字そのものを検索したい</a></li><li><a href="#toc25" tabindex="0">Null値でエラーになる</a></li><li><a href="#toc26" tabindex="0">全角・半角を統一して比較する</a></li><li><a href="#toc27" tabindex="0">Like演算子と正規表現の使い分け</a></li></ol></li><li><a href="#toc28" tabindex="0">まとめ</a><ol><li><a href="#toc29" tabindex="0">この記事で紹介したVBA関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBA Like演算子とは？</span></h2>



<p class="wp-block-paragraph">Like演算子は、<strong>VBAで文字列のパターンマッチング（曖昧比較）を行うための演算子</strong>です。</p>



<h3 class="wp-block-heading"><span id="toc2">Like演算子が解決する「完全一致しか判定できない」問題</span></h3>



<p class="wp-block-paragraph">通常の<code>=</code>演算子は「完全一致」しか判定できません。たとえば「売上報告書」と「売上」を<code>=</code>で比較すると、当然Falseになります。</p>



<pre class="wp-block-code"><code>Debug.Print (&quot;売上報告書&quot; = &quot;売上&quot;)  ' → False（完全一致ではない）</code></pre>



<p class="wp-block-paragraph">でも実務では「&#8221;売上&#8221;という文字を含んでいるか」を調べたい場面のほうがずっと多いですよね。Like演算子なら、こんなふうに書けます。</p>



<pre class="wp-block-code"><code>Debug.Print &quot;売上報告書&quot; Like &quot;*売上*&quot;  ' → True（&quot;売上&quot;を含む）</code></pre>



<p class="wp-block-paragraph"><code>*</code>がワイルドカードです。「任意の文字列」を意味するので、前後に何がついていてもマッチします。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>Like演算子はVBA固有の機能です。Excelのワークシート関数では直接使えません。ワークシート上で同様の処理をしたい場合は、ワイルドカードに対応した<a href="https://mashukabu.com/excel-function-howto-use-countif/">COUNTIF関数</a>や<a href="https://mashukabu.com/excel-function-howto-use-substitute/">SUBSTITUTE関数</a>を使いましょう。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc3">Like演算子の基本構文</span></h3>



<p class="wp-block-paragraph">Like演算子の書き方はとてもシンプルです。</p>



<pre class="wp-block-code"><code>result = string Like pattern</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>要素</th><th>説明</th></tr></thead><tbody><tr><td><code>string</code></td><td>比較したい文字列</td></tr><tr><td><code>pattern</code></td><td>比較に使うパターン文字列（ワイルドカードを含む）</td></tr><tr><td><code>result</code></td><td>一致すれば<code>True</code>、一致しなければ<code>False</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">実際にコードで確認してみましょう。</p>



<pre class="wp-block-code"><code>Sub LikeBasicExample()
    Dim result As Boolean '--- 比較結果 ---

    result = &quot;売上報告書&quot; Like &quot;売上*&quot;
    Debug.Print result  ' → True

    result = &quot;経費精算書&quot; Like &quot;売上*&quot;
    Debug.Print result  ' → False
End Sub</code></pre>



<p class="wp-block-paragraph"><code>"売上<em>"</code>というパターンは「&#8221;売上&#8221;で始まる文字列」を意味します。<code></em></code>がワイルドカードですね。このあと詳しく説明していきます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p><code>Debug.Print</code>の結果は<a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">イミディエイトウィンドウ</a>に表示されます。VBEのメニューから「表示」→「イミディエイトウィンドウ」で表示できます。</p></blockquote>



<p class="wp-block-paragraph">VBEの起動方法や画面構成がわからない方は、<a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBE画面の見方</a>の記事を先にチェックしてみてください。<code>Alt</code> + <code>F11</code>で起動し、「挿入」→「標準モジュール」でコードを書く場所を作ります。</p>



<h2 class="wp-block-heading"><span id="toc4">Like演算子で使えるワイルドカード5種一覧</span></h2>



<p class="wp-block-paragraph">Like演算子の真価を発揮するのが、ワイルドカードです。使えるワイルドカードは全部で5種類あります。</p>



<figure class="wp-block-table"><table><thead><tr><th>ワイルドカード</th><th>説明</th><th>使用例</th><th>マッチする文字列</th></tr></thead><tbody><tr><td><code>*</code></td><td>0文字以上の任意の文字列</td><td><code>"売上*"</code></td><td>売上、売上報告書、売上一覧</td></tr><tr><td><code>?</code></td><td>任意の1文字</td><td><code>"報告?"</code></td><td>報告書、報告A</td></tr><tr><td><code>#</code></td><td>任意の数字1文字（0-9）</td><td><code>"商品###"</code></td><td>商品001、商品123</td></tr><tr><td><code>[charlist]</code></td><td>リスト内の任意の1文字</td><td><code>"[ABC]組"</code></td><td>A組、B組、C組</td></tr><tr><td><code>[!charlist]</code></td><td>リスト外の任意の1文字</td><td><code>"[!ABC]組"</code></td><td>D組、E組（A,B,C以外）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">全角文字も1文字としてカウントされる点がポイントです。</p>



<h3 class="wp-block-heading"><span id="toc5">*（アスタリスク）の使い方</span></h3>



<p class="wp-block-paragraph">もっとも使用頻度が高いワイルドカードです。0文字以上の任意の文字列にマッチします。</p>



<pre class="wp-block-code"><code>Sub WildcardAsterisk()
    '--- 前方一致: &quot;売上&quot;で始まる文字列 ---
    Debug.Print &quot;売上報告書&quot; Like &quot;売上*&quot;    ' → True

    '--- 後方一致: &quot;書&quot;で終わる文字列 ---
    Debug.Print &quot;売上報告書&quot; Like &quot;*書&quot;      ' → True

    '--- 部分一致: &quot;報告&quot;を含む文字列 ---
    Debug.Print &quot;売上報告書&quot; Like &quot;*報告*&quot;   ' → True
End Sub</code></pre>



<p class="wp-block-paragraph">前方一致・後方一致・部分一致のどれも<code>*</code>で対応できます。とても便利ですよね。</p>



<h3 class="wp-block-heading"><span id="toc6">?（クエスチョンマーク）の使い方</span></h3>



<p class="wp-block-paragraph">任意の「1文字」にマッチします。文字数が決まっているときに使うと効果的です。</p>



<pre class="wp-block-code"><code>Sub WildcardQuestion()
    Debug.Print &quot;A-001&quot; Like &quot;?-001&quot;   ' → True
    Debug.Print &quot;AB-001&quot; Like &quot;?-001&quot;  ' → False（2文字なのでマッチしない）
End Sub</code></pre>



<p class="wp-block-paragraph"><code>?</code>は必ず1文字に対応するので、2文字以上ではマッチしません。文字数を厳密に指定したいときに使いましょう。</p>



<h3 class="wp-block-heading"><span id="toc7">#（シャープ）の使い方</span></h3>



<p class="wp-block-paragraph">任意の「数字1文字」にマッチします。数字だけに絞り込みたいときに便利です。</p>



<pre class="wp-block-code"><code>Sub WildcardSharp()
    Debug.Print &quot;商品123&quot; Like &quot;商品###&quot;  ' → True
    Debug.Print &quot;商品12A&quot; Like &quot;商品###&quot;  ' → False（Aは数字ではない）
End Sub</code></pre>



<p class="wp-block-paragraph">商品コードや請求書番号など、数字部分のフォーマットチェックに重宝します。</p>



<h3 class="wp-block-heading"><span id="toc8">[charlist]（文字リスト）の使い方</span></h3>



<p class="wp-block-paragraph">指定した文字のいずれか1文字にマッチします。範囲指定もできるのが便利なところです。</p>



<pre class="wp-block-code"><code>Sub WildcardCharlist()
    '--- A, B, Cのいずれか ---
    Debug.Print &quot;A組&quot; Like &quot;[ABC]組&quot;    ' → True
    Debug.Print &quot;D組&quot; Like &quot;[ABC]組&quot;    ' → False

    '--- A-Zの範囲指定 ---
    Debug.Print &quot;B組&quot; Like &quot;[A-Z]組&quot;    ' → True

    '--- 0-9の範囲指定 ---
    Debug.Print &quot;3組&quot; Like &quot;[0-9]組&quot;    ' → True
End Sub</code></pre>



<p class="wp-block-paragraph"><code>[A-Z]</code>でAからZまで、<code>[0-9]</code>で0から9までを一括指定できます。一つずつ書かなくていいので楽ですよね。</p>



<h3 class="wp-block-heading"><span id="toc9">[!charlist]（否定文字リスト）の使い方</span></h3>



<p class="wp-block-paragraph"><code>[!charlist]</code>とすれば、指定した文字「以外」にマッチします。</p>



<pre class="wp-block-code"><code>Sub WildcardNotCharlist()
    '--- A, B, C以外の1文字 ---
    Debug.Print &quot;D組&quot; Like &quot;[!ABC]組&quot;    ' → True
    Debug.Print &quot;A組&quot; Like &quot;[!ABC]組&quot;    ' → False

    '--- 数字以外の1文字 ---
    Debug.Print &quot;X組&quot; Like &quot;[!0-9]組&quot;    ' → True
End Sub</code></pre>



<p class="wp-block-paragraph">「特定の文字を除外したい」ときに便利です。たとえば「先頭が数字以外の行だけ処理する」といった条件に使えます。</p>



<h2 class="wp-block-heading"><span id="toc10">Like演算子の実践コード</span></h2>



<p class="wp-block-paragraph">ここからは業務で役立つ実践的なコード例を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc11">特定の文字列を含むセルを探す</span></h3>



<p class="wp-block-paragraph">セル範囲の中から、特定の文字を含むセルを見つけて処理する例です。<a href="https://mashukabu.com/excel-vba-howto-use-for/">For文</a>で繰り返し処理を使って、1行ずつチェックしていきます。</p>



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

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

    For i = 2 To lastRow
        If Cells(i, 1).Value Like &quot;*売上*&quot; Then
            Cells(i, 2).Value = &quot;該当&quot;
        Else
            Cells(i, 2).Value = &quot;&quot;
        End If
    Next i
End Sub</code></pre>



<p class="wp-block-paragraph">A列のデータを1行ずつチェックして、「売上」を含むセルのB列に「該当」と書き込みます。<a href="https://mashukabu.com/excel-vba-howto-use-range/">Rangeオブジェクトの基本</a>を押さえたうえで、<a href="https://mashukabu.com/excel-vba-range-cells/">RangeとCellsの使い分け</a>を理解しておくと、もっと柔軟な処理ができますよ。</p>



<h3 class="wp-block-heading"><span id="toc12">ファイル名のパターンチェック</span></h3>



<p class="wp-block-paragraph">ファイル名が規定のフォーマットに沿っているかチェックする例です。<code>#</code>を使って数字部分を検証しています。</p>



<pre class="wp-block-code"><code>Sub CheckFileName()
    Dim sFileName As String '--- 検証対象のファイル名 ---
    sFileName = &quot;報告書_2026-03.xlsx&quot;

    If sFileName Like &quot;報告書_####-##.*&quot; Then
        MsgBox &quot;フォーマットOKです&quot;
    Else
        MsgBox &quot;ファイル名のフォーマットが正しくありません&quot;
    End If
End Sub</code></pre>



<p class="wp-block-paragraph">「報告書_YYYY-MM.拡張子」という命名規則を、<code>#</code>（数字1文字）と<code>*</code>（任意の文字列）で検証しています。ファイルの受け渡しが多い業務で役立ちますよ。</p>



<h3 class="wp-block-heading"><span id="toc13">Select Caseと組み合わせてデータを振り分ける</span></h3>



<p class="wp-block-paragraph">パターンが多い場合は、<a href="https://mashukabu.com/excel-vba-howto-use-select-case/">Select Case文</a>を使うとコードが見やすくなります。</p>



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

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

    For i = 2 To lastRow
        sValue = Cells(i, 1).Value

        Select Case True
            Case sValue Like &quot;東京*&quot;, sValue Like &quot;神奈川*&quot;, sValue Like &quot;千葉*&quot;
                Cells(i, 2).Value = &quot;関東&quot;
            Case sValue Like &quot;大阪*&quot;, sValue Like &quot;京都*&quot;, sValue Like &quot;兵庫*&quot;
                Cells(i, 2).Value = &quot;関西&quot;
            Case sValue Like &quot;愛知*&quot;, sValue Like &quot;静岡*&quot;
                Cells(i, 2).Value = &quot;中部&quot;
            Case Else
                Cells(i, 2).Value = &quot;その他&quot;
        End Select
    Next i
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Select Case True</code>という書き方がポイントです。各<code>Case</code>にLike式を並べることで、複数パターンをすっきり整理できます。<a href="https://mashukabu.com/excel-vba-conditional-branch-explanation/">If文</a>で<code>ElseIf</code>を何個も書くより、ずっと読みやすくなりますよね。</p>



<h2 class="wp-block-heading"><span id="toc14">Not Likeで「含まない」条件を書く方法</span></h2>



<p class="wp-block-paragraph">Like演算子は「含む」判定だけでなく、<strong>「含まない」判定</strong>もできます。<code>Not</code>を組み合わせるだけです。</p>



<h3 class="wp-block-heading"><span id="toc15">Not Like演算子の書き方</span></h3>



<pre class="wp-block-code"><code>If Not sValue Like &quot;*パターン*&quot; Then
    '--- パターンに一致しない場合の処理 ---
End If</code></pre>



<p class="wp-block-paragraph"><code>Not</code>をLikeの前に置くだけで、マッチしなかったときにTrueになります。</p>



<pre class="wp-block-code"><code>Sub NotLikeExample()
    Debug.Print Not &quot;売上報告書&quot; Like &quot;*経費*&quot;  ' → True（&quot;経費&quot;を含まない）
    Debug.Print Not &quot;経費精算書&quot; Like &quot;*経費*&quot;  ' → False（&quot;経費&quot;を含む）
End Sub</code></pre>



<h3 class="wp-block-heading"><span id="toc16">特定の文字を含まない行だけ処理する</span></h3>



<p class="wp-block-paragraph">データクレンジングで「テスト」「仮」などの不要データを除外するときに便利です。</p>



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

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

    '--- 下から上にループ（行削除時のズレ防止） ---
    For i = lastRow To 2 Step -1
        If Cells(i, 1).Value Like &quot;テスト*&quot; _
        Or Cells(i, 1).Value Like &quot;*仮*&quot; Then
            Rows(i).Delete
        End If
    Next i
End Sub</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>行を削除するときは、下から上に向かってループするのがポイントです。上から削除すると行がずれて、チェック漏れが発生します。<a href="https://mashukabu.com/excel-vba-howto-get-lastrow/">最終行の取得方法</a>も合わせて確認しておくと安心です。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc17">大文字・小文字を区別しないVBA Like演算子の比較方法</span></h2>



<p class="wp-block-paragraph">Like演算子はデフォルトで大文字・小文字を区別します。「ABC」と「abc」は別物として扱われるということです。</p>



<p class="wp-block-paragraph">区別をなくしたい場合は、2つの方法があります。</p>



<h3 class="wp-block-heading"><span id="toc18">Option Compare Textで区別しない設定にする</span></h3>



<p class="wp-block-paragraph">モジュールの先頭に<code>Option Compare Text</code>と記述します。そのモジュール内のすべての文字列比較で、大文字・小文字が区別されなくなります。</p>



<pre class="wp-block-code"><code>Option Compare Text

Sub CompareIgnoreCase()
    Debug.Print &quot;ABC&quot; Like &quot;abc&quot;  ' → True（区別しない）
    Debug.Print &quot;Hello&quot; Like &quot;hello*&quot;  ' → True
End Sub</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p><code>Option Compare Text</code>はLike演算子だけでなく、<code>=</code>による比較などモジュール内のすべての文字列比較に影響します。<a href="https://mashukabu.com/excel-vba-option-explicit/">Option Explicit</a>と同様に、モジュール先頭に書く宣言文です。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc19">UCase・LCase関数で変換してから比較する方法</span></h3>



<p class="wp-block-paragraph">比較する前に、両方の文字列を大文字（または小文字）に統一する方法です。特定の箇所だけ大文字小文字を無視したいときに使います。</p>



<pre class="wp-block-code"><code>Sub CompareWithUCase()
    Dim sTarget As String '--- 比較対象の文字列 ---
    sTarget = &quot;Hello World&quot;

    '--- 両方を大文字に変換して比較 ---
    If UCase(sTarget) Like UCase(&quot;hello*&quot;) Then
        Debug.Print &quot;一致しました&quot;
    End If
End Sub</code></pre>



<ul class="wp-block-list"><li><strong>大文字に変換</strong>: <code>UCase(文字列)</code></li><li><strong>小文字に変換</strong>: <code>LCase(文字列)</code></li></ul>



<p class="wp-block-paragraph">大事なのは、<strong>比較する両方の文字列を変換する</strong>ことです。片方だけ変換して「一致しない！」と焦ることがないように気をつけてくださいね。</p>



<figure class="wp-block-table"><table><thead><tr><th>方法</th><th>メリット</th><th>デメリット</th></tr></thead><tbody><tr><td><code>Option Compare Text</code></td><td>記述が1行で済む</td><td>モジュール全体に影響する</td></tr><tr><td><code>UCase</code>/<code>LCase</code></td><td>影響範囲を限定できる</td><td>毎回変換の記述が必要</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特別な理由がなければ<code>Option Compare Text</code>がシンプルでおすすめです。一部の比較だけ無視したい場合は<code>UCase</code>/<code>LCase</code>を使いましょう。</p>



<h2 class="wp-block-heading"><span id="toc20">Like演算子とInStr関数の使い分け</span></h2>



<p class="wp-block-paragraph">「文字列に特定の文字が含まれるか」を調べる方法は、Like演算子のほかにInStr関数もあります。どう使い分けるか迷う方も多いので、整理しておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc21">InStrは「文字位置を返す」、Likeは「True/Falseを返す」</span></h3>



<pre class="wp-block-code"><code>Sub ComparelikeAndInStr()
    Dim sTarget As String '--- 比較対象 ---
    sTarget = &quot;売上報告書&quot;

    '--- Like演算子: True/Falseを返す ---
    Debug.Print sTarget Like &quot;*報告*&quot;    ' → True

    '--- InStr関数: 見つかった位置（数値）を返す ---
    Debug.Print InStr(sTarget, &quot;報告&quot;)   ' → 3（3文字目に見つかった）
End Sub</code></pre>



<p class="wp-block-paragraph">InStr関数は「何文字目にあるか」という位置情報を返します。見つからなければ0を返すので、<code>If InStr(...) > 0 Then</code> と書いて含有チェックもできます。</p>



<h3 class="wp-block-heading"><span id="toc22">If文と組み合わせるならLikeが読みやすい</span></h3>



<p class="wp-block-paragraph">単純に「含むかどうか」だけを知りたいなら、Like演算子のほうがコードの意図が伝わりやすいです。</p>



<pre class="wp-block-code"><code>'--- Like演算子: 直感的に読める ---
If sValue Like &quot;*売上*&quot; Then

'--- InStr関数: 「&gt; 0」の意味を知っている必要がある ---
If InStr(sValue, &quot;売上&quot;) &gt; 0 Then</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>Like演算子</th><th>InStr関数</th></tr></thead><tbody><tr><td>戻り値</td><td>True/False</td><td>位置（数値）</td></tr><tr><td>部分一致</td><td><code>"<em>文字</em>"</code></td><td><code>InStr(文字列, 検索文字)</code></td></tr><tr><td>前方一致</td><td><code>"文字*"</code></td><td><code>Left(文字列, n) = "文字"</code></td></tr><tr><td>ワイルドカード</td><td>5種使える</td><td>使えない</td></tr><tr><td>位置の取得</td><td>できない</td><td>できる</td></tr><tr><td>読みやすさ</td><td>直感的</td><td>やや技術的</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>使い分けのまとめ</strong>: 「含む/始まる/パターン一致」の判定 → <strong>Like演算子</strong>。「何文字目にあるか」の位置情報が必要 → <strong>InStr関数</strong>。</p>



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



<p class="wp-block-paragraph">Like演算子を使うときによく遭遇するトラブルと、その対処法をまとめました。</p>



<figure class="wp-block-table"><table><thead><tr><th>トラブル</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td>ワイルドカード文字自体を検索したい</td><td><code>*</code>や<code>?</code>がワイルドカードとして解釈される</td><td><code>[*]</code>や<code>[?]</code>のように<code>[]</code>で囲む</td></tr><tr><td>Null値で結果がNullになる</td><td>Like演算子にNull値が入る</td><td><code>IsNull</code>で事前チェックする</td></tr><tr><td>大文字・小文字が区別される</td><td>デフォルトの<code>Option Compare Binary</code></td><td><code>Option Compare Text</code>か<code>UCase</code>/<code>LCase</code>で統一</td></tr><tr><td>全角・半角が区別される</td><td>全角と半角は別の文字として扱われる</td><td><code>StrConv</code>で事前に統一する</td></tr><tr><td>マクロが実行できない</td><td><code>.xlsx</code>形式で保存している</td><td><code>.xlsm</code>（マクロ有効ブック）で保存し直す</td></tr><tr><td>セキュリティ警告が出る</td><td>マクロが無効に設定されている</td><td>「コンテンツの有効化」をクリックする</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc24">ワイルドカード文字そのものを検索したい</span></h3>



<p class="wp-block-paragraph"><code>*</code>や<code>?</code>自体を検索したい場合は、<code>[</code>と<code>]</code>で囲みます。</p>



<pre class="wp-block-code"><code>Sub SearchLiteralWildcard()
    '--- 「*」そのものを含む文字列を検索 ---
    Debug.Print &quot;価格*未定&quot; Like &quot;*[*]*&quot;  ' → True
    Debug.Print &quot;価格は未定&quot; Like &quot;*[*]*&quot; ' → False
End Sub</code></pre>



<h3 class="wp-block-heading"><span id="toc25">Null値でエラーになる</span></h3>



<p class="wp-block-paragraph">Like演算子の対象にNull値が入ると、結果もNullになります。事前にチェックしておくのが安全です。</p>



<pre class="wp-block-code"><code>Sub SafeLikeCheck()
    Dim vValue As Variant '--- セルの値（Null対応のためVariant型） ---
    vValue = Cells(1, 1).Value

    If Not IsNull(vValue) Then
        If CStr(vValue) Like &quot;*売上*&quot; Then
            Debug.Print &quot;一致しました&quot;
        End If
    End If
End Sub</code></pre>



<p class="wp-block-paragraph">ここではVariant型を使っています。VBAの型宣言に不安がある方は、<a href="https://mashukabu.com/excel-vba-variable-explanation/">変数の使い方</a>の記事で基本を押さえておきましょう。変数の中身を確認したいときは、<a href="https://mashukabu.com/excel-vbe-watch-window-explanation/">ウォッチウィンドウ</a>で監視すると便利です。</p>



<h3 class="wp-block-heading"><span id="toc26">全角・半角を統一して比較する</span></h3>



<p class="wp-block-paragraph">全角と半角が混在するデータを比較するときは、<code>StrConv</code>関数で事前に統一しましょう。<a href="https://mashukabu.com/excel-vba-howto-use-trim/">Trim関数</a>で前後の空白を除去してから比較すると、さらに精度が上がります。</p>



<pre class="wp-block-code"><code>Sub CompareWithStrConv()
    Dim sTarget As String '--- 比較対象の文字列 ---
    sTarget = &quot;ABC123&quot;

    '--- 半角に変換してから比較 ---
    If StrConv(sTarget, vbNarrow) Like &quot;ABC*&quot; Then
        Debug.Print &quot;一致しました&quot;  ' → True
    End If
End Sub</code></pre>



<h3 class="wp-block-heading"><span id="toc27">Like演算子と正規表現の使い分け</span></h3>



<p class="wp-block-paragraph">「Like演算子で対応できないパターンがある」と感じたら、正規表現（RegExp）を検討してみてください。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>Like演算子</th><th>正規表現（RegExp）</th></tr></thead><tbody><tr><td>参照設定</td><td>不要</td><td>Microsoft VBScript Regular Expressions が必要</td></tr><tr><td>学習コスト</td><td>低い</td><td>高い</td></tr><tr><td>対応パターン</td><td>前方/後方/部分一致、文字リスト</td><td>量指定子、グループ化、後方参照など</td></tr><tr><td>向いている場面</td><td>シンプルなパターンマッチ</td><td>複雑なパターン、置換処理</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">簡単なパターンマッチならLike演算子、複雑なパターンなら正規表現、と使い分けるのがおすすめです。</p>



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



<p class="wp-block-paragraph">Like演算子とワイルドカードの使い方を振り返っておきましょう。</p>



<ul class="wp-block-list"><li><strong>Like演算子</strong>は文字列の曖昧比較（パターンマッチング）に使う</li><li>ワイルドカードは5種類: <code>*</code>（0文字以上）、<code>?</code>（1文字）、<code>#</code>（数字1文字）、<code>[charlist]</code>（リスト内）、<code>[!charlist]</code>（リスト外）</li><li><strong>Not Like</strong>で「含まない」条件も書ける</li><li>大文字・小文字を無視するには<code>Option Compare Text</code>か<code>UCase</code>/<code>LCase</code>を使う</li><li>単純な含有チェックはLike演算子、位置情報が必要ならInStr関数を使う</li><li><a href="https://mashukabu.com/excel-vba-conditional-branch-explanation/">If文</a>や<a href="https://mashukabu.com/excel-vba-howto-use-for/">For文</a>、<a href="https://mashukabu.com/excel-vba-howto-use-select-case/">Select Case文</a>と組み合わせると実務で活躍する</li><li>行削除は下から上にループするのがポイント</li></ul>



<p class="wp-block-paragraph">Like演算子は使いこなせると、データの振り分けやファイル名チェックなど、日常業務の自動化がぐっと楽になります。まずはこの記事のコード例をコピーして、実際に動かしてみてください。VBA全体の学習ロードマップを知りたい方は、<a href="https://mashukabu.com/excel-vba-learning-roadmap/">VBAの学習順番ガイド</a>も参考にしてみてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc29">この記事で紹介したVBA関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-vba-conditional-branch-explanation/">VBA If文の使い方</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-for/">VBA For文の使い方</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-select-case/">VBA Select Case文の使い方</a></li><li><a href="https://mashukabu.com/excel-vba-howto-get-lastrow/">VBA 最終行を取得する方法</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-range/">VBA Rangeの使い方</a></li><li><a href="https://mashukabu.com/excel-vba-range-cells/">VBA RangeとCellsの使い分け</a></li><li><a href="https://mashukabu.com/excel-vba-variable-explanation/">VBA 変数の使い方</a></li><li><a href="https://mashukabu.com/excel-vba-learning-roadmap/">VBAの学習順番ガイド</a></li><li><a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBE画面の見方</a></li><li><a href="https://mashukabu.com/excel-vba-option-explicit/">VBA Option Explicitの使い方</a></li><li><a href="https://mashukabu.com/excel-vba-howto-use-trim/">VBA Trim関数の使い方</a></li><li><a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">VBE イミディエイトウィンドウの使い方</a></li><li><a href="https://mashukabu.com/excel-vbe-watch-window-explanation/">VBE ウォッチウィンドウの使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-countif/">COUNTIF関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-substitute/">SUBSTITUTE関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-vba-like-wildcard/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
