データ型変換関数 (Visual Basic)

これらの関数は、インラインでコンパイルされます。つまり、変換コードは、式を評価するコードに含まれます。 変換を実行するためのプロシージャの呼び出しがないことがありますが、これにより、パフォーマンスが向上します。 各関数では、式を特定のデータ型に強制的に変換します。

構文

CBool(expression)
CByte(expression)
CChar(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CObj(expression)
CSByte(expression)
CShort(expression)
CSng(expression)
CStr(expression)
CUInt(expression)
CULng(expression)
CUShort(expression)

パーツ

expression
必須です。 ソース データ型の任意の式。

戻り値のデータ型

次の表に示すように、関数名によって、それが返す値のデータ型が決まります。

関数名 戻り値のデータ型 expression 引数の範囲
CBool Boolean データ型 任意の有効な Char または String または数値式。
CByte Byte データ型 Byte.MinValue (0) から Byte.MaxValue (255) (符号なし)。小数部は丸められます。1

Visual Basic 15.8 以降、Visual Basic では、CByte 関数による浮動小数点からバイトへの変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。
CChar Char データ型 任意の有効な Char または String 式。String の最初の文字のみが変換されます。値には 0 から 65535 (符号なし) を指定できます。
CDate Date データ型 日付と時刻の任意の有効な表現。
CDbl Double 型 負の値の場合は -1.79769313486231570E+308 から -4.94065645841246544E-324 for negative values。正の値の場合は 4.94065645841246544E-324 から 1.79769313486231570E+308。
CDec Decimal データ型 ゼロスケールの数値 (つまり、小数点以下を含まない数値) の場合は +/-79,228,162,514,264,337,593,543,950,335。 小数点以下 28 桁の数値の場合の範囲は +/-7.9228162514264337593543950335 です。 0 以外の最小値は 0.0000000000000000000000000001 (+/-1E-28) です。
CInt Integer データ型 Int32.MinValue (-2147483648) から Int32.MaxValue (2147483647)。小数部は丸められます。1

Visual Basic 15.8 以降、Visual Basic では、CInt 関数による浮動小数点から整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。
CLng Long データ型 Int64.MinValue (-9,223,372,036,854,775,808) から Int64.MaxValue (9,223,372,036,854,775,807)。小数部は丸められます。1

Visual Basic 15.8 以降、Visual Basic では、CLng 関数による浮動小数点から 64 ビット整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。
CObj Object 型 任意の有効な式。
CSByte SByte データ型 SByte.MinValue (-128) から SByte.MaxValue (127)。小数部は丸められます。1

Visual Basic 15.8 以降、Visual Basic では、CSByte 関数による浮動小数点から符号付きバイトへの変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。
CShort Short データ型 Int16.MinValue (-32,768) から Int16.MaxValue (32,767)。小数部は丸められます。1

Visual Basic 15.8 以降、Visual Basic では、CShort 関数による浮動小数点から 16 ビット整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。
CSng Single データ型 負の値の場合は、-3.402823E+38 から -1.401298E-45。正の値の場合は、1.401298E-45 から 3.402823E+38。
CStr String データ型 CStr の戻り値は、expression 引数によって異なります。 「CStr 関数の戻り値」を参照してください。
CUInt UInteger データ型 UInt32.MinValue (0) から UInt32.MaxValue (4,294,967,295)。小数部は丸められます。1

Visual Basic 15.8 以降、Visual Basic では、CUInt 関数による浮動小数点から符号なし整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。
CULng ULong データ型 UInt64.MinValue (0) から UInt64.MaxValue (18,446,744,073,709,551,615)。小数部は丸められます。1

Visual Basic 15.8 以降、Visual Basic では、CULng 関数による浮動小数点から符号なし長整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。
CUShort UShort データ型 UInt16.MinValue (0) から UInt16.MaxValue (65,535) (符号なし)。小数部は丸められます。1

Visual Basic 15.8 以降、Visual Basic では、CUShort 関数による浮動小数点から符号なし 16 ビット整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。

1 小数部は、銀行型丸めと呼ばれる特殊な種類の丸めの対象となる場合があります。 詳細については、「解説」を参照してください。

Remarks

原則として、Convert クラスで、または個々の型の構造体またはクラスで、ToString() などの .NET Framework メソッドに優先して、Visual Basic の型変換関数を使用する必要があります。 Visual Basic 関数は、Visual Basic コードとの最適な相互作用のために設計されており、さらにそれらによって、ソースコードが短くなり、読みやすくなります。 また、.NET Framework 変換メソッドでは、常に Visual Basic 関数と同じ結果が生成されるとは限りません。たとえば、BooleanInteger に変換する場合などです。 詳細については、「データ型のトラブルシューティング」を参照してください。

Visual Basic 15.8 以降、次のメソッドによって返される Single または Double 値を、整数変換関数 (CByteCShortCIntCLngCSByteCUShortCUIntCULng) のいずれかに渡す場合に、浮動小数点から整数への変換のパフォーマンスが最適化されます。

この最適化によって、大量の整数変換を行うコードで、実行が最大 2 倍速くなります。 次の例では、それらの最適化された浮動小数点から整数への変換を示しています。

Dim s As Single = 173.7619
Dim d As Double = s

Dim i1 As Integer = CInt(Fix(s))               ' Result: 173
Dim b1 As Byte = CByte(Int(d))                 ' Result: 173
Dim s1 AS Short = CShort(Math.Truncate(s))     ' Result: 173
Dim i2 As Integer = CInt(Math.Ceiling(d))      ' Result: 174
Dim i3 As Integer = CInt(Math.Round(s))        ' Result: 174

動作

  • 強制型変換。 一般に、データ型変換関数を使用すると、操作の結果を、既定のデータ型ではなく、特定のデータ型に強制的に変換することができます。 たとえば、単精度、倍精度、または整数の算術演算が通常行われるところで、CDec を使用して、10 進数の算術演算を強制的に実行します。

  • 変換の失敗。 関数に渡された expression が、変換先のデータ型の範囲外である場合、OverflowException が発生します。

  • 小数部。 非整数値を整数型に変換する場合、整数変換関数 (CByteCIntCLngCSByteCShortCUIntCULng、および CUShort) で、小数部を削除し、値を最も近い整数に丸めます。

    小数部がちょうど 0.5 の場合、整数変換関数では、最も近い偶数の整数に丸められます。 たとえば、0.5 は 0 に丸められ、1.5 と 2.5 は両方とも 2 に丸められます。 これは、銀行型丸めと呼ばれることもあり、その目的は、そのような多数の数値を加算するときに累積する可能性があるバイアスを補正することです。

    CIntCLng は、Int 関数や Fix 関数とは異なり、数値の小数部を丸めるのではなく、切り捨てます。 さらに、FixInt は常に、渡された同じデータ型の値を返します。

  • 日付/時刻の変換。 IsDate 関数を使用して、値を日付と時刻に変換できるかどうかを判断します。 CDate は、日付リテラルと時刻リテラルを認識しますが、数値は認識しません。 Visual Basic 6.0 の Date 値を Visual Basic 2005 以降のバージョンの Date 値に変換するには、DateTime.FromOADate メソッドを使用できます。

  • ニュートラル日付/時刻値。 Date データ型には、常に日付と時刻の両方の情報が格納されます。 型変換の目的で、Visual Basic では、1/1/0001 (1 年の 1 月 1 日) を日付のニュートラル値、00:00:00 (午前 0 時) を時刻のニュートラル値と見なします。 Date 値を文字列に変換する場合、CStr では、結果の文字列にニュートラル値が含まれません。 たとえば、#January 1, 0001 9:30:00# を文字列に変換した場合、結果は "9:30:00 AM" になります。日付情報は含まれません。 ただし、日付情報は元の Date 値には引き続き存在しているため、DatePart 関数などの関数を使用して回復できます。

  • カルチャの感度。 文字列に関連する型変換関数では、アプリケーションの現在のカルチャ設定に基づいて変換が実行されます。 たとえば、CDate では、システムのロケール設定に従って日付形式が認識されます。 ロケールの正しい順序で日、月、年を指定する必要があります。そうしないと、日付が正しく解釈されない場合があります。 "Wednesday" など、曜日の文字列が含まれている場合、長い日付形式は認識されません。

    ロケールによって指定された形式以外の形式で、値の文字列表現の変換を行う必要がある場合は、Visual Basic 型変換関数を使用できません。 これを行うには、その値の型の ToString(IFormatProvider) および Parse(String, IFormatProvider) メソッドを使用します。 たとえば、文字列を Double に変換する場合は Double.Parse を使用し、Double 型の値を文字列に変換する場合は Double.ToString を使用します。

CType Function

CType 関数は、2 つ目の引数 typename を受け取り、expressiontypename に強制的に変換します。ここで typename は、それに対して有効な変換が存在する任意のデータ型、構造体、クラス、またはインターフェイスなどです。

CType と他の型変換キーワードとの比較については、「CType」と「TryCast 演算子」を参照してください。

CBool の例

次の例では、CBool 関数を使用して、式を Boolean 値に変換しています。 式が 0 以外の値に評価される場合、CBool では True が返されます。それ以外の場合は False が返されます。

Dim a, b, c As Integer
Dim check As Boolean
a = 5
b = 5
' The following line of code sets check to True.
check = CBool(a = b)
c = 0
' The following line of code sets check to False.
check = CBool(c)

CByte の例

次の例では、CByte 関数を使用して、式を Byte に変換しています。

Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)

CChar の例

次の例では、CChar 関数を使用して、String 式の最初の文字を Char 型に変換しています。

Dim aString As String
Dim aChar As Char
' CChar converts only the first character of the string.
aString = "BCD"
' The following line of code sets aChar to "B".
aChar = CChar(aString)

CChar の入力引数は、Char または String データ型である必要があります。 CChar を使用して数値を文字に変換することはできません。これは CChar では数値データ型を受け入れないためです。 次の例では、コード ポイント (文字コード) を表す数値を取得し、それを対応する文字に変換しています。 InputBox 関数を使用して、数字の文字列を取得し、CInt を使用して、文字列を Integer 型に変換し、ChrW を使用して、数値を Char 型に変換しています。

Dim someDigits As String
Dim codePoint As Integer
Dim thisChar As Char
someDigits = InputBox("Enter code point of character:")
codePoint = CInt(someDigits)
' The following line of code sets thisChar to the Char value of codePoint.
thisChar = ChrW(codePoint)

CDate の例

次の例では、CDate 関数を使用して、文字列を Date 値に変換しています。 一般に、日付と時刻を文字列としてハードコーディングする (この例に示すように) ことは推奨されません。 代わりに、#Feb 12、1969#、#4:45:23 PM# などの日付リテラルと時刻リテラルを使用します。

Dim aDateString, aTimeString As String
Dim aDate, aTime As Date
aDateString = "February 12, 1969"
aTimeString = "4:35:47 PM"
' The following line of code sets aDate to a Date value.
aDate = CDate(aDateString)
' The following line of code sets aTime to Date value.
aTime = CDate(aTimeString)

CDbl の例

Dim aDec As Decimal
Dim aDbl As Double
' The following line of code uses the literal type character D to make aDec a Decimal.
aDec = 234.456784D
' The following line of code sets aDbl to 1.9225456288E+1.
aDbl = CDbl(aDec * 8.2D * 0.01D)

CDec の例

次の例では、CDec 関数を使用して、数値を Decimal に変換しています。

Dim aDouble As Double
Dim aDecimal As Decimal
aDouble = 10000000.0587
' The following line of code sets aDecimal to 10000000.0587.
aDecimal = CDec(aDouble)

CInt の例

次の例では、CInt 関数を使用して、値を Integer に変換しています。

Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)

CLng の例

次の例では、CLng 関数を使用して、値を Long に変換しています。

Dim aDbl1, aDbl2 As Double
Dim aLng1, aLng2 As Long
aDbl1 = 25427.45
aDbl2 = 25427.55
' The following line of code sets aLng1 to 25427.
aLng1 = CLng(aDbl1)
' The following line of code sets aLng2 to 25428.
aLng2 = CLng(aDbl2)

CObj の例

次の例では、CObj 関数を使用して、数値を Object に変換しています。 Object 変数自体には、それに代入される Double 値を指す 4 バイトのポインターのみが格納されます。

Dim aDouble As Double
Dim anObject As Object
aDouble = 2.7182818284
' The following line of code sets anObject to a pointer to aDouble.
anObject = CObj(aDouble)

CSByte の例

次の例では、CSByte 関数を使用して、数値を SByte に変換しています。

Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)

CShort の例

次の例では、CShort 関数を使用して、数値を Short に変換しています。

Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)

CSng の例

次の例では、CSng 関数を使用して、値を Single に変換しています。

Dim aDouble1, aDouble2 As Double
Dim aSingle1, aSingle2 As Single
aDouble1 = 75.3421105
aDouble2 = 75.3421567
' The following line of code sets aSingle1 to 75.34211.
aSingle1 = CSng(aDouble1)
' The following line of code sets aSingle2 to 75.34216.
aSingle2 = CSng(aDouble2)

CStr の例

次の例では、CStr 関数を使用して、数値を String に変換しています。

Dim aDouble As Double
Dim aString As String
aDouble = 437.324
' The following line of code sets aString to "437.324".
aString = CStr(aDouble)

次の例では、CStr 関数を使用して、 Date 値を String 値に変換しています。

Dim aDate As Date
Dim aString As String
' The following line of code generates a COMPILER ERROR because of invalid format.
' aDate = #February 12, 1969 00:00:00#
' Date literals must be in the format #m/d/yyyy# or they are invalid.
' The following line of code sets the time component of aDate to midnight.
aDate = #2/12/1969#
' The following conversion suppresses the neutral time value of 00:00:00.
' The following line of code sets aString to "2/12/1969".
aString = CStr(aDate)
' The following line of code sets the time component of aDate to one second past midnight.
aDate = #2/12/1969 12:00:01 AM#
' The time component becomes part of the converted value.
' The following line of code sets aString to "2/12/1969 12:00:01 AM".
aString = CStr(aDate)

CStr では常に、現在のロケールの標準の短い形式 ("6/15/2003 4:35:47 PM" など) で Date 値がレンダリングされます。 ただし CStr では、日付の 1/1/0001 と時刻の 00:00:00 のニュートラル値が含まれません。

CStr によって返される値の詳細については、「CStr 関数の戻り値」を参照してください。

CUInt の例

次の例では、CUInt 関数を使用して、数値を UInteger に変換しています。

Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)

CULng の例

次の例では、CULng 関数を使用して、数値を ULong に変換しています。

Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)

CUShort の例

次の例では、CUShort 関数を使用して、数値を UShort に変換しています。

Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)

関連項目