VBA Val関数で文字列から数値を抜き出します

Val関数

 Val関数は文字列から数値を抜き出します
 もうちょっと正確に言うと、文字列を先頭から読み込んで、数字以外の文字を見つけたら読み込みを止めて、それ以前の数字をすべて表示します。だから先頭に数字以外の文字があったら、いきなり読込をストップして「 0 」を返してきます。この関数がどの文字を数字と判断するかについては、色々とうるさい決まりごとがあるので、サンプルを走らせながら具体例を見てみましょう。
 

Val関数をテストするマクロです

 次のサンプルコードでは、配列に色々な文字列を放り込んで、それをすべて Val関数で変換しています。

 'Val関数の動作テスト

 Sub ValTest()

  Dim mystr(6) As String

  mystr(0) = "FIFA World Cup 2018 Russia" '先頭が文字
  mystr(1) = "2018 FIFA ワールドカップ ロシア大会" '先頭が半角数字
  mystr(2) = "3.141159263" '小数点
  mystr(3) = "1,620,580 円" 'カンマ
  mystr(4) = "\3800" '\マーク
  mystr(5) = "12345" '全角数字
  mystr(6) = "2018 8 28" 'スペース

  For i = 0 To 6
   Debug.Print mystr(i) & " → " & Val(mystr(i))
  Next

 End Sub

 このマクロを実行すると次のような結果になります。

 FIFA World Cup 2018 Russia → 0
 2018 FIFA ワールドカップ ロシア大会 → 2018
 3.141159263 → 3.141159263
 1,620,580 円 → 1
 \3800 → 0
 12345 → 0
 2018 8 28 → 2018828

 つまり、Val関数には次のような変換ルールがあります。

 (1) 文字列の先頭に数字以外の文字があると 0 を返す。
 (2) 途中に数字以外の文字があると、その前の数字を返す。
 (3) 小数点は数値として認識される。
 (4) カンマ (,) は数値として認識されない。
 (5) \マークは数値として認識されない。
 (6) 全角数字は数値として認識されない。
 (7) スペースは読み飛ばされる(詰めて表示される)。

 他にも色々ありますけど、大体これぐらいを覚えておけば実用上は問題ないです。「全角数字を数値に変えたい」というケースが頻繁にありますが、それは Val関数ではなくて、CInt関数を使います。補足として下に CInt関数のサンプルコードを載せておきます。

 Sub CintTest()

  Dim mystr As String

  '全角数字
  mystr = "12345"

  '全角数字を数値に変換
  Debug.Print CInt(mystr)

 End Sub

 これを実行すると全角数字「12345」が半角数字「12345」に変換されます。
 え? 今日はこばとの無駄なおしゃべりがなくて珍しい?
 ...... 二日酔いで、おしゃべりする気分じゃないんですよ。う~。頭痛い。

 ≫ VBA メニューはこちらです ......

Google広告
スポンサーリンク
スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください