「文字列から数字だけを抽出するにはどうしたらいいのでしょう?」
「数値と文字が含まれているセルから、文字を取り除いて数値だけにするにはどうしたらいいのでしょうか?」
といったご質問をいただくことがあります。
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
引数: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関数にいろんな引数を指定した例を作成してありますので、ご確認ください。
- Newer:時刻をAM・PMつきで表示したい
- Older:Excel2007でウィンドウ-表示しないは?
Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » 文字列から数字だけを抽出したい