ヘッダー
Visual Basic サンプル集
VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

変数の宣言

2021/2/28

→ C# のサンプルに切り替える

 

一般的な変数の宣言

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim fileCount As Integer
Dim customerName As String
Dim birthday As Date
Dim logFile As System.IO.FileInfo

 

 

New を伴うときにできる簡略な宣言

宣言時に New を使って初期化するときは次のように特別な簡略形を使用できます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim addButton As New System.Windows.Forms.Button
Dim dueDate As New Date(2024, 6, 27)
Dim corner As New Point(Me.Left + 10 , 10)

 

 

初期値の指定

変数に最初に値を代入することを「初期化」と呼びます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim number1 As Integer = 123
Dim totalPoint As Long = 100 + 52
Dim message As String = "Hello!"
Dim expireDate As Date = #6/27/2024#
Dim dueDate As Date = New Date(2024, 6, 27)
Dim yesterday As Date = Now.AddDays(-1) '昨日の日付
Dim saveFile As System.IO.FileInfo = Nothing

メモ:配列やクラス、一部のコレクション(List, Dictionary)では特別な初期化の構文を使用することもできます。

 

 

型推論:型を自動的に決定させる

宣言時に値を代入すると、型名を省略してもVBが型を決定してくれます。これを型推論と呼びます。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim number1 = 123 'Integer になります。
Dim totalPoint = 100 + 52 'Integer になります。
Dim average = 100 / 32 'Double になります。
Dim message = "Hello!" 'String になります。
Dim expireDate = #6/27/2024# 'Date になります。
Dim dueDate = New Date(2024, 6, 27) 'Date になります。
Dim yesterday = Now.AddDays(-1) 'Date になります。
Dim saveFile = New System.IO.FileInfo("C:\temp\test.txt") 'FileInfo になります。

メモ:どのような型になったかは、マウスカーソルを変数名の上にホバーさせると表示されます。

メモ:型推論はローカルスコープの変数(つまり、Sub ~ End Sub または Function ~ End Function などの間にある変数)でのみ使用できます。

 

 

複数の変数の宣言

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim x, y, z As Integer
Dim firstName, lastName As String, age As Integer

メモ:ほとんど見かけない宣言方法です。1行ずつ変数を宣言するのが一般的です。

 

 

型を指定しない

型を指定しない場合 で、かつ前述の型推論も使用できない場合は Object型 になります。

この例は Option Strict Off の場合のみ有効です。→ Option Strict を On/Off する方法

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応


Dim syncLocker 'Object になります。

メモ:この宣言方法は推奨されません。意図的に Object型 にしたい場合は As Object にするべきです。

 

 

型文字を使って型を指定する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim number1% 'Integer になります。
Dim totalPoint& 'Long になります。
Dim average@ 'Decimal になります。
Dim message$ 'String になります。
Dim rate! 'Single になります。
Dim arg# 'Double になります。

メモ:型文字はこの6種類ですべてです。

メモ:この宣言方法はとてもわかりにくいので使用すべきではありません。

 

 

特殊な名前の変数

変数名を [ ] で囲むと予約語と同じ名前の変数を宣言できます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim [Dim] As Integer
Dim [Sub] As String

メモ:このような変数名はそもそも使用すべきではありません。

 

 

アクセスレベル(Public, Privateなど)を指定

クラスレベルの変数はPublic, Protected, Private などアクセスレベルを指定するキーワードを使って宣言できます。Dim で宣言した場合は Private と同じ効果です。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Sku As String

Private isCached As Boolean
Protected Friend initializer As IDisposable

メモ:このように使用する変数は「フィールド」と呼びます。

 

 

共有メンバー(静的メンバー)として宣言

クラスレベルの変数はSharedをつけて宣言すると共有メンバー(静的メンバー)になります。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Shared Sku As String

Private Shared isCached As Boolean
Protected Friend Shared initializer As IDisposable

メモ:このように使用する変数は「フィールド」と呼びます。

 

 

値を保持する変数

ローカルレベルの変数は Static をつけて宣言することで最後に代入された値を維持します。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応


Static count As Integer
	

メモ:この機能はわかりにくいので使うべきではありません。

 

 

読み取り専用の変数

クラスレベルの変数は ReadOnly を使って宣言することで宣言時の初期化およびコンストラクターを除いた場所での値の代入ができなくなります。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応


ReadOnly seed As Integer

メモ:この機能はわかりにくいので、熟考の後使用してください。

 

 

参考:見慣れないこれは何?

Dim items() As String '配列の宣言。

Dim graphs(,) As Double '二次元配列の宣言。
Dim histories(9) As Uri '最後の要素のインデックスが9である配列の宣言。

Dim members(0 To 99) As String '配列の宣言。

Dim days(6, 4) As Date '二次元配列の宣言。

Const rate As Decimal = 12.3D '定数の宣言。右辺の D は Decimal のリテラルであることを表します。
Dim age As Integer? 'Null許容型。
Dim isSame = i = 0 ' 別途宣言されている変数i の値が 0 であれば isSame は True になり、そうでなければ False になります。

Dim locations As List(Of Point) ' Of ... は ジェネリック。

Dim value As T 'T はどこかでジェネリック宣言されている型パラメーター。(名前がTであるとは限りませんが慣用的に T とすることが多いです。)
<Obsolete>Dim x As Integer '属性付きの宣言。クラスレベルの変数でのみ使用できます。
Dim button As New System.Windows.Forms.Button With {.Text = "更新"} 'オブジェクト初期化子 を使った宣言。オブジェクト初期化子
Dim response = New With {.Status = 301, .Location="xxx"} '匿名型。

Dim WithEvents txtValidation As System.Windows.Forms.TextBox 'イベントをハンドルできる宣言。
Dim result = (True, "200 OK") 'タプル。

Dim files = {"note.txt", "piano.png", "score.pdf"} '右辺は配列リテラル。 files は配列になります。
Dim eras As New List(Of String) From {"M", "T", "S", "H", "R"} 'From 以降はコレクション初期化子。

Dim hits = From name In names Where name.StartsWith("VB") '右辺は LINQのクエリ式。 LINQ の概要
 
Dim manifest = <manifest><item id="xxx" count=<%= 12 %> /></manifest> '右辺は XMLリテラル。LINQ to XML

Dim check = Function(x As Integer) x > 0 '右辺は ラムダ式。ラムダ式

 

参考

Dim ステートメント - Visual Basic | Microsoft Docs

 


VB6対応 VB6でも基本的にDimを使います。 1回のDimで1つの変数を宣言し、複数の変数を宣言する場合は行を分けるのが無難です。