データ型変換関数 (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) (Visual Basic)

任意の有効な Char、String、または数式。

CByte

バイト型 (Byte) (Visual Basic)

0 から 255 (符号なし)。小数部分は丸められます1。

CChar

文字型 (Char) (Visual Basic)

任意の有効な Char または String 式。String の最初の文字だけが変換されます。値は 0 から 65535 (符号なし)。

CDate

日付型 (Date) (Visual Basic)

任意の有効な日付と時刻の表現。

CDbl

倍精度浮動小数点数型 (Double) (Visual Basic)

-1.79769313486231570E+308 ~ -4.94065645841246544E-324 (負の値)。4.94065645841246544E-324 ~ 1.79769313486231570E+308 (正の値)。

CDec

10 進型 (Decimal) (Visual Basic)

小数点以下が 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。絶対値の最小値は 0 を除いた場合、0.0000000000000000000000000001 (+/-1E-28) です。

CInt

整数型 (Integer) (Visual Basic)

-2,147,483,648 から 2,147,483,647。小数部分は丸められます1。

CLng

Long 型 (Visual Basic)

-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807。小数部分は丸められます1。

CObj

オブジェクト型 (Object)

任意の有効な式。

CSByte

SByte 型 (Visual Basic)

-128 から 127。小数部分は丸められます1。

CShort

Short 型 (Visual Basic)

-32,768 から 32,767。小数部分は丸められます1。

CSng

単精度浮動小数点型 (Single) (Visual Basic)

-3.402823E+38 ~ -1.401298E-45 (負の値)。1.401298E-45 ~ 3.402823E+38 (正の値)。

CStr

文字列型 (String) (Visual Basic)

CStr 関数の戻り値は引数 expression により異なります。CStr 関数の戻り値 (Visual Basic) を参照してください。

CUInt

UInteger 型

0 から 4,294,967,295 (符号なし)。小数部分は丸められます1。

CULng

ULong 型 (Visual Basic)

0 から 18,446,744,073,709,551,615 (符号なし)。小数部分は丸められます1。

CUShort

UShort 型 (Visual Basic)

0 から 65,535 (符号なし)。小数部分は丸められます1。

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

解説

規則として、Visual Basic の型変換関数は、Convert クラスと個々の型構造体またはクラスの両方で ToString() などの .NET Framework メソッドよりも優先して使用します。Visual Basic 関数は、Visual Basic コードへの対応に最適化されており、ソース コードをより短く、より読みやすくします。さらに、Boolean を Integer に変換する場合など、.NET Framework の変換メソッドは Visual Basic 関数と同じ結果を生成するとは限りません。詳細については、「データ型のトラブルシューティング (Visual Basic)」を参照してください。

[動作]

  • **強制型変換。**一般に、ある操作結果を既定のデータ型ではなく特定のデータ型に強制的に変換する場合は、データ型変換関数を使用します。たとえば、単精度、倍精度、または整数で計算を行うような場合に、CDec 関数を使用して 10 進の演算を強制的に行います。

  • **変換の失敗。**関数に渡された引数 expression の値が変換されるデータ型の範囲を超えている場合、OverflowException が発生します。

  • **小数部分。**非整数型の値を整数型に変換する場合、整数変換関数 (CByte、CInt、CLng、CSByte、CShort、CUInt、CULng、CUShort) は、最も近い整数に値を丸めて小数部分を取り除きます。

    小数部分がちょうど 0.5 のとき、整数変換関数はこれを最も近い偶数に丸めます。たとえば、0.5 は 0 に、1.5 と 2.5 はどちらも 2 になります。これは銀行型丸めとも呼ばれ、このような数値を大量に加算するときに蓄積する偏りを調整する目的で使用されます。

    Int および Fix 関数は小数部分を丸めるのではなく切り捨てるので、CInt および CLng とは異なります。また、Fix 関数および Int 関数は引き渡された値と同じデータ型で常に値を返します。

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

  • 日付/時刻の基準値。日付型 (Date) (Visual Basic) には、常に日付と時刻の両方の情報が含まれます。型変換のために、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 関数

CType 関数 は、2 番目の引数として typename を取り、expression を強制的に typename に変換します (typename は、有効な変換が可能な任意のデータ型、構造体、クラス、インターフェイス)。

CType とその他の型変換キーワードとの比較については、「DirectCast 演算子 (Visual Basic)」および「TryCast 演算子 (Visual Basic)」を参照してください。

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 型 (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) の変数自体には、4 バイトのポインターだけが含まれます。このポインターは、変数に代入された倍精度浮動小数点数型 (Double) の値を指しています。

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 関数の戻り値 (Visual Basic)」を参照してください。

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)

参照

関連項目

変換関数 (Visual Basic)

Asc

AscW

Chr

ChrW

Int

Fix

Format

Hex

Oct

Str

Val

その他の技術情報

Visual Basic における型変換