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

【VBA】セル内の特定パターンを抽出する方法(実務例付き)

Excelでデータを扱っていると、「セル内の一部だけを取り出したい」という場面は非常に多くあります。
商品コードの一部、日付、連番、括弧内の文字、ハイフン区切りの番号など、見た目は規則的でも手作業では面倒なケースは少なくありません。

関数で対応しようとして途中で式が複雑化し、結局VBAで処理したほうが早かった、という経験がある方も多いのではないでしょうか。
特に実務では「特定のパターンに合致する文字列だけを安定して抽出する」ことが求められます。

この記事では、Excel VBAを使ってセル内の特定パターンを抽出する方法を、基礎から実務レベルまで丁寧に解説します。
単なるコード紹介ではなく、「なぜその方法を使うのか」「どんな場面で使えるのか」まで理解できる構成にしています。

✅ VBAでセル内の特定パターンを抽出する基本的な考え方

セル内の文字列抽出は、一見シンプルに見えて設計を誤ると破綻しやすい処理です。
特に実務では「想定外のデータ」が必ず混ざるため、表面的なコードだけを真似すると後で修正に追われます。
ここでは、具体的なコードに入る前に、なぜVBAでパターン抽出を行うのか、その前提を整理します。
関数とVBAの違いを理解せずに進めると、処理速度や保守性で大きな差が出ます。
後から処理を拡張したい場合にも、この考え方を押さえているかどうかで作業量が大きく変わります。
まずは「抽出処理の設計視点」を身につけてください。

・なぜVBAで抽出処理を行うのか

Excel関数でも文字列抽出は可能ですが、以下のようなケースでは限界があります。

  • パターンが複数存在する
  • データ形式が完全に統一されていない
  • 抽出条件を途中で変更する可能性がある
  • 大量データを高速に処理したい

VBAで処理することで、条件分岐・例外処理・拡張性を確保できます。

・「特定パターン」とは何を指すのか

この記事で扱う「特定パターン」とは、以下のようなものです。

  • 数字のみ
  • 英数字の組み合わせ
  • 記号で囲まれた文字列
  • 先頭・末尾が決まっている文字列
  • 一定の書式ルールを持つ文字列

これらを「ルール」として扱い、安定して抽出するのが目的です。


✅ Left / Mid / Right を使った基本的な抽出方法

VBAで最も基本となるのが、Left・Mid・Right関数を使った方法です。
この方法は理解しやすい反面、パターンが固定されていないと破綻しやすいという特徴があります。
それでも、実務では今なお頻繁に使われるため、まずは確実に押さえておく必要があります。
特に「位置が決まっているデータ」に対しては非常に有効です。
ここでは、ありがちな実務データを例に解説します。

・先頭から特定文字数を抽出する例

Dim result As String
result = Left(Range("A1").Value, 5)

処理の考え方

  • セルA1の先頭から5文字を取得
  • 商品コードや固定フォーマットの番号に有効

注意点

  • 文字数が不足している場合もエラーにならない
  • フォーマット変更に弱い

・途中の文字列を抽出する例

Dim result As String
result = Mid(Range("A1").Value, 4, 3)

処理の考え方

  • 4文字目から3文字分を取得
  • 「区切り位置が固定」の場合に有効

・末尾から抽出する例

Dim result As String
result = Right(Range("A1").Value, 2)

実務での使いどころ


✅ InStr を使って特定文字を基準に抽出する方法

実務で最も使用頻度が高いのが、InStrを使った抽出です。
位置が固定されていないデータに対しても柔軟に対応できます。
ここを理解していないと、「なぜ抽出できないのか」が分からなくなります。
後半の応用・正規表現にもつながる重要な考え方なので、丁寧に見てください。

・特定文字より前を抽出する

Dim pos As Long
pos = InStr(Range("A1").Value, "-")

If pos > 0 Then
    result = Left(Range("A1").Value, pos - 1)
End If

ポイント

  • InStrは見つからない場合「0」を返す
  • 必ず If 文でチェックする

・特定文字より後を抽出する

Dim pos As Long
pos = InStr(Range("A1").Value, "-")

If pos > 0 Then
    result = Mid(Range("A1").Value, pos + 1)
End If

実務例

  • 「商品名-型番」から型番だけ取得
  • 「部署名_担当者名」から担当者名を取得

✅ 複数条件でパターンを判定しながら抽出する方法

実務では「この形式ならA、別の形式ならB」という処理が頻発します。
単純な抽出処理では対応できず、条件分岐と組み合わせる設計力が求められます。
ここを雑に作ると、後から修正が雪だるま式に増えます。

・If文でパターンを分岐する例

Dim txt As String
txt = Range("A1").Value

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

実務ポイント


✅ 正規表現を使ったパターン抽出(実務向け)

複雑なパターン抽出では、正規表現が圧倒的に有効です。
「難しそう」という理由で避けられがちですが、一度仕組みを理解すれば保守性が非常に高いのが特徴です。
特にデータ量が多い業務では、正規表現を使うかどうかで作業効率が大きく変わります。

・数字だけを抽出する例

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

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

If reg.Test(Range("A1").Value) Then
    result = reg.Execute(Range("A1").Value)(0)
End If

なぜ正規表現が有効か


・括弧内の文字列を抽出する例

reg.Pattern = "\((.*?)\)"

実務例

  • 注釈
  • 補足情報
  • バージョン表記

✅ 大量データを高速に処理するための設計ポイント

セルを1つずつ処理すると、処理時間が極端に伸びます。
実務では「動くか」より「現実的な時間で終わるか」が重要です。

・配列で一括処理する考え方

  • Range → 配列に格納
  • 配列上で処理
  • 結果を一括出力

この設計だけで、処理速度は数倍〜数十倍変わります。

参考:【VBA】セルの値を変数配列に取得:ループ処理


✅ UiPath・RPAと組み合わせた実務活用の考え方

近年では、Excel VBA単体ではなく、UiPathなどのRPAと組み合わせる運用も増えています。
例えば、

  • RPAでファイル取得
  • VBAでパターン抽出・整形
  • RPAで別システムへ投入

という流れです。

VBAで「抽出ロジック」を安定させておくことで、RPA側のフローが非常にシンプルになります。
結果として、保守コストの低い自動化が実現できます。


 

✅ まとめ:セル内の特定パターン抽出をVBAで安定運用する方法

  • VBAを使うことで柔軟なパターン抽出が可能
  • Left / Mid / Right は固定フォーマット向け
  • InStr は実務で最も使用頻度が高い
  • 正規表現は複雑な条件ほど真価を発揮する
  • 配列処理で速度問題を回避する
  • RPAと組み合わせることで業務全体を自動化できる

セル内の特定パターン抽出は、単なるテクニックではなく業務設計の一部です。
この記事の内容をベースに、自社データに合った抽出ロジックを構築してみてください。
結果として、日々のExcel作業が確実に軽くなります。

参考:【VBA】文字列の先頭・末尾を自動判定して一部を取得する方法【実務向け完全解説】

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