型変換関数
VBAの変数のデータ型を変換する関数が用意されています。
その多くは大文字のCで始まります。
CDate Date型
CLng Long型
CInt Integer型
CByte Byte型
CBool Bool型
CDbl Double型
CSng Single型
CStr String型
CCur Currency型
Val Double型
CDate(引数)
CDate関数はデータ型を日付型に変換します。
引数が日付文字列の場合はそのままDate型の日付として変換されます。
引数が数値の場合はシリアル値とみなされ整数部分が日付で、小数部分が時刻に変換されます。
1 2 3 4 5 6 7 8 9 |
Sub CDateTest() Dim s s = CDate("2017/8/1") Debug.Print s '// 2017/08/01 s = CDate(42949.15) Debug.Print s '// 2017/08/02 3:36:00 End Sub |
整数に型変換:CLng(引数)、CInt(引数)、CByte(引数)
CLng、CInt、CByteはそれぞれ整数に変換する関数です。
CLng関数はデータ型をLong型(長整数型)に変換します。
CInt関数はデータ型をInteger型(整数型)に変換します。
CByte関数はデータ型をByter型(1~255の数値)に変換します。
あとの挙動は3つとも以下の通りです。
- 引数に範囲を超える値が渡された場合はオーバーフローとなりエラーになります。
- 引数が数字とみなせる文字列の場合は数字部分のみを数値に変換します。
- 引数に小数点が含まれており小数とみなすことが出来る場合は整数に丸められます。
- この丸め処理はInt関数やFix関数とは異なる独自処理になっており、わかりにくい動作をします。
- 小数部分が0.5ちょうどの場合は、一番近い偶数に丸められます。よって、1.5なら2、-1.5なら2になります。小数部分が0.5でない場合は0.5より大きい場合は絶対数が+1され、0.5より小さい場合は絶対数は変わりません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
Sub CLngTest() Dim s '// 文字列 s = CLng("\123,456") Debug.Print s '// 123456 '// 正数 s = CLng(1.6) Debug.Print s '// 2 s = CLng(1.5) Debug.Print s '// 2 s = CLng(1.49) Debug.Print s '// 1 s = CLng(1.4) Debug.Print s '// 1 s = CLng(23.5) Debug.Print s '// 24 s = CLng(32.5) Debug.Print s '// 32 '// 負数 s = CLng(-1.6) Debug.Print s '// -2 s = CLng(-1.5) Debug.Print s '// -2 s = CLng(-1.49) Debug.Print s '// -1 s = CLng(-1.4) Debug.Print s '// -1 s = CLng(-23.5) Debug.Print s '// -24 s = CLng(-32.5) Debug.Print s '// -32 End Sub |
CBool(引数)
CBool関数はデータ型をBoolean型に変換します。
引数が0の場合はFalse、それ以外の数値は正負に関わらずTrueになります。
文字列の”true”、”false”も変換可能です。大文字小文字に関わらず変換されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub CBoolTest() Dim s s = CBool("1330.5") Debug.Print s '// True s = CBool("1") Debug.Print s '// True s = CBool("-30") Debug.Print s '// True s = CBool("0") Debug.Print s '// False s = CBool("true") Debug.Print s '// True s = CBool("TRUE") Debug.Print s '// True s = CBool("True") Debug.Print s '// True s = CBool("false") Debug.Print s '// False s = CBool("FALSE") Debug.Print s '// False s = CBool("False") Debug.Print s '// False End Sub |
浮動小数点:CSng(引数)、CDbl(引数)
CSng関数はデータ型をSingle型に変換します。
CDbl関数はデータ型をDouble型に変換します。
CStr(引数)
CStr関数はデータ型をString型に変換します。
CCur(引数)
CCur関数はデータ型をCurrency型(通貨型)に変換します。
Val(引数)
Val関数は文字列を数値に変換します。変換結果はDouble型になります。
引数の文字列を左端から順に数字を数値に変換します。数字でない場合はそこで変換が終了します。そのため、左端に\円記号がついている場合は数値変換できずに0に変換されます。Val関数と同様にDouble型に変換するCDbl関数の場合は\円記号は数値の一部として解釈しますがVal関数は解釈してくれません。
なお、半角スペースかピリオド(.)の場合は数値記号として認識されるため変換は終了しません。
また、”&o”、”&O”のどちらかが左についていれば8進数、”&h”、”&H”のどちらかが左についていれば16進数として判断されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub ValTest() Dim s s = Val("1.5") Debug.Print s '// 1.5 s = Val("1,234") Debug.Print s '// 1 s = Val("\1234") Debug.Print s '// 0 s = Val(" 1234") Debug.Print s '// 1234 s = Val("&O8") Debug.Print s '// 10(8進数の8を10進数の10に変換) s = Val("&HF") Debug.Print s '// 15(16進数のFを10進数の15に変換) End Sub |