【簡単エクセル/Excel VBA マクロ】Select Case ステートメントで部分一致を実装する方法|条件分岐 #003


いつもありがとうございます!
皆さん、こんにちは。ご覧いただきありがとうございます。
“日々の業務にちょうどいい自動化を”──
業務改善アプリケーションの作成を行っている「ソフトデザイン工房」 です。
Select Case ステートメントは、プログラムに条件分岐を設定する方法です。基本的な使い方は、こちらの記事で紹介しております。
この記事では、Select Case ステートメントの条件に"部分一致"を実装する方法を解説いたします。
この記事が、あなたのVBAマクロの価値をさらに高める一助となれば幸いです。
VBAを活用して、自分自身や身近なコミュニティに合ったアプリケーションを作成し、仕事量は半分に、成果は2倍に──そんな未来を目指すあなたを応援しています。
VBAにおける条件分岐処理の全体像
VBAにおける「条件分岐処理」には、大きく分けて「If...Then...Else ステートメント」 と 「Select Case ステートメント」の2つの方法があります。「条件分岐処理」の全体像は以下の記事で解説しています。
この記事では「条件分岐処理」の一部である「Select Case ステートメント」において、条件に"部分一致"を実装する方法を解説します。
VBAの「Select Case ステートメント」で部分一致を実装する方法

Select Case ステートメントの基本構文を以下に示します。
' Select Case ステートメント開始
Select Case 条件式
' 条件 A が条件式を満たす場合の処理
Case 条件A
処理1
' 条件 B が条件式を満たす場合の処理
Case 条件B
処理2
' 条件 C が条件式を満たす場合の処理
Case 条件C
処理3
' 上記すべての条件が偽(False)である場合の処理
Case Else
処理4
' Select Case ステートメント終了
End Selectそれに対して、Select Case ステートメントで"部分一致"を実装する方法は以下のような構文になります。後のセクションで詳述しますが、部分一致は Instr 関数で実現しています。
' 変数宣言
Dim str as String
' 変数に値を代入
str = "your string"
' Select Case ステートメント
Select Case True
Case Instr(str, "検索対象文字列1") > 0
' "検索対象文字列1"が含まれている場合の処理
Case Instr(str, "検索対象文字列2") > 0
' "検索対象文字列2"が含まれている場合の処理
Case Else
' 上記にいずれも当てはまらない場合の処理
End Select具体例を示します。
このコードは、以下のような構造になっています。
- Do While ループでシートのA列を走査
- Select Case ステートメントでA列の値を評価
- 評価結果に応じた処理を行う
Sub sample()
' 変数宣言
Dim str As String
Dim wb As Workbook
Dim ws As Worksheet
Dim row_idx As Long ' 行番号変数
' ワークブックとワークシートを変数として取得
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
' 行番号変数に初期値を代入
row_idx = 1
' Do While ステートメントでA列を走査
Do While ws.Cells(row_idx, 1) <> ""
' 変数 str に値を代入
str = ws.Cells(row_idx, 1)
' 各 Case の条件式が True であるかどうかを評価する Select Case ステートメントを開始
Select Case True
' 評価対象に"基本"が含まれている場合の処理
Case InStr(str, "基本") > 0
ws.Cells(row_idx, 2) = "基本"
' 評価対象に"応用"が含まれている場合の処理
Case InStr(str, "応用") > 0
ws.Cells(row_idx, 2) = "応用"
' 上記のいずれの条件にも当てはまらない場合の処理
Case Else
ws.Cells(row_idx, 2) = "N/A"
End Select
'行番号変数に1を加え、次の行に進む
row_idx = row_idx + 1
' Do While ステートメントの最初に戻り、同じ処理を繰り返す
Loop
End Sub

解説します。
変数の宣言
' 変数宣言
Dim str As String
Dim wb As Workbook
Dim ws As Worksheet
Dim row_idx As Long ' 行番号変数冒頭の部分は変数を宣言しています。
Dim 変数 As データ型 の構文で宣言します。
これによって各変数は As 以降で指定したデータ型のデータを格納することができるようになります。
尚、"Workbook"はワークブック、"Worksheet"はワークシート、"Long"は整数を格納するためのデータ型を意味しています。
ワークブックとワークシートをオブジェクト変数として取得
' ワークブックとワークシートを変数として取得
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)次に、ワークブックを開くと同時にオブジェクト変数として取得しています。合わせてワークシートもオブジェクト変数として格納しています。
wb.Worksheets(1)のカッコ内の数値1は、ワークブック内の1番目のワークシート、つまり左端のワークシートを意味しています。
Do While ステートメントでA列を走査
' 行番号変数に初期値にを代入
row_idx = 1次に Do While ステートメントでA列を走査していきます。まずはじめに行番号変数に初期値を代入しています。
' Do While ステートメントでA列を走査;A列の値が空欄でない間ずっと処理を繰り返す
Do While ws.Cells(row_idx, 1) <> ""次に、Do while ステートメントを開始します。
これは、A列のセルが空欄でない間はずっと処理を繰り返しなさい、という命令です。論理演算子 <> は「等しくない」という意味を表します。つまり、この場合の <>"" は「空欄に等しくない」、即ち「空欄ではない」という意味です。
尚、Do While ステートメントの使い方は、こちらの記事で解説しています。
Select Case ステートメントを用いて条件分岐処理を実装
' 各 Case の条件式が True であるかどうかを評価する Select Case ステートメントを開始
Select Case True各 Case の条件式が True であるかどうかを評価する Select Case ステートメントを開始しています。
' 評価対象に"基本"が含まれている場合の処理
Case InStr(str, "基本") > 0
ws.Cells(row_idx, 2) = "基本"
' 評価対象に"応用"が含まれている場合の処理
Case InStr(str, "応用") > 0
ws.Cells(row_idx, 2) = "応用"
' 上記のいずれの条件にも当てはまらない場合の処理
Case Else
ws.Cells(row_idx, 2) = "N/A"各 Case の条件式と、条件式が True だった場合の処理を記述です。"部分一致"は、ここで登場する Instr 関数で実現しています。Instr 関数は、被評価文字列の中に、検索対象文字列が最初に現れる"位置"を返す関数です。つまり、">0" が True であれば指定した文字列があるということを意味しますので、部分一致は True とみなすことができます。
尚、Instr 関数の基本構文は以下のようになっています。
Instr([start], "被評価文字列", "検索対象文字列", [compare])
' start(オプション):検索を開始する位置
' compare(オプション):文字列の比較方法。
' 指定しない場合は vbBinaruCompare(大文字・小文字、全角・半角を区別あり、完全一致)
' 単純にテキスト比較を行う場合は vbTextCompare(大文字・小文字、全角・半角区別なし)次の行の解説に進めます。
End SelectSelect Case ステートメントを終了します。
' 行番号変数の値に1を加え、次の行に進む
row_idx = row_idx + 1行番号変数の値に1を加えて、次の行に移動します。
LoopDo While ステートメントの最初に戻り、繰り返し同じ処理を実行します。
以上が、Select Case ステートメントの Case に部分一致を実装する方法です。

ご覧いただきありがとうございました!
VBAスキルアップの参考情報
近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。
分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。
とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。
全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。
そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。
「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。
VBAのスキルアップ
VBAを学び始めるなら
入門書は、どれを選んでも大きな差はないように感じます。
どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。
もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
基礎を超えて力をつけたいなら
私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。
今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。
このレベルの本を一冊持っておくことに、損はないでしょう。
資格で能力を証明したいなら
VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。
特に「スタンダード」の方は上級者向けです。
あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。
以下の公式テキストが販売されています。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。
これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
今はAIにコードを尋ねれば、答えが返ってくる時代です。
しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。
こちらの記事でも紹介しています。もしよろしければご覧ください。
【初心者歓迎】無料相談受付中

いつもありがとうございます!
限られた時間をより良く使い、日本の生産性を高めたい──
みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。
お気軽にご相談ください。
こちらの記事でも紹介しております。
おわりに


ご覧いただきありがとうございました。
今回の記事では、「条件分岐処理」の中の「Select Case ステートメント」において部分一致を実装する方法を解説いたしました。
お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。
皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。
なお、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。




