VBAの配列を覚えれば...
- 3秒でシートをまとめて印刷できたり
- VBAの処理速度を通常の3倍に上げられたり
- VBAコードが短くなって単純な処理でコードが書けたり
色んなことができるようになる。さて、さっそくVBA配列について話していきます。
VBA配列の基本的な書きかた【宣言のしかた】
- VBA静的配列の書きかた
- VBA動的配列の書きかた
VBAの配列には基本的にこの2種類を使うことですね。
下記で書きかたを順に解説していきます。
1. VBA静的配列の書きかた
VBAで静的配列を書くときは下記の感じ。
Dim Persons(10) As Variant
Dimで宣言して名前に()をつけて必要な配列数をいれよう。
上記のコードだと『0~10』までの配列ができる。
でも『0~10』だと11個配列があるから計算ちょっとめんどくさいよね。
最初の配列範囲を変えたいとき(たとえば1~10)は下記のようにすればOK。
Dim Persons(1 To 10) As Variant
VBA動的配列の書きかた
動的配列は次のような書きかた。
Dim Persons() As Variant ReDim Persons(10)
- Dimで一旦宣言したあと
- ReDim』というので宣言し直してる
上記コードだと11個の配列がつくれる。
だけど、宣言したあとでも次のようにすることも可能。
ReDim Persons(20)
そうすると今度は21個の配列に変更できるってわけ。
VBA配列が作れてるか確認する方法
まずは次のコードを書いてみよう。
Sub ArrayCheck() Dim Persons(10) As Variant End Sub
コードが書けたら
- エディタ右上の「表示」選択
- 「ローカルウィンドウ」でローカルウィンドウを出してみよう
上記のSub内で「F8キー」を押せば次の画像みたいに配列が表示されるはず。
VBAで配列処理をする【2パターンでOK】
さて、ここからは動的配列でやっていこう。
配列処理をするときは基本2パターンでOK。
- Arrayを使って配列にする
- Splitを使って配列にする
ちなみに、下記のように直接配列の場所を指定する方法もある。
Persons(2) = "鈴木"
そしたら配列処理の2パターンを話していこうか。
配列処理パターン1. Arrayを使って配列にする
Sub testArray() Dim Persons() As Variant Persons = Array("江崎", "鈴木", "齋藤", "中村", "伊藤", "黒木") Dim i As Long For i = LBound(Persons) To UBound(Persons) Cells(1 + i, 1) = Persons(i) Next i End Sub
Arrayを使うときは基本的に『,』で区切って文字か数字を入れればOK。
LBound() | 配列の開始がどこの数値(インデックス)か調べる |
UBound() | 配列の最後がどこの数値(インデックス)か調べる |
配列処理パターン2. Splitを使って配列にする
Sub testSplit() Dim Persons() As String Persons = Split("江崎,鈴木,齋藤,中村,伊藤,黒木", ",") Dim i As Long For i = LBound(Persons) To UBound(Persons) Cells(1 + i, 1) = Persons(i) Next i End Sub
Split(データ, データの区切り位置)って感じで書けばOK。
データのところは『""』でひとくくり囲むこと、下記みたいに。
Numbers = Split("5,6,8,9,11,54,88", ",")
ちなみに、SplitはString型でもLong型でも使える。
実用的なのはArrayよりSplitだね。
配列処理ができるようになって中級者になろう
基本Splitを使っていこう。
VBAで配列処理ができればコーディングの幅もかなり上がる。
応用すれば処理が早いコードが書けるようになるよ。
使いこなして中級者になろう。
・もっとVBA学びたい人向け記事↓