VBAである文字列を数値に変換できるかどうか調べるには、IsNumeric関数を使用します。
IsNumeric関数の使用法
構文は下記です。
1 |
IsNumeric(値) |
引数は1つのみです。戻り値は、True(真)またはFalse(偽)で、引数が数値に変換できる場合はTrue、そうでない場合はFalseを返します。また、引数が日付式だと、Falseを返します。
さまざまな形の値にIsNumeric関数を使用した結果を下記に示します。
1 2 3 4 5 6 7 |
Debug.Print 1256, IsNumeric(1256) '数値 Debug.Print "1256", IsNumeric("1256") '文字列(数値・半角) Debug.Print "1256", IsNumeric("1256") '文字列(数値・全角) Debug.Print "あいうえお", IsNumeric("あいうえお") '文字列(数値以外) Debug.Print "A100", IsNumeric("A100") '文字列(文字+数値) Debug.Print "100A", IsNumeric("100A") '文字列(数値+文字) Debug.Print "2016/08/07", IsNumeric("2016/08/07") '日付式 |
結果から、IsNumeric関数は、全角半角に関わらず、数値と見なせるものにはTrueの判定をすることがわかります。文字が含まれているものは、数値とは見なされません。
使用例
IsNumeric関数はそれ単体で使用することはあまりなく、True/Falseを返す性質を利用し、その結果に応じて処理を分岐させるような場合によく使われます。
下記サンプルをご覧ください。If~Elseを用いて、A列に入力されている値に対し、数値なら50を加算し隣接セルに出力、文字の場合は何もしません。
1 2 3 4 5 6 7 8 |
Dim i As Long For i = 1 To 5 If IsNumeric(Cells(i, 1).Value) = True Then 'IsNumericで判断 Cells(i, 2).Value = Cells(i, 1).Value + 50 '数値なら+50 Else '(文字ならなにもしない=空白) End If Next i |
応用例(1文字ずつ調べる)
下記例は、"〇〇町3丁目14番地305-2"に対し、Mid関数を用いて左から1文字ずつ調べてゆき、数値であれば"X"に変換します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub IsNumericSapmple() '1文字ずつ調べる Dim n As Long Dim myStr1 As String, myStr2 As String, Letter As String myStr1 = "〇〇町3丁目14番地305-2" '元データ myStr2 = "" '出力データ 最初は""(空値)にしておく For n = 1 To Len(myStr1) 'Len関数は文字列の長さを取得します。変数nは「n文字目」 Letter = Mid(myStr1, n, 1) 'Mid関数でn番目の文字(1文字)を取出してLetterに代入 If IsNumeric(Letter) = True Then 'n文字目(Letter)が数値なら Letter = "X" '"X"に変える End If myStr2 = myStr2 & Letter '上で処理したものをmyStr2に連結する Next n Debug.Print myStr2 'イミディエイトウインドウに出力 End Sub |