こんにちは、VBAエンジニアのやすこれです。
みなさんは、VBAで数値を文字列として扱いたいと思ったことはありませんか?
- 見た目は同じなのに書式が違ってエラーになった
- セルの値を変数に入れたら型違いでエラーになった
- VBAで数値を文字列として扱う方法が知りたい!
そこで今回は、数値を文字列に変換できるStr関数を紹介します。
VBAで数値を文字列に変換するStr関数とは?
Str関数は、数値を文字列に変換する関数です。- 基本構文
Str(数値)
以上のように書くことで、かっこ内の数値が文字列に変換されます。- コード例
Dim msgLng As Long
msgLng = 100
MsgBox "msgLngは" & TypeName(msgLng) & "型" & vbCrLf & vbCrLf & "Str(msgLng)は" & TypeName(Str(msgLng)) & "型"
Str関数を使って、Long型整数である「msgLng」を文字列に変換します。「msgLng」「Str(msgLng)」それぞれの型をTypeName関数で取得すると数値が文字列型に変換されているのがわかります。
- 「TypeName関数」はかっこ内の変数の情報を返す関数
- ex)TypeName(String型変数)→「String」を返す
VBAのStr関数で注意すべき特性と解決方法
Str関数の注意すべき特性
数値を文字列に変換できる便利なStr関数ですが、注意しなければならないことがあります。それはプラスの数値を変換した場合、文字列の先頭に半角スペースがつくことです。
値比較を行うとき、せっかく型を変換しても文字列が変わってしまっては意味がありません。
半角スペースがつくサンプルコードを紹介します。
MsgBox "〇Str関数:" & Str(100) & vbCrLf & _
" ×Str関数:" & 100
正の数値「100」をStr関数・数値のままMsgBoxで出力した結果、次のようになります。少々わかりづらいですが、Str関数で文字列に変換した上段の「100」は「:」の後ろにスペースができてしまっています。
値比較などで予期せぬ結果がでてしまうので、次に紹介する半角スペースをなくして文字列に変換する方法も覚えてしまいましょう。
Str関数の注意点を解決する方法
Str関数でできてしまう半角スペースをなくすには、CStr関数を使いましょう。- 基本構文
CStr(数値)
Str関数と同じく上記のように書くことで、かっこ内の数値が文字列に変換されます。- コード例
MsgBox "〇CStr関数:" & CStr(100) & vbCrLf & " ×CStr関数:" & 100
先ほどと同じように正の数値「100」をCStr関数・数値のままMsgBoxで出力した結果は次のようになります。Str関数とは違い、CStr関数で文字列に変換した上段の「100」は「:」の後ろに半角スペースなく表示されているのがわかりますね。
このようにCStr関数を使えば、半角スペースを表示することなく値を文字列に変換することができます。
VBAで文字列を数値に変換するVal関数
ここまで数値を文字列に変換するStr関数を紹介してきましたが、実務では文字列を数値にしたい場合もあります。「Val関数」を使えば、文字列を数値に変換することができます。
Val関数の使い方
Val関数は、文字列を数値に変換する関数です。- 基本構文
Val(文字列)
以上のように書くことで、かっこ内の文字列が数値に変換されます。- コード例
Dim msgStr As String
msgStr = "100"
MsgBox "msgStrは" & TypeName(msgStr) & "型" & vbCrLf & vbCrLf & "Val(msgStr)は" & TypeName(Val(msgStr)) & "型"
Val関数を使って、文字列である「”100″」を数値に変換します。「msgStr」「Val(msgStr)」それぞれの型をTypeName関数で取得すると文字列が数値であるDouble型に変換されているのがわかります。
使い方も簡単なので、数値を文字列に変換するStr関数とあわせて、文字列を数値に変換する「Val関数」も覚えてしまうのがおすすめです。
まとめ
今回はVBAで数値を文字列に変換できるStr関数の使い方をご紹介しました。Str関数は、数値を文字列として扱いたい時、簡単に使うことができます。
また、あわせて紹介したStr関数の注意や、文字列を数値に変換するVal関数も覚えておくと非常に便利です。
ぜひ、使ってみてください。