Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » 文字列から数字だけを抽出したい

文字列から数字だけを抽出したい

対象:Excel2000, Excel2002, Excel2003, Excel2007

「文字列から数字だけを抽出するにはどうしたらいいのでしょう?」
「数値と文字が含まれているセルから、文字を取り除いて数値だけにするにはどうしたらいいのでしょうか?」
といったご質問をいただくことがあります。

Excelを使いこなしている方なら、計算に利用する可能性のある数値を含むデータを入力する際、数値だけを入力して書式設定で
「単価350円」
といった表示にします。
(この場合「"単価"#,##0"円"」とユーザー定義書式を設定します。)

しかし、Excelに慣れていない方の場合、
「単価350円」
といった入力をそのまま行ってしまいます。
(このような入力をした場合、文字列になってしまうので「350」を計算に利用できません。)

このようなExcelに慣れていない方が入力した
「単価350円」
といったセルから
「350」
という数字だけを抽出したいというのが、ご質問の主旨です。

[スポンサードリンク]

除去する文字列が何なのか、何らかの法則性があるか否かによって、いくつかの解決策が考えられますが、オールマイティなのは、VBA(Visual Basic for Applications)でユーザー定義関数を作成してしまうことです。

▼数字だけを抽出するユーザー定義関数
Function TrimAllText(strOrg As String) As String

 Dim strRet As String
 Dim intLoop As Integer
 Dim strChar As String

 strRet = ""

 For intLoop = 1 To Len(strOrg)
 
  strChar = Mid(strOrg, intLoop, 1)
   
  If IsNumeric(strChar) Then
   strRet = strRet & strChar
  End If

 Next intLoop
 
 TrimAllText = strRet

End Function

引数:strOrgに指定された文字列を1文字目から順番に取り出して
 strChar = Mid(strOrg, intLoop, 1)
その取り出した1文字が数字かどうかを調べ、もし数字ならとりだし
 If IsNumeric(strChar) Then
  strRet = strRet & strChar
そうでなければなにもしないという処理を、引数に指定された文字列の長さ分
 For intLoop = 1 To Len(strOrg)
 Next intLoop
ぐるぐる繰り返しています。

「数字だけを取り出したい」という要望は、より突っ込んでに伺っていくと実は
 「小数点は残したい」
 「半角数字だけ残したい」
といった内容だったりするのですが、ここではもっとも単純な、半角だろうが全角だろうがとにかく数字だけにするというユーザー定義関数をご紹介しておきます。

このユーザー定義関数で撮り出した数字は計算に使われることが多いので、何らかの数値型にしてもいいのですが、有効桁数の15桁を超えてしまうこともあり得るため、戻り値は
 Function TrimAllText(strOrg As String) As String
と文字列にしています。

▼サンプルファイル(003351.xls 21KByte)ダウンロード

サンプルファイルには、TrimAllText関数にいろんな引数を指定した例を作成してありますので、ご確認ください。

関連語句
自作関数

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » 文字列から数字だけを抽出したい

「ユーザー定義関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.