配列の最小要素数は0(ゼロ)がいい!?|エクセルVBA
デフォルトは0(ゼロ)です
エクセルのVBAで配列はスタメンです。
配列を使うときはハコの大きさを決める必要があります。
Sub サンプル1() Dim strSample() As String Redim strSample(3) End Sub
としたときに用意されるハコは
strSample(0) strSample(1) strSmaple(2) strSample(3)
の4つになります。
「strSample(3)」ってやったのにハコは4つ。
ややこしいですよね。
そもそもなぜ「0」から始まるのか?
、、、分かりません(汗)
ググってみると同じような疑問を持たれた方が数多くいて、いろいろと議論されているようではありますが、正直どれが正解なのかは分かりません。
何より、分かったところで「ふ〜ん」という感想以外期待できないくらいどうでもいいことなので詳しく調べていません(開き直り)。
このとき、この決め事をそのまま受け入れるのか、
やっぱり1から数えたい!って1から数えるようにするのか。
これは、ある種の分かれ道です。
1から数えるようにするためには
Sub サンプル2() Dim strSample() As String Redim strSample(1 to 3) End Sub
というように、ハコを用意するときに最小値を指定する方法のほか、
Option Base 1 Sub サンプル3() Dim strSample() As String Redim strSample(3) End Sub
というように、モジュールレベルで「1から」を強制する方法があります。
どちらにするのがいいのか?
好みの問題ですね(投げやり)
ただ、僕は0からやってます。
というのも、あくまでもデフォルトが0なので、1から始まるようにするためには、例のように明示的に書かなければならないのが面倒(ものぐさ)。
あと、配列が1から始まるつもりでコードを書いているのに
「あれ?何かヘンだぞ。出てくる結果がおかしいぞ?どこがおかしいの?」
って、さんざん探したら、配列が1から始まりますよー、っていう指示を書き忘れていた、なんてことがよく起こります(僕だけ?)
それに、VBAを書くにあたり、何かといろんなサイトを参照することが多いと思いますが、それらのサイトで「0から」を前提に書かれていることがほとんど。
だから、自分が”1から”でコード書いている場合、参照サイトの「0から」を「1から」に翻訳しながら書いていかなければならなくて、これがかなり大変というかややこしい。
とはいえ、「0から」でやったから、あるいは「1から」でやったから、の違いで深刻な問題に遭遇したことはないです。
結局は、好みの問題ということにはなってしまいます。
僕も「1から」でやっていた時期もありましたが、何かと不便を感じることが多かったです。
それはさっき言ったように、何かしら参考にしながら、それを脳内変換しながらコードを書いていくってことに労力が必要ですし、往々にして脳内変換ミスが発生してストレスとなっていたからだと思います。
なので、今は「0から」に決め打ちにしています。