VBAで自動化 VBA一覧 セル・値の取得と貼り付け 値の一部

【VBA】複数条件で文字列の一部を抽出する方法を実務例で徹底解説

Excelで業務データを扱っていると、「文字列の一部を取り出したい」という場面は頻繁に発生します。
しかし実務では、単純に先頭や末尾を切り出すだけでは対応できず、データの形式が複数存在することがほとんどです。

たとえば、

  • 「商品名-型番」と「商品名_型番」が混在している
  • 括弧付きの補足情報がある場合とない場合がある
  • 数字だけ取り出したいが、文字列内の位置が毎回異なる

こうしたケースでは、1つの処理だけでは対応できず、複数条件を考慮した抽出ロジックが必要になります。

この記事では、Excel VBAを使って
「複数条件で文字列の一部を正確かつ安定して抽出する方法」を、
基礎から実務レベルまで体系的に解説します。

単なるコード集ではなく、「なぜその書き方が必要なのか」「実務で壊れにくい設計とは何か」まで理解できる構成になっています。

✅ 複数条件で文字列抽出が必要になる理由

文字列抽出は簡単そうに見えて、実務では失敗しやすい処理の代表格です。
条件が1つだけだと思い込んで作った処理は、少しデータが変わっただけで簡単に壊れます。
特にExcel VBAは「一度動いたから安心」と思われがちですが、条件設計が甘いと後から必ず問題が出ます。
ここでは、なぜ複数条件を前提に設計すべきなのかを整理します。
この考え方を理解していないと、後半のコードも意味を成しません。
まずは実務の現実を把握してください。

・実務データは必ず揺れる

理想的には、すべてのセルが同じ形式で入力されていれば楽ですが、現実はそうはいきません。

  • 手入力されたデータ
  • 他システムからコピーされた文字列
  • 過去データと新データの混在

このような状況では、形式の揺れを前提にした処理が必須になります。

・関数では限界がある理由

Excel関数でも条件分岐は可能ですが、

  • 数式が長くなり可読性が下がる
  • 条件追加のたびに修正が困難
  • エラー原因の特定が難しい

といった問題が出やすくなります。
VBAを使うことで、条件を明示的に分岐でき、保守性が大きく向上します。


✅ If文を使った複数条件抽出の基本構造

複数条件を扱う際の基本は If / ElseIf / Else です。
この構造を正しく理解していないと、抽出結果が不安定になります。
特に条件の「順番」は、実務で非常に重要なポイントです。
ここを適当に書くと、正しい条件が無視されることがあります。

・基本構文の考え方

Dim txt As String
Dim result As String

txt = Range("A1").Value

If 条件1 Then
    ' 処理A
ElseIf 条件2 Then
    ' 処理B
Else
    ' それ以外
End If

ポイント

  • 条件は上から順に評価される
  • 最初に一致した条件のみ実行される
  • 条件の優先順位を明確にする必要がある

・区切り文字が異なる場合の抽出例

If InStr(txt, "-") > 0 Then
    result = Split(txt, "-")(1)
ElseIf InStr(txt, "_") > 0 Then
    result = Split(txt, "_")(1)
End If

実務での注意点


✅ InStr を組み合わせた条件判定と抽出

InStrは、複数条件抽出の中核となる関数です。
位置が固定されていない文字列でも柔軟に対応できます。
ただし、使い方を誤ると想定外の結果を返すため注意が必要です。

・特定文字を含むかどうかで分岐する

If InStr(txt, "(") > 0 And InStr(txt, ")") > 0 Then
    result = Mid(txt, InStr(txt, "(") + 1, InStr(txt, ")") - InStr(txt, "(") - 1)
End If

なぜこの書き方が必要か

  • 開始位置と終了位置の両方を確認する
  • 片方だけ存在するケースを防ぐ

・複数のInStr条件を組み合わせる例

If InStr(txt, "-") > 0 And InStr(txt, "A") > 0 Then
    ' 条件を満たす場合のみ処理
End If

実務ポイント

  • And / Or の使い分けを明確にする
  • 条件が増えたら可読性を意識する

✅ Select Case を使った条件分岐の整理

条件が増えてくると、If文だけでは読みにくくなります。
その場合は Select Case を使うことで、構造を整理できます。

・Select Case True を使った書き方

Select Case True
    Case InStr(txt, "-") > 0
        result = Split(txt, "-")(1)
    Case InStr(txt, "_") > 0
        result = Split(txt, "_")(1)
    Case Else
        result = ""
End Select

メリット


✅ 正規表現を使った複数条件抽出(実務向け)

条件が複雑になるほど、正規表現の価値が高まります。
「複数条件=If文」と考えがちですが、1つの正規表現で条件を表現できるケースも多くあります。

・数字を含む場合のみ抽出する例

Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")

reg.Pattern = "\d+"
reg.Global = False

If reg.Test(txt) Then
    result = reg.Execute(txt)(0)
End If

実務での強み

  • データ形式が多少変わっても対応できる
  • 条件追加が比較的容易

・英数字混在パターンの抽出

reg.Pattern = "[A-Z]{2}\d{3}"

想定例


✅ 複数条件 × 正規表現を組み合わせた設計例

If InStr(txt, "ID") > 0 Then
    reg.Pattern = "ID\d+"
ElseIf InStr(txt, "NO") > 0 Then
    reg.Pattern = "NO\d+"
End If

設計の考え方

  • 大枠の条件はIf文
  • 抽出ルールは正規表現

この分離が、保守性を大きく高めます。


✅ 大量データを扱う際の注意点(処理速度)

複数条件抽出は処理が重くなりがちです。
セルを1つずつ処理すると、業務では使い物にならない速度になることもあります。

・配列処理を前提にする

  • Rangeを配列に読み込む
  • 配列上で条件判定・抽出
  • 結果を一括で書き戻す

この設計だけで、処理時間が大幅に短縮されます。

参考:【VBA】2次元配列を使用して一括で格納・格納データをループで処理する方法


✅ UiPath・RPAを前提にした抽出ロジック設計

最近では、Excel VBA単体ではなく、RPAと連携した運用が増えています。
この場合、VBA側で文字列抽出を安定させておくことが重要です。

  • RPAでファイル取得
  • VBAで複数条件抽出
  • RPAで結果を別システムへ登録

この役割分担により、フロー全体が非常にシンプルになります。


 

✅ まとめ:複数条件での文字列抽出をVBAで安定させる考え方

  • 実務データは必ず形式が揺れる
  • 複数条件を前提に設計することが重要
  • If / ElseIf の順序が結果を左右する
  • InStr は位置不定データに強い
  • 正規表現を使うことで条件を集約できる
  • 配列処理で速度問題を回避する
  • RPA連携を見据えた設計が将来的に有効

複数条件での文字列抽出は、単なるテクニックではなく業務を止めないための設計力です。
この記事の内容をベースに、自社データに合ったロジックを構築してみてください。
結果として、Excel作業の信頼性と効率が大きく向上します。

参考:【VBA】区切り文字(カンマ・スラッシュ)で文字列を分割して取得する

    -VBAで自動化, VBA一覧, セル・値の取得と貼り付け, 値の一部