ローカルウィンドウの使い方、配列のインデックス番号の最小値を1から始めるには

配列のインデックス番号の最小値を1から始めるには

データをFor文を使い配列として取得する
ローカルウィンドウとシートから配列を取得する

マクロ 88回

データをFor文を使い配列として取得する

シートの表からデータを配列として取得する場合に、配列の要素を1から始めるようにする方法を説明します。
またシートから配列が取り込まれる様子をローカルウィンドウから確認する方法も紹介しています。

データを配列として取得する

1. シート上のデータを通常のやり方でマクロに取り込む場合の コードを復習します。
配列は0から始まるので、brancharr(0)=”支店名”、brancharr(1)=”あわしま”というようにデータを入れていくわけです。


ローカルウィンドウとシートから配列を取得する1

2. 例えば1次元配列としてA1:A10 までの範囲を配列に入れてやるとします。その場合1個々入れる場合は、このようなコードです。
データ数は10だと目視でわかるのでこの場合は、配列の宣言はDim brancharr(9) As Variant


ローカルウィンドウとシートから配列を取得する2

3.ただ普通は、 1個ずつ入れるかわりに、FOR文でデータの数だけ繰り返して取り込みます。For文で回すために、変数rを追加してやります。

Sub oneDimension()
Dim brancharr(9) As Variant
Dim r As Long
    For r = 0 To 9
       brancharr(r) = Cells(r + 1, 1).Value
    Next r
End Sub

ローカルウィンドウとシートから配列を取得する3

配列を1からはじめるには

4. 配列が0から始まることに抵抗があったり、あとで使いづらい場合は、配列を1からはじめることができます。その方法は2つです。
1番目は、モジュールの宣言セクションにOption Base 1と記載します。


ローカルウィンドウとシートから配列を取得する4

5. 2番目は配列変数の宣言時に、Indexの指定でToキーワードを使います。
Dim brancharr(1 To 10) As Variant のように明示的に1から始まるとわかるように記載します。


ローカルウィンドウとシートから配列を取得する5

6. Option Base 1を使うか、配列変数の宣言時にToキーワードを使うかの、どちらかの方法で、配列を1からはじめることができます。


ローカルウィンドウとシートから配列を取得する6

7.例外として、Split関数をつかって配列を作成した場合は、 Option Base 1の影響はうけず、必ず0から始まります。


ローカルウィンドウとシートから配列を取得する7

配列の要素数を求める LBound UBound

8. 配列のインデックス番号の最小値、最大値を返すLBound関数、UBound関数を使うことで、インデックス(要素番号)の最小値と最大値を取得することができます。
たとえば、先ほどの1次元配列を取り込むプロシージャも、For文で、For r = 0 To 9としてる部分をLBound関数、UBound関数を使用して変更すると次のように書き換えることができます。

Sub oneDimension()
Dim brancharr(9) As Variant
Dim r As Long
    For r = LBound(brancharr) To UBound(brancharr)
        brancharr(r) = Cells(r + 1, 1).Value
    Next r
End Sub

ローカルウィンドウとシートから配列を取得する8

ローカルウィンドウで配列を確認する

9. ローカルウィンドウはメニューの表示から、
AltVSでローカルウィンドウを表示させ、配列を取得する様子を確認します。


ローカルウィンドウとシートから配列を取得する9

10. End Subの頭にブレークポイントをつけます。プロシージャが終わってしまうと見れないので、ブレークポイントが必要です。
ステップ実行していくと、配列にデータが入っていくのを目視で確認できます。


ローカルウィンドウとシートから配列を取得する10

11. 図のように変数が変わるたびに、配列のデータが取り込まれる様子を確認できました。


ローカルウィンドウとシートから配列を取得する11

配列のインデックス番号の最大値が不明の時取り込む行数(データ数)も自動で取得する場合のコード

12. 配列のインデックス番号の最大値が目視でわかる場合はいいですが、最大値が不明の時はどうすればいいのかと思う場合があるかもしれません。
最大値は、行数からわかるので、取り込む行数(データ数)もエクセルに数えさせればいいのです。
行数を自動で取得すると、配列の最大値も自動的に決まります。
変数maxubを追加して、一番下のセルまで数えます。

Sub oneDimension_ubcount()
Dim brancharr() As Variant
Dim r As Long, maxub As Long
    maxub = Range("A1", Range("A1").End(xlDown)).Cells.Count
    ReDim brancharr(1 To maxub)
    For r = 1 To maxub
        brancharr(r) = Cells(r, 1).Value
    Next r
End Sub

ローカルウィンドウとシートから配列を取得する12