こんにちは、Ryoです。
もう3月も下旬になりますが雪が降ってみたり寒暖差が激しくて過ごしにくいですね。。。ですが、気を取り直して書いていこうと思います。
VBAを扱う中で多様なデータを扱う訳ですが、必要な型に変換したり調べたりすることが多々発生しますので、今回はそのデータ型(長整数型、日付型、バイト型、ブール型、単精度浮動小数点数型、倍精度浮動小数点数型、通貨型、文字列型、バリアント型、10進数変換)を操作する関数の主なものを書いていきたいと思います。
1.長整数型に変換(CLng関数)
CLng(Expression)
指定されたデータを長整数型(-2,147,483,648~2,147,483,647の整数)に変換します。
そのデータに小数点が含まれる場合は整数に丸めますが、0.5の場合は一番近い偶数に丸めます。(例:3.5⇒4 、 4.5⇒4)
Sub Sample1() 'データ型⇒長整数型(CLng) Dim Data_String As String Dim Data_Lng As Long Data_String = "3.5" Data_Lng = CLng(Data_String) MsgBox "CLng関数変換結果⇒" & Data_Lng End Sub
サンプルでは文字の”3.5”をCLng関数を使って長整数型に変換しています。この場合は一番近い偶数に丸められるので、実行結果は「4」になります。
2.日付型に変換(CDate関数)
CDate(Expression)
指定されたデータを日付型データに変換します。
文字列の指定は「平成○○年○月○日」という形で指定し、曜日や年月だけの場合はエラーとなります。また、数値を指定した場合はシリアル値とみなし、整数部分が日付に変換されます。
Sub Sample2() 'データ型⇒日付型(CDate) Dim Data_String As String Dim Data_date As Date Data_String = "平成30年3月8日" Data_date = CDate(Data_String) MsgBox "CDate関数変換結果⇒" & Data_date End Sub
このサンプルを実行すると、以下のように日付型データに変換されます。
ちなみに本サンプルの場合は Dim Data_date As DateをAs LongにするとMsgBoxでシリアル値が表示されますので、参考までに。
Sub Sample3() 'Sample2の参考:日付シリアル値 Dim Data_String As String Dim Data_date As Long Data_String = "平成30年3月8日" Data_date = CDate(Data_String) MsgBox "平成30年3月8日シリアル値⇒" & Data_date End Sub
3.バイト型に変換(CByte関数)
CByte(Expression)
数値や文字列をバイト型に変換します。
小数を含む数値は整数に丸められますが、小数部分が0.5の場合は一番近い偶数に丸められますので、そこはCLng関数と同様ですね。
Sub Sample4() 'データ型⇒バイト型(CByte) Dim Data_String As String Dim Data_byte As Byte Data_String = "22.5" Data_byte = CByte(Data_String) MsgBox "CByte関数変換結果⇒" & Data_byte End Sub
4.ブール型に変換(CBool関数)
CBool(Expression)
数値や文字列をブール型に変換しTrue又はFalseを返します。
数値「0」はFalse、「1」はTrueになり、文字列の場合はTrueやFalse以外の値はエラーになります。
Sub Sample5() 'データ型⇒ブール型(CBool) Dim Data_String As String Dim Num As Integer Dim Data_bool, Data_num As Boolean Num = 0 Data_String = "True" Data_num = CBool(Num) Data_bool = CBool(Data_String) MsgBox "CBool関数変換結果⇒" & Data_bool & vbCrLf & _ "CBool(数値⇒" & Num & ")の結果は" & Data_num End Sub
この通り、文字列”True”はTrueとなり、数値としての「0」はFalseになります。
5.整数型に変換(CInt関数)
CInt(Expression)
数値や文字列を整数型(-32,768~32,767の整数)に変換します。
これも同様に小数を含む数値は整数に丸められますが、小数部分が0.5の場合は一番近い偶数に丸められます。
Sub Sample6() 'データ型⇒整数型(CInt) Dim Data_String As String Dim Data_Int As Integer Data_String = "8.5" Data_Lng = CInt(Data_String) MsgBox "CInt関数変換結果⇒" & Data_Lng End Sub
6.単精度浮動小数点数型に変換(CSng関数)
CSng(Expression)
数値や文字列を単精度浮動小数点数型に変換します。
負の値:約-3.4×10(38乗)~-1.4×10(-45乗)
正の値:約1.4×10(-45乗)~1.8×10(38乗)
Sub Sample7() 'データ型⇒単精度浮動小数点数型(CSng) Dim Data_sng As Single Data_sng = CSng(10 / 3) MsgBox "CSng関数変換結果⇒" & Data_sng End Sub
7.倍精度浮動小数点数型に変換(CDbl関数)
CDbl(Expression)
数値や文字列を倍精度浮動小数点数型に変換します。
負の値:約-1.8×10(308乗)~-4.0×10(-324乗)
正の値:約4.9×10(-324乗)~1.8×10(308乗)
Sub Sample8() 'データ型⇒倍精度浮動小数点数型(CDbl) Dim Data_dbl As Double Data_dbl = CDbl(10 / 3) MsgBox "CDbl関数変換結果⇒" & Data_dbl End Sub
8.通貨型に変換(CCur関数)
CCur(Expression)
数値や文字列を通貨型に変換し、整数部は15桁、小数部分は4桁になります。
Sub Sample9() 'データ型⇒通貨型(CCur) Dim Data_cur As Currency Data_cur = CCur(98765.432111) MsgBox "CCur関数変換結果⇒ " & Data_cur End Sub
9.文字列型に変換(CStr関数)
CStr(Expression)
数値や日付リテラル(日付の前後に「#」)を文字列型に変換します。
Sub Sample10() 'データ型⇒文字列型(CStr) Dim Data_str1, Data_str2 As String Data_str1 = CStr(123) Data_str2 = CStr(#3/9/2018#) MsgBox "CStr関数の変換結果⇒" & Data_str1 & vbCrLf & _ "CStr(日付リテラル)の結果⇒" & Data_str2 End Sub
10.バリアント型に変換(CVar関数)
CVar(Expression)
数値や文字列をバリアント(万能)型の値に変換しますので、数値と文字の連結などに使用出来ます。
Sub Sample11() 'データ型⇒バリアント型(CVar) Dim Data_str As String Dim Data_num As Integer Dim Data_var As Variant Data_str = "0000" '文字 Data_num = 555 '数値 Data_var = CVar(Data_num & Data_str) MsgBox "CVar関数の変換結果⇒" & Data_var End Sub
11.10進数変換(CDec関数)
CDec(Expression)
数値や数値をあらわす文字列を10進型の値に変換します。
このCDec関数はVariant型を返し、Decimal型は存在しないのでご注意ください。
Sub Sample12() 'データ型⇒10進数変換(CDec) Dim Data_dec As Variant 'CDec関数の返りはVariant型 Data_dec = CDec("0123.456") MsgBox "CDec関数の変換結果⇒" & Data_dec End Sub
12.まとめ
以上が主に使用されるデータ型変換の関数になりますが、使用頻度が少ないものは使いたい時にあれ?なんだっけ?となりますから、私自身の備忘録的な意味も含めて書いてみました。
万能に使えるバリアント型は便利で使用頻度も高いと思いますが、その分予期せぬ型になっていてエラーになってしまうケースも稀にあるので、用途に応じて型を使い分けるのも良いかと思います。機会があればぜひ参考になさってくださいませ。
以上、データ型を操作して変換を行う方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo