Visual Basic 6.0 と Visual Basic .NET との変数の違いについて

Cc440901.download(ja-jp,MSDN.10).gif サンプル コードのダウンロード (vbmigtips_variable.exe, 82.7 KB)

Visual Basic 6.0 と Visual Basic .NET のそれぞれで使用される変数には幾つか違いがあります。Visual Basic 6.0 で使用できた変数が使えなくなる場合や、同じ変数名でも、格納される値が異なる場合などがあります。そこで今回、各環境内で使用される変数の相違について紹介します。

図1 の「結果」ボタン (図1) をクリックするとメッセージボックスが表示される EXE を作成する場合、Visual Basic 6.0 での実装コードは以下のとおりです。

 Cc440901.variable_fig01(ja-jp,MSDN.10).gifCc440901.variable_fig03(ja-jp,MSDN.10).gifCc440901.variable_fig02(ja-jp,MSDN.10).gif
 図1

Private Sub Command1_Click()
Dim result As Variant
If IsNumeric(Me.Text1.Text) = True And IsNumeric(Me.Text2.Text) = True Then
Dim a As Integer
Dim b As Integer
a = Me.Text1.Text
b = Me.Text2.Text
result = a ^ b
Else
result = "数値を入力してください"
End If
MsgBox result, vbOKOnly, "結果"
End Sub

リスト1

テキストボックスに入力したデータが数値として認識する場合は結果を表示しますが、認識しない場合は「数値を入力してください」というメッセージを表示します。では、リスト1 の各データ型は、Visual Basic .NET ではどのように記述すればよいのでしょうか。今回は、アップグレードウィザードを活用して Visual Basic .NET に変換されたコードを参考に見ていきましょう。
Visual Basic 6.0 で作成したリスト1 のプロジェクトを、Visual Studio .NET で開きます。すると、自動的にウィザードが起動し、指示に従った操作を行うと、コードが変換されます。下記のコードは、アップグレードウィザードによって変換されたコードです。

Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
Dim result As Object
Dim a As Short
Dim b As Short
If IsNumeric(Me.Text1.Text) = True And IsNumeric(Me.Text2.Text) = True Then
a = CShort(Me.Text1.Text)
b = CShort(Me.Text2.Text)
result = a ^ b
Else
result = "数値を入力してください"
End If
MsgBox(result, MsgBoxStyle.OKOnly, "結果")
End Sub

リスト2

Visual Basic 6.0 で、どのような型のデータでも格納することができる汎用データ型としてバリアント型 (Variant) があります。しかし、Visual Basic .NET では、バリアント型が オブジェクト型 (Object) に変更されます。
Visual Basic .NET では、整数型 (Integer) が短整数型 (Short) に変更されました。Visual Basic .NET では、整数型や長整数型の数値変数に格納されるデータサイズが変更されたためです。Visual Basic 6.0 で 16 ビットの数値が格納されていた整数型は、Visual Basic .NET では 32 ビットの数値が格納され、32 ビットの符号付数値が格納されていた長整数型は、64 ビットの符号付数値が格納されます。これにより、Visual Basic 6.0 で整数型変数は、Visual Basic .NET では短整数型に、長整数型は整数型に変更されます。

Visual Basic 6.0 と Visual Basic .NET で使用される変数の違いは、以下のサイトの一覧を参照してください。
https://www.microsoft.com/japan/msdn/vbasic/techinfo/upgrade/transition/default.asp#language

また、リスト1 とリスト2 を比べてわかるように、変数 a と変数 b の宣言場所が変更されました。Visual Basic 6.0 では、変数の宣言されている行からプロシージャの末尾まで参照することができるのに対し、Visual Basic .NET では、変数を宣言したブロック内でのみ参照することができるからです。