【Excel/VBA】文字列から数字だけを抽出する方法
みなさんこんにちは。
VBAで文字列を操作していると、文字列の中から数字だけを取得したい場面に遭遇することがあるかと思います。
例えば、「商品番号:AB-123-CD456」という文字列から「123456」だけを取得したいといったケースです。
今回は、文字列から数字だけを抽出する方法についてご紹介したいと思います。
この記事はこんな人におすすめ
この記事はこんな人におすすめです!
- VBAプログラミング:初学者~初級者
- 文字列操作の方法を知りたい人
- 文字列の中から数字だけを取得したい人
- コードだけサクッと取得したい人
といったところでしょうか。
VBAの文字列操作に関する過去の記事
VBAの文字列操作に関する小ワザやテクニックについては、過去の記事でもご紹介しておりますのでそちらもどうぞ。
今回の記事を読むメリット
文字列から数字だけを抽出する方法を知るメリットは以下の通りです。
- VBAの文字列操作に関する基礎スキル定着
- 不要な文字を除外して必要な数字だけ取得できる
- 取得した値を後続処理で使用しやすくなる
といったところでしょうか。
Excel内のデータを加工する場合や、Webスクレイピングで取得した文字列を整形する場合など、意外と使用する機会が多い処理になるかと思います。
やりたいことの例
今回は以下の文字列を例にします。
商品番号:AB-123-CD456
この文字列の中から、英字や「-」などを除外して、
123456
という数字だけを取得することが今回のゴールです。
コードの紹介
Main関数
Sub main()
Dim str1 As String
Dim str2 As String
str1 = "商品番号:AB-123-CD456"
str2 = NumberExtraction(str1)
Debug.Print str2 '出力結果:123456
End Sub
数字だけを抽出する関数
Function NumberExtraction(ByVal text As String) As String
Dim i As Long
Dim result As String
Dim strChar As String
For i = 1 To Len(text)
strChar = Mid(text, i, 1)
If strChar Like "[0-9]" Then
result = result & strChar
End If
Next i
NumberExtraction = result
End Function
コード解説
NumberExtraction関数では、引数として受け取った文字列を1文字ずつ確認しています。
For i = 1 To Len(text)
Len関数を使用して文字列の文字数を取得し、先頭から末尾までループします。
strChar = Mid(text, i, 1)
Mid関数を使用して、対象となる文字列から1文字ずつ取得します。
If strChar Like "[0-9]" Then
result = result & strChar
End If
取得した1文字が「0~9」の数字であれば、result変数へ追加していきます。
これを文字列の最後まで繰り返すことで、数字だけを連結した文字列を取得することができます。
セルの値に使用する場合
Excelのセルに入力されている文字列に対して使用する場合も考え方は同じです。
例えばA1セルに「商品番号:AB-123-CD456」が入力されている場合は、以下のように記述できます。
Range("B1").Value = NumberExtraction(Range("A1").Value)
実行すると、B1セルに「123456」が入力されます。
文字列の中にある不要な文字を取り除いて数字だけ取得したい場合に、非常に使いやすい処理になるかと思います。
注意点
今回の関数では「0~9」の半角数字を抽出しています。
また、戻り値はString型にしていますので、「00123」のように先頭に0が付いている場合も、そのまま「00123」として取得できます。
取得後に数値型へ変換すると先頭の0がなくなりますので、商品番号や管理番号などを扱う場合は注意してください。
最後に
いかがでしたでしょうか。
今回は、VBAを使用して文字列から数字だけを抽出する方法についてご紹介しました。
ものすごく小ネタではありますが、Excel内のデータ加工やWebスクレイピングで取得した値を整形する際など、意外と頻出する内容かと思います。
一度関数として作成しておけば使い回すこともできますので、少しでもご参考になればと思います。
開発依頼について
ココナラでWebスクレイピング開発サービスを出品しております。
自分で開発をしようと思ったけど、VBAでのネット記事が少なく困っている方も多いかと思います。
そんな方はいつでもお気軽にご相談ください。
また、本ブログからご依頼いただいた方については割引特典がございますので、
ご不明点と合わせてメッセージをいただけると幸いです。
スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?Webスクレイピング以外にもWebアプリの開発サービスも出品しております。
こちらについても、本ブログからご依頼いただいた方については割引特典がございますので、
お気軽にご相談ください。
Excelにてブラウザ操作自動化ツールを作成します その作業、webスクレイピングを使って自動化しましょう!
