このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】文字列を数値に変換する方法(Val関数とCInt関数など)

2024年4月22日

VBAで文字列を数値に変換する方法

今回はVBAで文字列を数値に変換する方法を紹介します。

VBAで文字列を数値に変換する方法は大きく次の2つがあります。

  1. Val関数で変換する (適切な型の数値となる)
  2. CInt,CLng,CSng,CDbl関数で変換する(決まった型の数値となる)

それぞれの関数の使い方について紹介していきます。

VBAが難しいと感じたら
ココナラでVBAの開発請負を行っています。
お気軽にご相談ください。

文字列を数値に変換する方法 (Val関数)

Sub StrConvertToVal()
    '''Val関数で文字列を数値に変換する
    
    Const STR_INT_NUM As String = "123"
    Const STR_SNG_NUM As String = "4.56"
    
    Dim intNum As Integer
    Dim sngNum As Single
    
    intNum = Val(STR_INT_NUM)
    sngNum = Val(STR_SNG_NUM)
    
    Debug.Print TypeName(intNum) 'Integer
    Debug.Print TypeName(sngNum) 'Single
    
End Sub

このようにVal関数で変換すると、Integer型やSingle型の変数に代入することができます。

数値以外を含んでいた時の挙動(Val関数)

Sub StrConvertToVal2()
    '''Val関数で文字列を数値に変換する
    
    Const STR_INT_NUM1 As String = "$123"
    Const STR_INT_NUM2 As String = "12$3"
    Const STR_INT_NUM3 As String = "123円"
    
    Debug.Print Val(STR_INT_NUM1) '0
    Debug.Print Val(STR_INT_NUM2) '12
    Debug.Print Val(STR_INT_NUM3) '123
End Sub

文字列が数値以外を含んでいる場合はVal関数は数値以外に出会うまでの数値を返します。

そのため12$3などを入れると12が返されるため、誤動作をさせないように注意しましょう。

文字列を数値に変換する方法(CInt,CLng,CSng,CDbl関数)

これら4つの関数もVal関数と同じく文字列を数値に変換する関数です。

Val関数と異なるのは、返される数値の型が固定される点です。

Sub StrConvertToIntLngSngDbl()
    '''Val関数で文字列を数値に変換する
    
    Const STR_INT As String = "123"
    
    Debug.Print TypeName(CInt(STR_INT)) 'Integer
    Debug.Print TypeName(CLng(STR_INT)) 'Long
    Debug.Print TypeName(CSng(STR_INT)) 'Single
    Debug.Print TypeName(CDbl(STR_INT)) 'Double
End Sub

このように変換前が同じ文字列であっても、各関数が返す型は異なるものとなります。

厳密な計算が要求されるときはVal関数ではなく、これら4つの関数を使用するのがおすすめです。

数値以外を含んでいた時の挙動(CInt,CLng,CSng,CDbl関数)

Sub StrConvertToIntLngSngDbl2()
    '''Val関数で文字列を数値に変換する
    
    Const STR_INT_NUM1 As String = "$123"
    Const STR_INT_NUM2 As String = "12$3"
    Const STR_INT_NUM3 As String = "123円"
    
    Debug.Print CInt(STR_INT_NUM1) 'エラーとなる
    Debug.Print CInt(STR_INT_NUM2) 'エラーとなる
    Debug.Print CInt(STR_INT_NUM3) 'エラーとなる
End Sub

Val関数とは異なり、文字列が数値以外を含んでいる場合はエラーが発生します。

誤った値が入った場合はエラーで止まるため、やはり厳密に計算したいときはVal関数でなく、これら4つの関数を使用するのがおすすめです。

VBAが難しいと感じたら
ココナラでVBAの開発請負を行っています。
お気軽にご相談ください。

VBA

Posted by やろまい