間抜けなことに、今まで忍者カウンタを使っている=解析ツールを使っていると勘違いしていた。
他のブログを見て、「やはり自分の設定はおかしいのでは?」と気づいて設定し直した次第である。

とはいえ、別にどこからアクセスがあったかは公開しない(NinjaToolではブログ訪問者にも公開できるらしいのだが、とりあえず止めておく。)つもりである。

なかのひとはそれでおもしろいのだが、Ninjaにはまた違ったおもしろさがある。
配列の再定義に ReDim と ReDim Preserve がある。

○配列の定義
例えば

Dim sVal(5) As String

こう定義されていれば、配列の要素が(Option Baseの指定にもよるけれど、標準では)、0 から 5 の 6 つ使える状態になる。
この配列を処理中に「要素を 11 にしたい」と思っても

ReDim sVal(10)

などと書いても駄目である。つまり、再定義ができない。はじめに固定値で配列を確保しているからだ。


○配列の再定義
配列を再定義できる、つまりReDimが使えるのはあくまでも

Dim sVal() As String

というように、要素数を未定義にしている場合に限るのだ。

これを処理の途中で
ReDim sVal(10)
ReDim sVal(8)
とか、要素数を何度も再定義することができる

○再定義の種類
ReDim は、それまでに確保していた内容をクリアしてしまう。しかし、ReDim Preserve は1度確保した内容を保持したまま(減らした場合で、確保されなくなったところは別ですよ)要素数を変更できる

データを読み込み、必要に応じて配列を増やしていく、といった場合は ReDim Preserve でなければならない。じゃあ、ReDim って何のためにあるのか?と言われると、私自身は ReDim Preserve ばかり使用するので「こういう使い方をするといいよ」とは、回答できないでいる。

Integer と Long 、通常はどちらを使われるだろうか?

Integer は 2バイト、つまり 2 の 16 乗通りの数字が表現できる。65536通り。これは、Excel 97~2003までの最大行数と一致する。
だからといって、VBA内で「Excelの行数はIntegerで管理すればいい」とはならない。65536通りだが、Integerはマイナスの値も取る。マイナスもプラスも32768通り。ゼロはプラス側扱いで、-32768~+32767の値を管理できる、ということになる。つまり、行数管理はIntegerでは不足するということになる。
中には Integer を使わない、というように内部規約にしているところもあるらしい。

Long は 4バイト、つまり 2 の 32乗通りの数字が表現できる。2バイトが4バイトだから、扱える数字が65536の倍か、というとそうではない。よく使う10進数なら、桁が1つ増えると扱える数字が何倍になるだろうか?例えば、2桁だと00~99の100通りだが、3桁だと000~999の1000通り。つまり、10進数で1桁増えると扱える数字が10倍に増えるのである。n進数なら、1桁増えると扱える数字がn倍になる。つまり、LongはIntegerより2の16乗ものパターン、4294967296
通り、つまり、Integerの65536倍の数字パターンを表現できる。

金銭管理でも、一般家庭ならLongまでで充分だろう。