文字列の前方部分にある数字を取り出す、Val関数を解説します。
なお、表題にある通りこの関数は「文字列を数字に変換する関数」ではありません。
名前が似ているため混同されている方をよく見かけますが、
シート関数の「VALUE関数」とは全く別の関数です。
シート関数の「VALUE関数」に対応するVBA関数は「CDbl関数」ですので、
「文字列を数字に変換する関数」を使用したい場合はこちらをご使用ください。
基本形
Val(対象文字列)
実行例
Debug.Print Val(123) ' 123 Debug.Print Val("123") ' 123 Debug.Print Val("ABC") ' 0 ← エラーではない Debug.Print Val("123ABC") ' 123 Debug.Print Val("ABC123") ' 0 Debug.Print Val(" 123ABC") ' 123 ← スペースは無視 Debug.Print Val("1 2 3") ' 123 Debug.Print Val("1000円") ' 1000 Debug.Print Val("1,000円") ' 1 ← カンマの桁区切りは非対応 Debug.Print Val("\1000") ' 0 ← 通貨記号も非対応 Debug.Print Val("1000円") ' 0 ← 全角数字も非対応 Debug.Print Val("5/1") ' 5 ← 日付も非対応 Debug.Print Val("1.5") ' 1.5 ← 小数点は対応
解説
冒頭のとおり、Val関数は文字列の前方部分にある数字を取り出す関数です。
より正確には「最初に数字以外の文字が登場するまで数値を取り出す関数」です。
決して文字列を数値に変換する関数ではありませんのでご注意ください。
123ABCから123を取り出すことはできますが、
1,000を1000にすることはできない関数です。
特に怖いのが「全角数字を数字と認識しない」という点で、
こういった文字交じりの数字テキストは往々にして全角文字も混じります。
使う場合はStrConv関数などで半角化してから実行してください。
また、地味に怖いのが「まったく数字が出ない場合でもエラーにはならない」点です。
第1文字すら数字でないときは「型が一致しません」エラーだとよかったのですが、
実際はしれっと「0」を返すだけなので、この仕様にも注意しましょう。
1000円から1000を取り出したいとき、
- 1,000円でもNG
- 1000円でもNG
- \1000でもNG
と、正直危険すぎて使うのが怖い関数ですが、
使用する際は細心の注意を払ってご使用ください。
なお、前方に限らず、文字列からすべての数値を取り出したい場合は、
組込み関数はありませんので、自作関数で対応する必要がります。
必要な場合はこちらの記事をご参照ください。