Byte 型ってメモリの節約になる?

ヘルプを見るまでもなく、

 通貨型  (Currency) … 8 バイト
 長整数型 (Long)   … 4 バイト
 整数型  (Integer)  … 2 バイト
 バイト型 (Byte)   … 1 バイト

ってのは、VBA をやる人なら頭の中に入っていることかと思います。
 
ということは、メモリをケチケチ使いたいなら、バイト型を使えばいいような気がしますが本当でしょうか?
 
実験してみました。
今回のビックリドッキリメカ・・・じゃなくて、コードはコレです。

Sub Test_Currency()
  Dim wk1 As Currency, wk2 As Currency, wk3 As Currency

  Debug.Print "## Currency ##"
  Debug.Print Hex(VarPtr(wk1))
  Debug.Print Hex(VarPtr(wk2))
  Debug.Print Hex(VarPtr(wk3))
End Sub

Sub Test_Long()
  Dim wk1 As Long, wk2 As Long, wk3 As Long

  Debug.Print "## Long ##"
  Debug.Print Hex(VarPtr(wk1))
  Debug.Print Hex(VarPtr(wk2))
  Debug.Print Hex(VarPtr(wk3))
End Sub

Sub Test_Integer()
  Dim wk1 As Integer, wk2 As Integer, wk3 As Integer

  Debug.Print "## Integer ##"
  Debug.Print Hex(VarPtr(wk1))
  Debug.Print Hex(VarPtr(wk2))
  Debug.Print Hex(VarPtr(wk3))
End Sub

Sub Test_Byte()
  Dim wk1 As Byte, wk2 As Byte, wk3 As Byte

  Debug.Print "## Byte ##"
  Debug.Print Hex(VarPtr(wk1))
  Debug.Print Hex(VarPtr(wk2))
  Debug.Print Hex(VarPtr(wk3))
End Sub

 
順番に実行してみると、、、

## Currency ##
13F6E4
13F6DC
13F6D4
## Long ##
13F6E8
13F6E4
13F6E0
## Integer ##
13F6EA
13F6E8
13F6E6
## Byte ##
13F6EA
13F6E8
13F6E6

Currency,Long,Integer は冒頭に書いたとおりのメモリが使われていますが、Byte はInteger と同じで 2 バイト使われています。
正確にいうと、1 バイト余分に割り当てられているんですね。
 
つまり、単に小さい数を使いたくて、メモリを節約したいってだけの理由なら Byte 型を使う意味はないってことです。
ま、もともとByte 型ってのは、そういう用途のための型でもないですからね。
 
本来の用途で使うときは、配列で利用することが多いと思います。
ついでに、これも確かめておきましょう。

Sub Test_ByteArray()
  Dim wk(1 To 3) As Byte

  Debug.Print "## ByteArray ##"
  Debug.Print Hex(VarPtr(wk(1)))
  Debug.Print Hex(VarPtr(wk(2)))
  Debug.Print Hex(VarPtr(wk(3)))
End Sub

実行すると、、、

## ByteArray ##
242E90
242E91
242E92

当然ですが、今度はぎゅうぎゅうに割り当てられています。
 
※.Excel World の 2007年3月12日 01:38 の日記をコピーしています。
http://excel.sns.fc2.com/excel/