列挙体にはメンバを何個列挙できるか
列挙体はいくつまで列挙できるか
列挙体のメンバ数の最大って、いくつなのだろうか。
ちょっと調べてみた。
Integer型の最大値
Integer型の最大値は32767。へえ。意外と小さいな。
標準モジュールの宣言セクションに次のように書いてみる。
Public Enum MaxSize maxElement = 32767 End Enum
んで、イミディエイトに
Debug.Print maxsize.maxElement
と打ち込んで[Enter]。
とりあえずクリア。
少なくとも3万2千768+1個までは列挙できるみたい。
Integer型の限界を超える
次に、Integer型の限界を超えられるかどうかテスト。
Public Enum MaxSize maxElement = 32767 nextElement End Enum
32767の次はあるのか。イミディエイトに次のように打ち込む。
Debug.Print maxsize.nextElement
んで、[Enter]。
フツーに「32768」が返った。
Long型の最大値
次はLong型でやってみる。
Public Enum MaxSize maxElement = 32767 nextElement realMaxElement = 2147483647 End Enum
イミディエイトには次のように打ち込む。
Debug.Print maxsize.realMaxElement
んで、[Enter]!
ふええ! 「2147483647」が返ったよ……。
ということは、21億個以上列挙できるのか!
次はどうなるんだろう。
Long型の限界を超える
お次は、
Public Enum MaxSize maxElement = 32767 nextElement realMaxElement = 2147483647 nextRealMaxElement End Enum
これまで同様、イミディエイトに
Debug.Print maxsize.nextRealMaxElement
と打ち込んで[Enter]。
ファッ!?
ま、ー2147483648???
ループして負の数の最小値に飛んで行ったのか!
……ということは……、
「21億個以上」どころか、43億個近く列挙できる
ということじゃないか!
えらいこっちゃなあ……。
ちなみに、
Public Enum MaxSize maxElement = 32767 nextElement realMaxElement = 2147483647 nextRealMaxElement nextNextRealMaxElement End Enum
こうしておいて、イミディエイトに
Debug.Print maxsize.nextNextRealMaxElement
と打ち込んで[Enter]すると、
やっぱり、正の数の最大値まで行くと、負の数の最小値にループしてインクリメントしていく模様。
Long型の限界を超えるとどうなるか
そこで、
Public Enum MaxSize maxElement = 32767 nextElement realMaxElement = 2147483647 nextRealMaxElement nextNextRealMaxElement overFlowElement = 2147483648# End Enum
としてみる。
「2147483648」と打ち込んで[Enter]を押したら、勝手に右端に「#」がついた。
イミディエイトに
Debug.Print maxsize.overFlowElement
と打ち込んで[Enter]。すると、
エラーになった。
おわりに
というわけで、列挙体のメンバ数の最大値は、(たぶん)
4294967296個
です。