VBA(Visual Basic for Applications)で配列を作成する際に利用するArray関数は、「VBA.Array」のような書き方をするとOption Baseの影響を受け受けずに作られた配列のインデックス・添字が「0」になることを記事にしました。
こうなるとArrayとVBA.Arrayの違いが気になってきますが、私は、現在のVBAにはArray関数が2つあるのだろうと推測しています。
オブジェクトブラウザーに表示されないArray関数と、
オブジェクトブラウザーに表示されるVBA.Array関数です。
VBA関数のほとんどはオブジェクトブラウザーで確認できる
そもそも、ほとんどのVBA関数は、基本的にはオブジェクトブラウザーに表示されます。
オブジェクトブラウザーのライブラリボックスで[VBA]を選択すると確認しやすくなる、
名前に「Constants」を含まない、以下のいずれかのモジュールに含まれている、FunctionプロシージャかPropertyプロシージャがVBA関数の正体です。
- Conversion
- DateTime
- FileSystem
- Financial
- Information
- Interaction
- Math
- Strings
なおかつVBA関数は、VBAライブラリのグローバルメンバーになっているので、
「ライブラリ名.モジュール名.関数名」
のように書く必要がなく、いきなり関数名から記述することができます。
VBA.Array関数はオブジェクトブラウザーで非表示になっている
なお、ここで注目しているVBA.Array関数は、通常オブジェクトブラウザーで非表示になっています。
VBA.Array関数をオブジェクトブラウザーで表示させたい場合は、オブジェクトブラウザー内で右クリックして表示されるショートカットメニューから[非表示のメンバーを表示]をOnにしてください。
LBound関数とUBound関数はオブジェクトブラウザーに表示されない
上記のとおり、VBA関数はオブジェクトブラウザーで基本的には確認できるのですが、実はどう探してもみつからない関数も、何故か存在しています。
配列のインデックス・添字の最小値・最大値を返す、LBound関数とUBound関数です。
この二つはオブジェクトブラウザーで非表示のメンバーを表示させても見つかりません。
検索をしても見つかりません。
何故こうなっているのかはわかりませんが、オブジェクトブラウザーに表示されない形で、VBAのLBound関数とUBound関数は実装されているのです。
このLBound関数・UBound関数の仲間のArray関数が、VBA.Array関数とは別に存在しているのだろうと、私は推測しています。
そして、多くの方が利用しているのは、VBA.Array関数ではなく、LBound関数・UBound関数の仲間のオブジェクトブラウザーに表示されないほうのArray関数なのだろうと考えています。
VBA自体もかつては進化していた
最近のVBAは、Office側のバージョンアップに合わせたオブジェクトモデルの追加・変更があるくらいで、VBAそのものは変化していません。
しかし以前はVBA自体も大きく進化していました。
既に私の手元にはそんな古い環境がないために、具体的に検証することはできませんが、Array関数が一つしかなかった時期があるはずです。(おそらくOffice 97かOffice 2000の頃に)
そのArray関数は、Option Baseの影響を受けなかったのではないかと思うのです。
現在一部のバージョンで残っている間違ったヘルプは、その当時のArray関数のものがそのまま残ってしまったのではないかと想像しています。
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAのArray関数は2つあるのではないかという話