Tips

ExcelVBAを1から学ぶ! #7 ~配列とは?~
2017.05.08

ExcelVBAを1から学ぶ! #7 ~配列とは?~

はじめに

前回のおさらいと今回やること

前回は、変数のスコープに関して説明しました。
今回は、配列に関して学習していきましょう。

配列とは?

配列の概要

前回まで学習した変数は、変数と値が一対一、要するにひとつの変数にはひとつの値しか格納できませんでした。しかし、複数の値をひとつの変数として使用できた方がより効率的かつシンプルなコード記述ができる場面もあります。そこで登場するのが「配列」です。配列は、複数の値を一つの変数内に保持することが可能です。その際、保持している値のことを「要素」、要素を識別するための番号を「インデックス番号」と言います。

配列宣言の方法

配列宣言の書式は以下の通りです。


Dim <配列変数名> (要素の下限 To 要素の上限)

このように、基本的に宣言の段階でいくつの要素を持つのか決定します。例えば、4つの要素をもつ配列”sample”を宣言する場合、


Dim sample (0 To 3)

のような記述方法となります。また、今回は要素の下限を0として宣言しましたが、要素の下限は省略すると0とみなされますので、


Dim sample (3)

これでも同義となります。

配列への値の格納方法

上記の配列変数”sample”に、複数の値を格納してみたいと思います。例として、下図シートのA1~A4セルの値を格納するよう記述してみます。


' ①繰り返し処理を用いない場合
Sub testcode1()

    Dim sample(3)
    
    sample(0) = Range("A1").Value
    sample(1) = Range("A2").Value
    sample(2) = Range("A3").Value
    sample(3) = Range("A4").Value
End Sub

' ②繰り返し処理を用いた場合
Sub testcode2()

    Dim sample(3)
    Dim setDomain As Range
    Dim el As Range
    Dim cnt As Long
    
    Set setDomain = Range("A1:A4")
    cnt = 0
    
    For Each el In setDomain
    
        sample(cnt) = el.Value

        cnt = cnt + 1
    Next
End Sub


<配列変数名>(インデックス番号) = 値

という記述で各要素を格納することができます。

配列へ値が格納されたか確認する

上記の方法で配列変数を初期化できますが、実際に要素が格納されているかを確認してみましょう。
配列の要素を確認するには、ローカルウィンドウが便利です。

手順1.VBEメニューの[表示]から[ローカルウィンドウ]を選択。

手順2.任意の場所にブレークポイントを置く。

手順3.F8キーでステップ実行しながら各要素を確認する。

配列のデバッグ方法は是非覚えておいてください。

動的配列

さて、ここまで見てきた配列ですが、配列宣言時に要素数を確定させる必要がありました。しかしながら、配列宣言時には要素の数が分からない場合もあるかと思います。例えば、

このような連絡先リストの列を配列の要素として格納したい場合などです。データ数は変動する可能性が高いので、プログラミング時に固定で配列の要素数を決めることができません。そこで、動的配列を使用します。動的配列は、宣言時に要素の数を決定せず、マクロの処理の中で要素数の指定を行うことが可能です。

動的配列の宣言と要素数の決定

動的配列の宣言方法は、


Dim <配列変数名> ()

のように、変数名の後ろに中身の記述がない丸括弧を記述します。これで宣言が行えます。ただし、要素を格納する際にはあらかじめ要素数を決定していないと実行時エラーとなってしまいます。要素数の決定方法は、


ReDim <配列変数名> (要素の下限 To 要素の上限)

のように、”ReDim”というキーワードを用います。先ほどの例で言えば、各要素を格納する前にリスト数をカウントして、それを要素数として設定すればよいということになります。
また、動的配列ではない宣言時に要素数を指定した配列に関しては、ReDimで要素数を変更することはできません。

動的配列の注意点

上述の通り、ReDimで動的配列の要素数を決定することができるのですが、ひとつ注意点があります。それは、ReDimを使用するとそれまで格納されていた要素はすべて削除されるということです。

図.7-3 Redimを使用すると、それまで保持されていた値は削除される

今まで保持していた要素をそのままに、動的配列の要素数を変更したい場合、“Preserve”というキーワードを使用します。


ReDim Preserve <配列変数名> (要素の下限 To 要素の上限)

図.7-4 Preserveキーワードを使用すると、それまで保持されていた要素はそのままに、要素数を変更することが可能

まとめ

今回は、配列の概要と動的配列に関してのまとめでした。要素数をどのタイミングで決定するのか、というのが配列のキーポイントとなります。動的配列に関しては、特にReDimを使用する際の注意点についてしっかりと覚えておく必要があります。

次回も配列関連のお話です。それではまた。

excel_VBAを学んで業務効率化!

excel-vba入門 連載

Recent News

Recent Tips

Tag Search