Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAで配列のインデックス・添字の最小値を1にずらす

VBAで配列のインデックス・添字の最小値を1にずらす

対象:Excel2007, Excel2010, Excel2013

「vba 配列 1から インデックス ずらす」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

VBA(Visual Basic for Applications)では、
モジュールの宣言部分に
 Option Base 1
と書いたり、配列変数の宣言時に
 ReDim arr(1 to n)
のような書き方をすることで、配列の添え字・インデックスの最小値を「1」にすることができますが、Split関数を使った場合は、インデックスの最小値が必ず「0」になります。

[スポンサード リンク]

配列のインデックス・添え字の最小値を1にするサンプルマクロ

ですがExcel VBAの場合は、配列の添え字・インデックスの最小値は「1」のほうが扱いやすいことが多いので、「1」を最小値にしたいという要望が出てくるのは、とても納得できます。

ループを回しながら、配列の要素の値を一つずつ順番に入れ替えれば、もちろん最小値を「1」にすることができますが、実はループ処理をしなくてもできてしまいます。


Sub 配列の添え字の始まりを0から1にする()

 Dim arr As Variant

 arr = Split("い;ろ;は", ";")
 Stop

 ReDim Preserve arr(1 To UBound(arr) + 1)
 Stop

End Sub

ショートカットキー[F5]などで上記の実行した場合でも、Stop文の箇所でステップ実行モードになりますから、メニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示させて、配列の各要素の様子をご確認ください。

一つ目のStop文の箇所では配列変数・arrは「0」から始まっていますが、

VBAで配列のインデックス・添字の最小値を1にずらす

二つ目のStop文の箇所では「1」始まりに変更されているはずです。

VBAで配列のインデックス・添字の最小値を1にずらす

サンプルマクロの解説

添え字・インデックスの最小値を「0」から「1」にずらしているのは、
 ReDim Preserve arr(1 To UBound(arr) + 1)
の部分です。

Preserveキーワードを使ってReDimすることで、格納されているデータを保持したまま、配列のサイズを変更していますが、ここで最小値を「1」と指定することで、「0」から「1」へずらすことができてしまうのです。

最大のポイントは、
 Dim arr As Variant
のように、配列にする変数をVariantで宣言することです。

ここを、
 Dim arr() As String
のようにVariant以外の型で宣言するとヘルプの、
「キーワード Preserve を使用した場合、動的配列のサイズを変更するために変えられるのは、添字の上限だけです。添字の下限を変更しようとすると、エラーが発生します。」
という記述通りの動作となり、
 ReDim Preserve arr(1 To UBound(arr) + 1)
の行で「インデックスが有効範囲にありません。」エラーが発生します。

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAで配列のインデックス・添字の最小値を1にずらす

[スポンサード リンク]
[スポンサード リンク]

TrackBack:0

TrackBack URL

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAで配列のインデックス・添字の最小値を1にずらす

「配列」の記事一覧

検索

最近じっくりと読まれている記事

.