[ VBA ]「Option Base 1」使うなよな!反論は聞かない!

Pocket

VBA で Option Base 1 なる記述ができますが、なぜこれを使おうと思うのか理解に苦しみます。なお、反論は聞きません。が、どうしても何か言いたいことがあればコメントどーぞ。

スポンサーリンク

Option Base 1 とは

VBA では、配列のインデックスは、デフォルトでは 0 始まりです。しかし、Option Base 1 なる記述を書けば、配列のインデックスは 1 始まりとすることができます。

おそらく、エクセルのセルなどを扱う場合に、行や列を1始まりとして実装しているものもあります。おそらくは、その実装に合わせて、配列のインデックスも1始まりとした方が分かりやすいと考える人もいるだろうとの考えから、本オプションがあるのだと勝手に想像します。

ただし、そうであろうがなかろうが関係ありません。どうでも良いことです。

Option Base 1 のサンプルスクリプト

次のように、Option Base 1 を記述している状態で配列を定義した場合には、配列インデックスは1始まりとなるので、0をインデックスに指定すると実行時エラーとなります。コンパイルエラーにはなりません。

Option Explicit
Option Base 1

Private Sub Workbook_Open()
    ' 配列を宣言
    Dim arrays(5) As String
    
    arrays(0) = 1 ' 実行時エラー
    arrays(1) = 1 ' OK

End Sub

さらに困ったことに Option Base 1 を指定していても、Split関数は0始まりの配列を返します。そうです、Option Base は Split関数には影響を与えません。

仮に影響を与えることができる記述があったとしても、余計にそのような「書ける、書けない」「できる、できない」で判断してはいけません。きっと、アホ認定されることでしょう。アホなのですから仕方ありませんが。

Option Explicit
Option Base 1

Private Sub Workbook_Open()

    Dim vars As Variant
    ' csv形式の文字列をカンマで区切る    
    vars = Split("a,b,c", ",")

    Debug.Print vars(0) ' a
    Debug.Print vars(1) ' b
    Debug.Print vars(2) ' c

End Sub

小規模のスクリプトであれば、まだ大丈夫かもしれませんが、稀だと思います。あっという間にカオスな世界が誕生します。

なぜ、わざわざ混乱を招くようなオプションを追加する必要があるのか理解に苦しみます。お互い様ですが、あなたとわたしの常識は違います。どちらにも言えることは理解できます。

しかし、プログラムを作る人の意見としては「デフォルトでOK!余計なことはするな!」だと思います。

違いますか?まあ、反論は聞きませんけど。

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *