【VBA】数字のみ抽出するマクロの作り方!VBA初心者にも使えるサンプルコード集
文字列から数字だけを抽出したい!文章の途中にある数字を抽出したい!!
こんな問題は『数字抽出マクロ』で自動化できます。
『数字抽出マクロ』はいろんなエクセル業務に応用可能
- 郵便番号の数字だけを抽出する
- 契約書に記載されている金額の数字だけを抽出する
- 「DC1005AY」のような文字列から数字だけを抽出する
作り方を理解すればどんな処理でも実現可能
商品管理や発注管理の効率を飛躍的にアップさせることができます。
VBAで数字のみ抽出する3つの基本手法
VBAで文字列から数字だけを取り出す方法は主に3つあります。
- Val関数を使った抽出
- 正規表現を使った抽出
- IsNumeric関数とMid関数を組み合わせを使った抽出
それぞれに特徴があるので、業務内容に合わせて使い分けながら導入してください。
Val関数を使った簡単な数字抽出方法
Val関数は文字列の先頭から数字を読み取る最も簡単な方法です。
Val関数の特徴は、
文字列の最初にある数字部分だけを自動的に判別して数値に変換してくれる
です。
たとえば、
「123ABC456」という文字列にVal関数を使うと、先頭の「123」だけを数値として取得
します。
Val関数を使った抽出マクロのサンプルコードがこちら
Sub ValSample()
Dim str As String
Dim result As Double
str = "123円です"
result = Val(str)
MsgBox result ' 結果: 123
End Sub
このようにVal関数は非常にシンプルで、VBA初心者でも迷わず使えるのが最大の魅力です。
正規表現を使った高度な数字抽出テクニック
正規表現(RegExpオブジェクト)を使えば複雑な条件で数字を抽出できるようになります。
この方法の特徴は、
文字列のどこにある数字でも自由自在に取り出せる
です。
たとえば、
「商品A:1500円、商品B:2800円」のような文字列から全ての金額を一度に抽出する
なんて処理が可能です。
正規表現を使った抽出マクロのサンプルコードがこちら
Sub RegexSample()
Dim str As String
Dim regex As Object
Dim matches As Object
str = "価格は1500円、送料300円です"
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "\d+"
regex.Global = True
Set matches = regex.Execute(str)
MsgBox matches(0).Value ' 結果: 1500
End Sub
正規表現をマスターすることで、どんな複雑な文字列処理も思いのままにできるようになります。
IsNumeric関数とMid関数を組み合わせた抽出方法
IsNumeric関数とMid関数を組み合わせる方法は、文字を一文字ずつチェックして数字だけを確実に抽出する安全な手法です。
この方法の特徴は、
エラーが起きにくく、どんな文字列でも安定して処理できる
です。
特にデータベースから取得した不規則な文字列を処理する際に、よく活用されます。
IsNumeric関数とMid関数の組み合わせを使った抽出マクロのサンプルコードがこちら
Sub IsNumericSample()
Dim str As String
Dim i As Integer
Dim result As String
str = "A1B2C3"
For i = 1 To Len(str)
If IsNumeric(Mid(str, i, 1)) Then
result = result & Mid(str, i, 1)
End If
Next i
MsgBox result ' 結果: 123
End Sub
この方法は処理速度は劣りますが、確実性が高いため重要なデータ処理では必須のテクニックです。
【初心者向け】VBA数字抽出の基本コードをコピペで使用
VBA初心者の方でも安心して使えるよう、コピー&ペーストで即座に動作するサンプルコードを用意しました。
これらのコードは実際の業務でよく遭遇するパターンを想定して作成されており、そのまま使っても十分な効果を発揮します。
掲載しているサンプルコードをそのままコピペして、どのように動作するのかを確認してみてください。

ガッツポーズの人
数字を抽出するマクロをマスターすることで、日々の作業が劇的に効率化されるはずです。
文字列の先頭から数字を取り出すサンプルコード
文字列の最初にある数字だけを取り出したい場面は業務で頻繁に発生します。
この処理は、
商品コードや注文番号など、先頭の数字部分だけが必要
という場合でよく活用されます。
たとえば、
「12345-商品名」という形式のデータから、商品番号「12345」だけを抽出する
処理をします。
先頭数字を抽出するマクロのサンプルコードがこちら
Sub ExtractLeadingNumber()
Dim inputStr As String
Dim i As Integer
Dim result As String
inputStr = "12345ABC"
For i = 1 To Len(inputStr)
If IsNumeric(Mid(inputStr, i, 1)) Then
result = result & Mid(inputStr, i, 1)
Else
Exit For
End If
Next i
MsgBox "抽出結果: " & result
End Sub
サンプルコードを実行した様子がこちら
このコードをコピペするだけで、どんな文字列からでも先頭数字を確実に取得できるようになります。
関連記事「初心者でもわかるVBAの作り方」では、コードの書き方や実行方法が詳しく解説されています。
コードのコピペが難しいという方は、まずは上記の記事を参考にしてみてください。
文字列の途中にある数字を全て抽出するコード
文字列に散らばっている全ての数字を一度に取得する処理は、データ分析や集計作業で威力を発揮します。
この処理の特徴は、
複雑な文字列からでも数字だけをきれいに抜き出せること
です。
たとえば、
「商品A12個、商品B34個、合計56個」という文字列から「123456」を抽出する
ことができます。
散らばっている全ての数字を取得するマクロのサンプルコードがこちら
Sub ExtractAllNumbers()
Dim inputStr As String
Dim i As Integer
Dim result As String
inputStr = "価格1500円、税込み1650円"
For i = 1 To Len(inputStr)
If IsNumeric(Mid(inputStr, i, 1)) Then
result = result & Mid(inputStr, i, 1)
End If
Next i
MsgBox "全数字抽出: " & result
End Sub
サンプルコードを実行した様子がこちら
このコードを活用することで、複雑なデータからでも必要な数字情報を瞬時に集約できます。
特定の位置から数字のみを抜き出すマクロ
決まった位置にある数字だけを取り出すマクロはいろんなエクセル業務で応用されます。
この処理の特徴は、
定型フォーマットのデータから特定部分の数字だけを効率的に抽出すること
です。
たとえば、
「商品コード:AB1234CD」の4〜7文字目「1234」だけを取り出す
ことができます。
決まった位置にある数字だけを取り出すマクロのサンプルコードがこちら
Sub ExtractNumberFromPosition()
Dim inputStr As String
Dim startPos As Integer
Dim length As Integer
Dim extractedStr As String
Dim result As String
inputStr = "AB1234CD"
startPos = 3 ' 3文字目から
length = 4 ' 4文字分
extractedStr = Mid(inputStr, startPos, length)
result = Val(extractedStr)
MsgBox "位置指定抽出: " & result
End Sub
サンプルコードを実行した様子がこちら
このマクロを使いこなすことで、定型的なデータ処理作業が飛躍的にスピードアップします。
実務で使えるVBA数字抽出の応用テクニック
実際の業務では単純な数字抽出だけでなく、より高度で実用的な処理が求められます。
これらの応用テクニックをマスターすると、
経理処理や在庫管理などの複雑な業務の自動化
が可能です。
請求書処理、複数データの一括処理、エラー対応など、手間のかかる作業はVBAを使って自動化してしまいしょう。
請求書や注文書から金額だけを自動抽出する方法
請求書や注文書から金額を自動抽出することができれば、経理業務の効率を飛躍的にアップすることができます。
- ヒューマンエラーの防止
- 金額チェック作業の自動化
- ルーティーン作業の自動化
たとえば、
「合計金額:¥125,000(税込)」という文字列から「125000」という数値だけを正確に取り出す
ことができます。
どんな形式の金額表記からでも数字を抽出するマクロのサンプルコードがこちら
Sub ExtractAmount()
Dim inputStr As String
Dim cleanStr As String
Dim i As Integer
Dim result As String
inputStr = "合計:¥125,000円"
' カンマと通貨記号を除去
cleanStr = Replace(Replace(Replace(inputStr, ",", ""), "¥", ""), "円", "")
For i = 1 To Len(cleanStr)
If IsNumeric(Mid(cleanStr, i, 1)) Then
result = result & Mid(cleanStr, i, 1)
End If
Next i
MsgBox "抽出金額: " & result
End Sub
上記のコードは
変数inputStrに格納された文字列から数値だけを抽出する
という内容です。
抽出した数値をCSVファイルに転記する、集計の計算式に組み込む、など
いろんな応用方法があります。
複数セルの数字を一括で抽出・整理するマクロ
大量のセルデータから数字だけを一括抽出する機能は、データ分析業務において非常に強力なツールとなります。
この処理の特徴は、
手動では膨大な時間がかかる作業を数秒で完了できること
です。
たとえば、
商品リストの価格欄に「商品A:1500円」「商品B:2800円」のような混在データがある場合、数字部分だけを一気に整理する
ことができます。
大量のセルデータから数字だけを一括抽出するマクロのサンプルコードがこちら
Sub BulkExtractNumbers()
Dim i As Integer
Dim inputStr As String
Dim result As String
Dim j As Integer
For i = 1 To 10 ' A1からA10まで処理
inputStr = Cells(i, 1).Value
result = ""
For j = 1 To Len(inputStr)
If IsNumeric(Mid(inputStr, j, 1)) Then
result = result & Mid(inputStr, j, 1)
End If
Next j
Cells(i, 2).Value = result ' B列に結果出力
Next i
MsgBox "一括抽出完了"
End Sub
上記のコードは、
A1セルからA10セルの範囲で数値だけをB列に表示する
という内容です。
7行目の「For i = 1 To 10」を編集するだけで対象の範囲を変更することができます。
エラー処理を含む安全な数字抽出コードの書き方
実務で使用するVBAコードには、予期しないエラーに対応する仕組みが不可欠です。
たとえば、
空のセルや文字だけのデータが混入していても、プログラムが停止せずに適切に処理を継続する
という対策が必要になります。
エラー処理が組み込まれた抽出マクロのサンプルコードがこちら
Sub SafeExtractNumbers()
Dim inputStr As String
Dim result As String
Dim i As Integer
On Error GoTo ErrorHandler
inputStr = Cells(1, 1).Value
If inputStr = "" Then
MsgBox "データが空です"
Exit Sub
End If
For i = 1 To Len(inputStr)
If IsNumeric(Mid(inputStr, i, 1)) Then
result = result & Mid(inputStr, i, 1)
End If
Next i
If result = "" Then
MsgBox "数字が見つかりませんでした"
Else
MsgBox "抽出結果: " & result
End If
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description
End Sub
上記のコードは、
エラーが発生した場合、27行目以降のコードでエラー内容を表示する
という内容です。
このようなエラー処理は数字を抽出するマクロに限らず、あらゆるマクロに応用可能なので使い方をマスターしておきましょう。
関連記事「エラーを無視するコードの作り方」では、『On Error Resume Next』の使い方、注意点、などが紹介されています。
安全に動作するマクロ開発のために、エラーを適切に処理する方法をマスターしておきましょう。
VBA初心者が『数字抽出マクロ』を導入する方法
VBAなんて扱ったことないけど、業務内容に合わせた『数字抽出マクロ』を導入したい!
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、
今では自分で効率化マクロをサクッと導入しちゃいます。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
外注した方が楽だけど費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。
どちらにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。
あなたに合った方法でサクッと導入しちゃいましょう。
マクロ開発を外注に依頼する
マクロ開発を外注に依頼する方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「こんなデータから数字だけを抽出したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、
すぐに使っているエクセルにマクロを導入することができます。
VBA初心者でも形になっているマクロをゲットできる、費用が安い、
というメリットがあります。
しかし、
想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『数字を抽出するマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい内容のコードを書くだけ
です。
【VBA 数字 抽出】【VBA 数字のみ 抽出】でネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。