こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで型変換する方法を知っていますか?
文字列を数値、数値を文字列など型変換するケースは多いです。
そこで今回は、
・型変換をするキャストとは?
といった基礎的なことから、
・VBAで型変換する方法
・型を確認するためのTypeNameメソッドとは
・型をチェックする方法
といった応用的な方法まで、徹底的に解説します!
型変換するためのキャストとは?
まずは、型変換する方法について解説します。
キャストと呼ばれる方法で、変数の型を別の型へ変換することができます。
VBAでキャストする方法を、以下にまとめました。
VBAでキャストする方法一覧:
No | 変換関数 | 概要 | 変換後の型 |
---|---|---|---|
1 | CDate | 日付型へのデータ変換 | Date型 |
2 | CLng | 長整数型へのデータ変換 | Long型 |
3 | CInt | 整数型へのデータ変換 | Integer型 |
4 | CByte | バイト型へのデータ変換 | Byte型 |
5 | CBool | ブール型へのデータ変換 | Bool型 |
6 | CDbl | 倍精度浮動小数点実数型へのデータ変換 | Double型 |
7 | CSng | 単精度浮動小数点実数型へのデータ変換 | Single型 |
8 | CStr | 文字列型へのデータ変換 | String型 |
9 | CCur | 通貨型へのデータ変換 | Currency型 |
このように、型変換するための関数がたくさんあります。
「キャスト」のCから始まっているのが特徴ですね。
例えば、Integer型の数値をString型の文字列に変える場合は、CStr関数を使って次のように書きます。
CStrを使うサンプルコード:
CStr(123)
関数名(変換元の値)のように書くことで、簡単に変換することができます。
ただ、キャストの関数は量が多いので、いきなり全て覚えようとするのではなく、まずは「キャストを使って型を変換することができる」というレベルで覚えるのがおすすめです。
型を確認するためのTypeName関数とは
「変換する方法はわかったけど、正しく型変換できているか確認したい」という方もいるのではないでしょうか。
そんな方向けに、TypeName関数を使った型確認方法について解説します。
TypeName関数を使えば、次のように簡単に型名を確認することができます。
TypeName関数の使い方:
Dim 型名を入れる変数名 as String 型名を入れる変数名 = TypeName(値)
さきほどのCStr関数を使って変換した型名を確認する場合は、次のように確認します。
サンプルコード:
Sub Test() '変換前の数値の型を出力 Dim num1 As Integer num1 = 123 Debug.Print "変換前の型:" & TypeName(num1) '文字列に変換 Dim str1 As String str1 = CStr(num1) 'str1の型名を出力 Debug.Print "変換後の型:" & TypeName(str1) End Sub
実行結果:
変換前の型:Integer 変換後の型:String
このように、簡単に数値の型を確認することができます。
ちなみに、TypeName関数の使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!
型をチェックする方法
数値計算に変数を使う場合、数値に変換できないとエラーになってしまうケースもありますよね。
TypeName関数を使って取得した型を見て、文字列・数値などを判定しても良いですが、もっとシンプルに型チェックをする方法があります。
VBAで型をチェックする方法を以下にまとめました。
型チェック方法一覧:
No | 関数名 | チェックする内容 |
---|---|---|
1 | IsArray | 配列のデータ |
2 | IsDate | 日付型のデータ |
3 | IsEmpty | 値がEmptyのデータ |
4 | IsError | 式の結果がエラー |
5 | IsNull | Null値が含まれているデータ |
6 | IsNumeric | 数値型のデータ |
7 | IsObject | オブジェクト型のデータ |
例えば、文字列から日付に変換した値が日付型になっているか確認する場合は、IsDate関数を使って次のように書きます。
サンプルコード:
Sub Test2() '文字列で日付をセット Dim str1 As String str1 = "2018/10/01" '日付型のチェック Dim date1 As Date If IsDate(CDate(str1)) Then date1 = CDate(str1) Debug.Print "変換した値:" & date1 & vbCrLf & _ "変換後の型:" & TypeName(date1) Else MsgBox "日付型に変換できませんでした" End If End Sub
実行結果:
変換した値:2018/10/01 変換後の型:Date
「IsDate(CDate(str1))」で変換した文字列が日付型になっているか確認してから、変換した結果を出力するサンプルです。
このように、簡単に型をチェックすることができます。
ちなみに、数値型をチェックするIsNumeric関数については以下で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、VBAで型変換するためのキャストの使い方について解説しました。
型を変換して処理を進めていきたいケースはよくあります。
いきなりすべて覚えるのではなく「キャストで型変換ができる」とまずは覚えて、使うときにこの記事を見ればOKです。
使い方も簡単なので、ぜひ使ってみてくださいね!