Dim ステートメント (Visual Basic)Dim Statement (Visual Basic)

宣言し、1 つまたは複数の変数の記憶域を割り当てます。Declares and allocates storage space for one or more variables.


[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]   
Dim [ WithEvents ] variablelist  


  • attributelist

    任意。Optional. 参照してください属性一覧です。See Attribute List.

  • accessmodifier

    任意。Optional. 次のいずれかの値を指定します。Can be one of the following:

    参照してくださいVisual Basic でのレベルのアクセスです。See Access levels in Visual Basic.

  • Shared

    任意。Optional. 参照してください共有です。See Shared.

  • Shadows

    任意。Optional. 参照してくださいShadowsです。See Shadows.

  • Static

    任意。Optional. 参照してください静的です。See Static.

  • ReadOnly

    任意。Optional. 参照してくださいReadOnlyです。See ReadOnly.

  • WithEvents

    任意。Optional. これらがイベントを発生させるクラスのインスタンスを参照するオブジェクト変数であることを指定します。Specifies that these are object variables that refer to instances of a class that can raise events. 参照してくださいWithEventsです。See WithEvents.

  • variablelist

    必須。Required. このステートメントで宣言されている変数の一覧です。List of variables being declared in this statement.

    variable [ , variable ... ]

    variable の構文と指定項目は次のとおりです。Each variable has the following syntax and parts:

    variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]

    パーツPart 説明Description
    variablename 必須。Required. 変数の名前です。Name of the variable. 参照してください宣言された要素の名前です。See Declared Element Names.
    boundslist 任意。Optional. 配列変数の各次元の境界の一覧です。List of bounds of each dimension of an array variable.
    New 任意。Optional. クラスの新しいインスタンスを作成時に、Dimステートメントが実行されています。Creates a new instance of the class when the Dim statement runs.
    datatype 任意。Optional. 変数のデータ型。Data type of the variable.
    With 任意。Optional. オブジェクト初期化子リストが導入されています。Introduces the object initializer list.
    propertyname 任意。Optional. インスタンスを作成するクラスのプロパティの名前。The name of a property in the class you are making an instance of.
    propinitializer 後に必要なpropertyname= です。Required after propertyname =. 評価され、プロパティ名に割り当てられている式です。The expression that is evaluated and assigned to the property name.
    initializer 省略可能な場合Newが指定されていません。Optional if New is not specified. 式が評価され、変数に割り当てが作成されるときです。Expression that is evaluated and assigned to the variable when it is created.


Visual Basic コンパイラを使用して、Dim変数のデータ型とどのようなコードが変数にアクセスできるなど、他の情報を確認するステートメント。The Visual Basic compiler uses the Dim statement to determine the variable's data type and other information, such as what code can access the variable. 次の例を保持する変数の宣言、Integer値。The following example declares a variable to hold an Integer value.

Dim numberOfStudents As Integer  

任意のデータ型または列挙型、構造体、クラス、またはインターフェイスの名前を指定することができます。You can specify any data type or the name of an enumeration, structure, class, or interface.

Dim finished As Boolean  
Dim monitorBox As System.Windows.Forms.Form  

使用する参照型の場合、Newデータ型によって、クラスの新しいインスタンスを作成または構造体にキーワードを指定します。For a reference type, you use the New keyword to create a new instance of the class or structure that is specified by the data type. 使用する場合New、初期化子式を使用しないでください。If you use New, you do not use an initializer expression. 代わりに、これらが必要な場合、変数の作成元となるクラスのコンス トラクターに引数を指定します。Instead, you supply arguments, if they are required, to the constructor of the class from which you are creating the variable.

Dim bottomLabel As New System.Windows.Forms.Label  

プロシージャ、ブロック、クラス、構造体、またはモジュール内の変数を宣言することができます。You can declare a variable in a procedure, block, class, structure, or module. ソース ファイル、名前空間、またはインターフェイスの変数を宣言することはできません。You cannot declare a variable in a source file, namespace, or interface. 詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。For more information, see Declaration Contexts and Default Access Levels.

プロシージャの外部のモジュール レベルで宣言された変数は、メンバー変数またはフィールドです。A variable that is declared at module level, outside any procedure, is a member variable or field. メンバー変数は、そのクラス、構造体、またはモジュール全体にわたってスコープでは。Member variables are in scope throughout their class, structure, or module. プロシージャ レベルで宣言された変数は、ローカル変数です。A variable that is declared at procedure level is a local variable. ローカル変数は、そのプロシージャまたはブロック内でのみスコープでは。Local variables are in scope only within their procedure or block.

次のアクセス修飾子を使用して、プロシージャの外部変数を宣言します。 PublicProtectedFriendProtected Friend、およびPrivateです。The following access modifiers are used to declare variables outside a procedure: Public, Protected, Friend, Protected Friend, and Private. 詳細については、次を参照してください。 Visual Basic でのレベルのアクセスです。For more information, see Access levels in Visual Basic.

Dimキーワードは省略可能な次の修飾子のいずれかを指定する場合、通常は省略して: PublicProtectedFriendProtected FriendPrivateSharedShadowsStaticReadOnly、またはWithEventsです。The Dim keyword is optional and usually omitted if you specify any of the following modifiers: Public, Protected, Friend, Protected Friend, Private, Shared, Shadows, Static, ReadOnly, or WithEvents.

Public maximumAllowed As Double  
Protected Friend currentUserName As String  
Private salary As Decimal  
Static runningTotal As Integer  

場合Option Explicitはコンパイラ on (既定値) を使用するすべての変数の宣言が必要です。If Option Explicit is on (the default), the compiler requires a declaration for every variable you use. 詳細については、次を参照してください。 Option Explicit ステートメントです。For more information, see Option Explicit Statement.

初期値を指定します。Specifying an Initial Value

作成されるときに、変数に値を割り当てることができます。You can assign a value to a variable when it is created. 値の型を使用する、初期化子を変数に割り当てられる式を指定します。For a value type, you use an initializer to supply an expression to be assigned to the variable. 式は、コンパイル時に計算できる定数に評価される必要があります。The expression must evaluate to a constant that can be calculated at compile time.

Dim quantity As Integer = 10  
Dim message As String = "Just started"  

初期化子が指定され、データ型がで指定されていない場合、As句、型推論初期化子からのデータ型を推論するために使用します。If an initializer is specified and a data type is not specified in an As clause, type inference is used to infer the data type from the initializer. 次の例では、両方ともnum1num2整数値として厳密に型指定します。In the following example, both num1 and num2 are strongly typed as integers. 2 番目の宣言では、型の推論は、値は 3 から型を推測します。In the second declaration, type inference infers the type from the value 3.

' Use explicit typing.  
Dim num1 As Integer = 3  

' Use local type inference.  
Dim num2 = 3  

型の推論は、プロシージャ レベルで適用されます。Type inference applies at the procedure level. クラス、構造体、モジュール、またはインターフェイスのプロシージャの外側は適用されません。It does not apply outside a procedure in a class, structure, module, or interface. 型の推定の詳細については、次を参照してください。 Option Infer ステートメントローカル型推論です。For more information about type inference, see Option Infer Statement and Local Type Inference.

データ型または初期化子が指定されていない場合の動作方法については、次を参照してください。既定のデータ型と値このトピックで後述します。For information about what happens when a data type or initializer is not specified, see Default Data Types and Values later in this topic.

使用することができます、オブジェクトの初期化子匿名の名前付きの型のインスタンスを宣言します。You can use an object initializer to declare instances of named and anonymous types. 次のコードがのインスタンスを作成、Studentクラスし、プロパティを初期化するために、オブジェクト初期化子を使用します。The following code creates an instance of a Student class and uses an object initializer to initialize properties.

Dim student1 As New Student With {.First = "Michael",   
                                  .Last = "Tucker"}  

オブジェクト初期化子の詳細については、次を参照してくださいする方法: オブジェクト初期化子を使用してオブジェクトを宣言オブジェクト初期化子: 名前付きおよび匿名型、および匿名型For more information about object initializers, see How to: Declare an Object by Using an Object Initializer, Object Initializers: Named and Anonymous Types, and Anonymous Types.

複数の変数を宣言します。Declaring Multiple Variables

かっこで次の各配列名と、それぞれの変数名を指定する 1 つの宣言ステートメントで複数の変数を宣言できます。You can declare several variables in one declaration statement, specifying the variable name for each one, and following each array name with parentheses. 複数の変数を指定するときは、コンマで区切ります。Multiple variables are separated by commas.

Dim lastTime, nextTime, allTimes() As Date  

いずれかで 1 つ以上の変数を宣言する場合As句、そのグループの変数の初期化子を指定することはできません。If you declare more than one variable with one As clause, you cannot supply an initializer for that group of variables.

個別を使用して別の変数の別のデータ型を指定することができますAsそれぞれの変数を宣言する句。You can specify different data types for different variables by using a separate As clause for each variable you declare. 各変数は、最初に指定されたデータ型を受け取りAs句の後に発生したそのvariablename一部です。Each variable takes the data type specified in the first As clause encountered after its variablename part.

Dim a, b, c As Single, x, y As Double, i As Integer  
' a, b, and c are all Single; x and y are both Double  


保持する変数を宣言することができます、配列、複数の値を保持することができます。You can declare a variable to hold an array, which can hold multiple values. 次の変数は配列を保持することを指定する、variablenameかっこですぐにします。To specify that a variable holds an array, follow its variablename immediately with parentheses. 配列の詳細については、次を参照してください。配列です。For more information about arrays, see Arrays.

配列の各次元の上限と下限を指定することができます。You can specify the lower and upper bound of each dimension of an array. これを行うには、含める、boundslistかっこの中にします。To do this, include a boundslist inside the parentheses. 各ディメンションに対して、boundslist上限の境界と必要に応じて、下限を指定します。For each dimension, the boundslist specifies the upper bound and optionally the lower bound. 下限とは常に 0 の場合か、指定するかどうか。The lower bound is always zero, whether you specify it or not. 各インデックスは、0 ~ 上限値から変更できます。Each index can vary from zero through its upper bound value.

次の 2 つのステートメントは同等です。The following two statements are equivalent. 各ステートメントは、21 の配列を宣言Integer要素。Each statement declares an array of 21 Integer elements. 配列にアクセスするときにインデックスが 0 ~ 20 異なることができます。When you access the array, the index can vary from 0 through 20.

Dim totals(20) As Integer  
Dim totals(0 To 20) As Integer  

次のステートメントは、型の 2 次元配列を宣言してDoubleです。The following statement declares a two-dimensional array of type Double. 配列は、4 6 列 (5 + 1) 各の行 (3 + 1) です。The array has 4 rows (3 + 1) of 6 columns (5 + 1) each. 上限が、ディメンションの長さではなく、インデックスの最大値を表すことに注意してください。Note that an upper bound represents the highest possible value for the index, not the length of the dimension. 次元の長さは、上限の境界と 1 つです。The length of the dimension is the upper bound plus one.

Dim matrix2(3, 5) As Double  

配列は、1 から 32 次元を持つことができます。An array can have from 1 to 32 dimensions.

すべての境界を配列の宣言に空白にできます。You can leave all the bounds blank in an array declaration. これを行う場合は、配列は、指定すると、ディメンションの数が初期化されていません。If you do this, the array has the number of dimensions you specify, but it is uninitialized. 値があるNothingには、少なくとも初期化するまでその要素の一部です。It has a value of Nothing until you initialize at least some of its elements. Dimステートメントは、境界内のすべてのディメンションまたはディメンションがありませんのいずれかを指定する必要があります。The Dim statement must specify bounds either for all dimensions or for no dimensions.

' Declare an array with blank array bounds.  
Dim messages() As String  
' Initialize the array.  
ReDim messages(4)  

配列に 1 つ以上のディメンションがある場合は、ディメンションの数を示すためにかっこで囲まれたコンマを含める必要があります。If the array has more than one dimension, you must include commas between the parentheses to indicate the number of dimensions.

Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte  

宣言することができます、長さ 0 の配列-1 である配列の次元のいずれかを宣言することによりします。You can declare a zero-length array by declaring one of the array's dimensions to be -1. 長さ 0 の配列を保持する変数は、値を持たないNothingです。A variable that holds a zero-length array does not have the value Nothing. 長さ 0 の配列は、共通言語ランタイムの一部の関数は必要です。Zero-length arrays are required by certain common language runtime functions. このような配列にアクセスしようとすると、ランタイム例外が発生します。If you try to access such an array, a runtime exception occurs. 詳細については、次を参照してください。配列です。For more information, see Arrays.

配列リテラルを使用して、配列の値を初期化することができます。You can initialize the values of an array by using an array literal. これを行うには、中かっこと初期化の値を囲む ({})。To do this, surround the initialization values with braces ({}).

Dim longArray() As Long = {0, 1, 2, 3}  

多次元配列は、各次元の初期化は、外側のディメンションの中かっこで囲まれます。For multidimensional arrays, the initialization for each separate dimension is enclosed in braces in the outer dimension. 要素は、行優先順で指定されます。The elements are specified in row-major order.

Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}  

配列リテラルの詳細については、次を参照してください。配列です。For more information about array literals, see Arrays.

既定のデータ型し、値Default Data Types and Values

次の表では、Dim ステートメントのデータ型と初期化子を指定するさまざまな組み合わせの結果を示します。The following table describes the results of various combinations of specifying the data type and initializer in a Dim statement.

データ型が指定されているかData type specified? 初期化子が指定されているかInitializer specified? Example 結果Result
No いいえNo Dim qty 場合Option Strictに設定されている変数 off (既定)、Nothingです。If Option Strict is off (the default), the variable is set to Nothing.

Option Strict がオンの場合、コンパイル時エラーが発生します。If Option Strict is on, a compile-time error occurs.
No [はい]Yes Dim qty = 5 場合Option Infer on (既定値) は、変数は、データが初期化子の型します。If Option Infer is on (the default), the variable takes the data type of the initializer. 参照してくださいローカル型推論です。See Local Type Inference.

Option Infer がオフで、Option Strict がオフの場合、変数は Object のデータ型になります。If Option Infer is off and Option Strict is off, the variable takes the data type of Object.

Option Infer がオフで、Option Strict がオンの場合、コンパイル時エラーが発生します。If Option Infer is off and Option Strict is on, a compile-time error occurs.
Yes No Dim qty As Integer 変数は、データ型の既定値に初期化されます。The variable is initialized to the default value for the data type. このセクションの後半の表を参照してください。See the table later in this section.
[はい]Yes Yes Dim qty As Integer = 5 初期化子のデータ型を指定したデータ型に変換できない場合は、コンパイル時エラーが発生します。If the data type of the initializer is not convertible to the specified data type, a compile-time error occurs.

データ型を指定して、初期化子を指定しない場合、Visual Basic は、そのデータ型の既定値に変数を初期化します。If you specify a data type but do not specify an initializer, Visual Basic initializes the variable to the default value for its data type. 次の表は、既定値に初期化の値を示します。The following table shows the default initialization values.

データの種類Data type 既定値Default value
すべての数値型 (などByteSByte)All numeric types (including Byte and SByte) 00
Char バイナリ 0Binary 0
参照型はすべて (含むObjectString、およびすべての配列)All reference types (including Object, String, and all arrays) Nothing
Boolean False
Date 1 年 1 月 1 日の午前 12時 00分 (01/01/0001 12時 00分: 00 AM)12:00 AM of January 1 of the year 1 (01/01/0001 12:00:00 AM)

構造体の各要素は個別の変数の場合と同様に初期化します。Each element of a structure is initialized as if it were a separate variable. 配列の長さを宣言でその要素を初期化しない場合、各要素は、個別の変数の場合と同様に初期化されます。If you declare the length of an array but do not initialize its elements, each element is initialized as if it were a separate variable.

静的ローカル変数有効期間Static Local Variable Lifetime

AStaticローカル変数が宣言されているプロシージャの場合よりも有効期間が長くなります。A Static local variable has a longer lifetime than that of the procedure in which it is declared. 変数の有効期間の境界は、プロシージャが宣言されていると、かどうかによって異なります。Sharedです。The boundaries of the variable's lifetime depend on where the procedure is declared and whether it is Shared.

プロシージャの宣言Procedure declaration 初期化された変数Variable initialized 既存の変数を停止します。Variable stops existing
モジュールでIn a module 最初に、プロシージャを呼び出すThe first time the procedure is called プログラムが実行を停止します。When your program stops execution
手順は、クラスまたは構造体は、します。 SharedIn a class or structure, procedure is Shared 最初に、プロシージャを呼び出すか、特定のインスタンスまたはクラスまたは構造体自体The first time the procedure is called either on a specific instance or on the class or structure itself プログラムが実行を停止します。When your program stops execution
クラスまたは構造体では、プロシージャはありません。 SharedIn a class or structure, procedure isn't Shared 初めてプロシージャは特定のインスタンスで呼び出されます。The first time the procedure is called on a specific instance ガベージ コレクション (GC) のインスタンスを解放する場合When the instance is released for garbage collection (GC)

属性と修飾子Attributes and Modifiers

属性は、ローカル変数ではなく、メンバー変数にのみ適用できます。You can apply attributes only to member variables, not to local variables. 属性は、ローカル変数などの一時的なストレージの意味ではないアセンブリのメタデータに情報を提供します。An attribute contributes information to the assembly's metadata, which is not meaningful for temporary storage such as local variables.

モジュール レベルで使用することはできません、Static修飾子メンバー変数を宣言します。At module level, you cannot use the Static modifier to declare member variables. プロシージャ レベルでは使用できませんSharedShadowsReadOnlyWithEventsのいずれかのアクセス修飾子をローカル変数を宣言するか。At procedure level, you cannot use Shared, Shadows, ReadOnly, WithEvents, or any access modifiers to declare local variables.

指定することによって、変数にアクセスできるコードを指定することができます、accessmodifierです。You can specify what code can access a variable by supplying an accessmodifier. クラスとモジュールのメンバー (プロシージャ) の外部変数既定でプライベート アクセスは、および構造体のメンバー変数の既定でパブリック アクセスです。Class and module member variables (outside any procedure) default to private access, and structure member variables default to public access. アクセス修飾子を使用してこれらのアクセス レベルを調整できます。You can adjust their access levels with the access modifiers. (プロシージャ) 内のローカル変数にアクセス修飾子を使用することはできません。You cannot use access modifiers on local variables (inside a procedure).

指定できますWithEventsのみメンバー変数ではなく、プロシージャ内のローカル変数。You can specify WithEvents only on member variables, not on local variables inside a procedure. 指定した場合WithEvents、変数のデータ型では、特定のクラス型を解除する必要があるObjectです。If you specify WithEvents, the data type of the variable must be a specific class type, not Object. 格納された配列を宣言することはできませんWithEventsです。You cannot declare an array with WithEvents. イベントの詳細については、次を参照してください。イベントです。For more information about events, see Events.


コードをクラスの外部構造体、またはモジュール修飾する必要がありますそのクラス、構造体、モジュールの名前を持つメンバー変数の名前。Code outside a class, structure, or module must qualify a member variable's name with the name of that class, structure, or module. プロシージャまたはブロックは、そのプロシージャまたはブロック内のローカル変数を参照できません外部をコードします。Code outside a procedure or block cannot refer to any local variables within that procedure or block.

マネージ リソースを解放します。Releasing Managed Resources

ユーザーによる追加のコーディングなしに、.NET Framework のガベージ コレクターがマネージ リソースを破棄します。The .NET Framework garbage collector disposes of managed resources without any extra coding on your part. ただし、ガベージ コレクターを待つ代わりにマネージ リソースの破棄を強制することができます。However, you can force the disposal of a managed resource instead of waiting for the garbage collector.

クラスは、特に、不足しているリソース (データベース接続やファイル ハンドル) などの上に保持している場合、次のガベージ コレクションが不要で使用されるクラスのインスタンスをクリーンアップするまで待機することがないできます。If a class holds onto a particularly valuable and scarce resource (such as a database connection or file handle), you might not want to wait until the next garbage collection to clean up a class instance that's no longer in use. クラスが実装することが、IDisposableガベージ コレクションの前にリソースを解放する方法を提供するインターフェイスです。A class may implement the IDisposable interface to provide a way to release resources before a garbage collection. そのインターフェイスを実装するクラスは、公開、Dispose貴重なリソースを直ちに解放を強制的に呼び出すことができるメソッドです。A class that implements that interface exposes a Dispose method that can be called to force valuable resources to be released immediately.

Usingステートメントは、リソースを取得する、一連のステートメントを実行およびリソースの破棄し、プロセスを自動化します。The Using statement automates the process of acquiring a resource, executing a set of statements, and then disposing of the resource. ただし、リソースを実装する必要があります、IDisposableインターフェイスです。However, the resource must implement the IDisposable interface. 詳細については、「Using ステートメント」を参照してください。For more information, see Using Statement.


次の例では、変数を宣言を使用して、Dimさまざまなオプションを含むステートメント。The following example declares variables by using the Dim statement with various options.

' Declare and initialize a Long variable.
Dim startingAmount As Long = 500

' Declare a variable that refers to a Button object,
' create a Button object, and assign the Button object
' to the variable.
Dim switchButton As New System.Windows.Forms.Button

' Declare a local variable that always retains its value,
' even after its procedure returns to the calling code.
Static totalSales As Double

' Declare a variable that refers to an array.
Dim highTemperature(31) As Integer

' Declare and initialize an array variable that
' holds four Boolean check values.
Dim checkValues() As Boolean = {False, False, True, False}


次の例は、1 ~ 30 の素数を一覧表示します。The following example lists the prime numbers between 1 and 30. ローカル変数のスコープには、コードのコメントが記載されています。The scope of local variables is described in code comments.

Public Sub ListPrimes()
    ' The sb variable can be accessed only
    ' within the ListPrimes procedure.
    Dim sb As New System.Text.StringBuilder()

    ' The number variable can be accessed only
    ' within the For...Next block.  A different
    ' variable with the same name could be declared
    ' outside of the For...Next block.
    For number As Integer = 1 To 30
        If CheckIfPrime(number) = True Then
            sb.Append(number.ToString & " ")
        End If

    ' Output: 2 3 5 7 11 13 17 19 23 29
End Sub

Private Function CheckIfPrime(ByVal number As Integer) As Boolean
    If number < 2 Then
        Return False
        ' The root and highCheck variables can be accessed
        ' only within the Else block.  Different variables
        ' with the same names could be declared outside of
        ' the Else block.
        Dim root As Double = Math.Sqrt(number)
        Dim highCheck As Integer = Convert.ToInt32(Math.Truncate(root))

        ' The div variable can be accessed only within
        ' the For...Next block.
        For div As Integer = 2 To highCheck
            If number Mod div = 0 Then
                Return False
            End If

        Return True
    End If
End Function


次の例で、speedValue変数はクラス レベルで宣言します。In the following example, the speedValue variable is declared at the class level. Private変数を宣言するキーワードを使用します。The Private keyword is used to declare the variable. 変数のいずれの手順によってアクセスできる、Carクラスです。The variable can be accessed by any procedure in the Car class.

' Create a new instance of a Car.
Dim theCar As New Car()

' Output: 45
Public Class Car
    ' The speedValue variable can be accessed by
    ' any procedure in the Car class.
    Private speedValue As Integer = 0

    Public ReadOnly Property Speed() As Integer
            Return speedValue
        End Get
    End Property

    Public Sub Accelerate(ByVal speedIncrease As Integer)
        speedValue += speedIncrease
    End Sub
End Class

関連項目See Also

Const ステートメントConst Statement
ReDim ステートメントReDim Statement
Option Explicit ステートメントOption Explicit Statement
Option Infer ステートメントOption Infer Statement
Option Strict ステートメントOption Strict Statement
[コンパイル] ページ、プロジェクト デザイナー (Visual Basic)Compile Page, Project Designer (Visual Basic)
変数宣言Variable Declaration
オブジェクト初期化子 : 名前付きの型と匿名型Object Initializers: Named and Anonymous Types
匿名型Anonymous Types
オブジェクト初期化子 : 名前付きの型と匿名型Object Initializers: Named and Anonymous Types
方法 : オブジェクト初期化子を使用してオブジェクトを宣言するHow to: Declare an Object by Using an Object Initializer
ローカル型の推論Local Type Inference