即効テクニック |
Excel2000 VBAには、データを特定のデータ型に変換するデータ型変換関数が用意されており、データを特定のデータ型に変換することが可能です。 データ型変換関数は、次の一覧のとおりです。 ・データ型変換関数一覧表 関数 戻り値のデータ型 変換できる値の範囲 CBool ブール型(Boolean) 任意の有効な文字列または数式 CByte バイト型(Byte) 0 〜 255 CCur 通貨型(Currency) -922,337,203,685,477.5808 〜 922,337,203,685,477.5807 CDate 日付型(Date) 任意の有効な日付式 CDbl 倍精度浮動小数点数型(Double) 負の値 : -1.79769313486231E308 〜 -4.94065645841247E-324 正の値 : 4.94065645841247E-324 〜 1.79769313486232E308 CDec 10 進型(Decimal) 小数点以下が 0 桁 (小数部分を持た ない数値) の場合、 -79,228,162,514,264,337,593,543,950,335 〜 79,228,162,514,264,337,593,543,950,335 小数点以下 28 桁の数値の場合、 -7.9228162514264337593543950335 〜 7.9228162514264337593543950335 CInt 整数型(Integer) -32,768 〜 32,767小数部分は丸められます。 CLng 長整数型(Long) -2,147,483,648 〜 2,147,483,647小数部分 は丸められます。 CSng 単精度浮動小数点数型(Single) 負の値 : -3.402823E38 〜 -1.401298E-45、 正の値 : 1.401298E-45 〜 3.402823E38 CVar バリアント型(Variant) 数値の場合は倍精度浮動小数点数型の範囲 と同じ数値以外の場合は、文字列型の範囲 と同じ CStr 文字列型(String) CStr 関数の戻り値は引数 expression により 異なる 構文 データ型変換関数(Expression) 設定項目 内容 Expression 変換の対象となる数値や数式を指定[省略不可] NumDigitsAfterDecimal 小数点以下に表示する桁数を指定[省略可能] IncludeLeadingDigit 小数点の左側のゼロを表示するかどうか[省略可能] UseParensForNegativeNumbers 負の値の場合に値を括弧で囲むかどうか[省略可能] GroupDigits 桁区切りを表示するかどうか[省略可能] 次のサンプルで、例えば"124.5"という数字が、それぞれのデータ型変換関数によって、どのように変換されるかを確認してください。 ●サンプル●
Sub データ型変換関数Samp1() Dim V As Variant Dim myStr(11) As String Dim i As Integer, myMsg As String V = 124.51 '---変換前の数字 myStr(0) = "変換前" & vbTab & V & vbTab & TypeName(V) & vbCr & _ "----------------------------------" & vbCr myStr(1) = "CBool" & vbTab & CBool(V) & vbTab & TypeName(CBool(V)) & vbCr myStr(2) = "Cbyte" & vbTab & CByte(V) & vbTab & TypeName(CByte(V)) & vbCr myStr(3) = "CCur" & vbTab & CCur(V) & vbTab & TypeName(CCur(V)) & vbCr myStr(4) = "CDate" & vbTab & CDate(V) & vbTab & TypeName(CDate(V)) & vbCr myStr(5) = "CDbl" & vbTab & CDbl(V) & vbTab & TypeName(CDbl(V)) & vbCr myStr(6) = "CDec" & vbTab & CDec(V) & vbTab & TypeName(CDec(V)) & vbCr myStr(7) = "CInt" & vbTab & CInt(V) & vbTab & TypeName(CInt(V)) & vbCr myStr(8) = "CLng" & vbTab & CLng(V) & vbTab & TypeName(CLng(V)) & vbCr myStr(9) = "CSng" & vbTab & CSng(V) & vbTab & TypeName(CSng(V)) & vbCr myStr(10) = "CVar" & vbTab & CVar(V) & vbTab & TypeName(CVar(V)) & vbCr myStr(11) = "CStr" & vbTab & CStr(V) & vbTab & TypeName(CStr(V)) For i = 0 To 11 myMsg = myMsg & myStr(i) Next i MsgBox myMsg End Sub
●解説● Boolean型では、0以外の数値はすべてTrueとなります。また、小数部を持たないByte型、Integer型、Long型では、小数部の絶対値が0.5より大きい場合は切り上げで丸めの処理が行われるため、125という値になっています。 0.5以下の場合には切り捨てられるため、Round関数の丸め処理とは異なることに注意してください。また、Date型に変換された際には、数値はシリアル値とみなされて変換が行われます。 ●補足● それぞれのデータ型の有効範囲を超える値を変換しようとした際にはエラーが発生します。 例えば、40,000という数値はInteger型(有効範囲-32,768 〜 32,767)には変換できません。