最近のバージョンの Excel VBA では、VB エンジンは、整数オーバーフロー制限を維持しながら、整数データ型を Long に変換します。経験則として、Excel VBA では常に Long 値を使用します。
同じことがAccessにも当てはまるかどうかは誰にもわかりますか? 異なる参照を持つ同じエンジンであることは認識していますが、Access VBA に移行するにつれて、決して仮定したくありません。
最近のバージョンの Excel VBA では、VB エンジンは、整数オーバーフロー制限を維持しながら、整数データ型を Long に変換します。経験則として、Excel VBA では常に Long 値を使用します。
同じことがAccessにも当てはまるかどうかは誰にもわかりますか? 異なる参照を持つ同じエンジンであることは認識していますが、Access VBA に移行するにつれて、決して仮定したくありません。
仮定には注意してください。
以下を参照してください。
Sub checkForVariableMemorySizes()
Dim arrInt() As Integer
ReDim arrInt(1 To 2)
arrInt(1) = 12
arrInt(2) = 456
Dim arrLong() As Long
ReDim arrLong(1 To 2)
arrLong(1) = 12
arrLong(2) = 456
Debug.Print "Integer size:" & vbTab & VarPtr(arrInt(2)) - VarPtr(arrInt(1)) & vbTab & vbTab & "Typename: " & TypeName(arrInt(2))
Debug.Print "Long size:" & vbTab & vbTab & VarPtr(arrLong(2)) - VarPtr(arrLong(1)) & vbTab & vbTab & "Typename: " & TypeName(arrLong(2))
End Sub
これは以下を出力します:
Integer size: 2 Typename: Integer
Long size: 4 Typename: Long
サイズが実際には異なることに気付くでしょう (それぞれが増加するバイト数で測定され、それぞれ 2 と 4)。
この自動変換には、Excel と Access の両方からの同じ出力と同じ動作が存在します (32 ビット Windows 7 で Access/Excel 2010 を使用しています)。これが古いバージョンで何を出力するのか、非常に興味があります。