VBA

【VBAで配列を使う:入門編②】

前回の記事はこちらから
【VBAで配列をあつかう:入門編】

配列の宣言・代入・簡単な値の使用方法まで説明しています。
VBA初心者の方はこちらからどうぞ☆

VBAで配列を使う:入門編②

今回は、前回の記事でお話した通り、実際にワークシートのデータを配列を使用して操作していこうと思います。

前回の記事と重複する部分も出てきますが、大切な説明が多いので何度も読んで記憶を定着させてください。

配列の値をワークシートへ書き込む

とりあえず、配列を作成します。
もっと簡単な方法もあるのですが、前回の記事の内容だけでできるので下記のコードの様に、Forループで、連番を入れて配列を作成します。

Option Explicit

Sub sample()
    Dim ary(10) As Integer ' 数値を10こ入れる配列
    Dim i As Long
    
    'ループ処理で配列に連番を入れる
    For i = 0 To 9
        ary(i) = i
        'Debug.Print ary(i) 'イミディエイトウインドウでary(i)の値を確認
    Next
End Sub

簡単ですね!
今回はとりあえず、初心者向けの方の記事なので、固定長配列を使用してわかりやすく説明します。

Dim ary(10) As Integer ‘ 数値を10こ入れる配列

で10個の数値が扱える配列を宣言しています。
その後Forループで値を代入しているだけです。

さあ、配列の準備ができたのでワークシートへ書き込んで行きたいと思います。

配列をワークシートへ書き込む

‘Debug.Print ary(i) ‘イミディエイトウインドウでary(i)の値を確認

で配列の値を順に使用しているので、感の良い方はシートへの展開方法も想像ついているかも知れませんが、コードを示します。

Option Explicit

Sub sample()
    Dim ary(10) As String '  文字列を10こ入れる配列
    Dim i As Long
    
    'ループ処理で配列に連番を入れる
    For i = 0 To 9
        ary(i) = " 配列aryのi番目の値 =  " & i
        'Debug.Print ary(i) 'イミディエイトウインドウでary(i)の値を確認
    Next
    
    ' 配列の内容をループでシートへ書き込む
    For i = 0 To 9
        ActiveSheet.Cells(i + 1, 1).Value = ary(i) ' 行は1行目から始まるので、i +1 をして書き込み行を+1した場所へ書き込む
    Next
End Sub

わかりやすい様にループで要素を一つずつセルへ書き込んでいます。

実際に要素を書き込んでいる部分は

ActiveSheet.Cells(i + 1, 1).Value = ary(i) ‘ 行は1行目から始まるので、i +1 をして書き込み行を+1した場所へ書き込む

になります。
コメントへも記載してありますが、セルは1行目から始まり、配列は0から始まるので、行を指定する部分を+1して合わせています。

いかがですか?
配列の操作は簡単ですよね?

セル範囲を一括で配列へ代入

ここまでの説明では、一つずつ要素へ代入してきましたが、エクセルVBAでは配列へ代入する方法で、とても便利な機能があります。

セル範囲をVariant型変数に入れる事で、配列を作成することができます。
また、配列をセル範囲にまとめて出力する事も出来ます。

これは、マクロVBAを高速処理したい時の必須テクニックになります。

言葉だけだとわかりにくいと思いますので実例を紹介します。

 123456789
1         
2         
3         
4         
5         
6         
7         
8         
9         

上記の様なセル範囲を配列へ代入し処理後の配列を貼り直すのは下記のコードだけでできます。

Dim ary AS Variant
ary = Range(“A1:J10”)
・・・処理・・・
Range(“A1:J10”) = ary

セル範囲とやり取りする配列は、必ず2次元の配列になっている必要があります。
2次元配列として定義するか、Variant型への代入の結果が2次元配列になっていればよいです。

この方法で作成した配列のインデックスは、0ではなく、1から始まります。

上の部分だけではわかりませんよね?
ちょっと使ってみたいと思います。

配列で九九表を作ってみる

まずエクセルを立ち上げて上記の様な表を作成してください。
VBEを開いて、書きコードをコピペしてください。

Sub sample()
    Dim ary As Variant
    ary = Range("A1:J10") 'セル範囲を配列へ代入
    
    Dim i As Long
    Dim j As Long
    
    For i = 1 To 9
        For j = 1 To 9
            ary(i + 1, j + 1) = i * j
        Next
    Next
    Range("A1:J10") = ary 'ループで作成した九九表をセル範囲へ戻す
End Sub

いかがでしょうか?
実際に動かしてもらうと一瞬で九九表が出来上がりますよね?

ポイント

  • バリアント型の変数を使用
  • セル範囲を代入したときの要素は1から始まる。
  • セル範囲を指定し、セル範囲へバリアント型の変数を代入する。

まとめ

この様に、配列を使うとセル範囲へのアクセスが極力ない状態で処理を行い、一気にセル範囲へ展開することが可能です。

ここまでで基本は終わりです。
配列に関しては、要素を増やして行ったり、色々覚えることはありますが、次回の記事で、解説していきます。

配列を高度に使用する方法や、マクロを超高速化するための配列の使用方法を今後どんどん書いていきますので、基本をしっかりマスターしてください。