配列を扱うときに利用できる関数とステートメントを説明していきます。
便利機能が多くありますので、配列を使う時の知識の引き出しとして覚えておくと便利です。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルVBAで配列を利用する時、それに関わる関数やステートメントを利用すれば、
より簡潔にコードを作成することが出来ます。
コンテンツ
Array・LBound・RBound関数と各ステートメント
先の記事で1次元配列変数について紹介しました。
1次元配列とは。静的配列と動的配列 エクセルVBA配列には関連するいくつかの関数とステートメントやキーワードがあります。
それらを使えば、コード作成でより簡単にやりたいことを行うことが出来ます。
ステートメントについては
キーワードについては
などになります。
簡単にサクッと説明をしていきたいと思います。
Array関数
配列をバリアント型変数に格納する時は、Array関数を使って行うことが出来ます。
Arrayで変数を格納する場合はデータ型をVariantにします。
インデックス番号は0から始まります。
Sub Arrayテスト()
Dim vege As Variant
Worksheets("Sheet2").Select
vege = Array("きゅうり", "玉ねぎ", "ピーマン")
Range("A1").Value = vege(0)
Range("A2").Value = vege(1)
Range("A3").Value = vege(2)
End Sub
実行結果
LBound関数とUBound関数
配列のインデックス番号を調べる関数です。
この2つはセットで使うことが多いです。
- LBound関数は、インデックス番号の最小値
- UBound関数は、インデックス番号の最大値
を表示します。
Sub LUBoundテスト()
Dim vege(2) As Variant
Dim i As Long
Worksheets("Sheet2").Select
vege(0) = "きゅうり"
vege(1) = "玉ねぎ"
vege(2) = "ピーマン"
For i = LBound(vege) To UBound(vege)
Range("B" & i + 1).Value = vege(i)
Next i
End Sub
実行結果
Option Baseステートメント
配列のインデックス番号のスタートを指定します。
デフォルトではインデックス番号は「0」から始まりますが、このステートメントを使えば、「1」から始めることが出来ます。
ただし、モジュール内の宣言セクションに記述しますので、モジュール全体に影響が及びます。
インデックス番号0は割り当てられていないので、セルC1の値はありません。
Option Explicit
Option Base 1
Sub OpBaseテスト()
Dim vege As Variant
Worksheets("Sheet2").Select
vege = Array("きゅうり", "玉ねぎ", "ピーマン")
On Error Resume Next
Range("C1").Value = vege(0)
Range("C2").Value = vege(1)
Range("C3").Value = vege(2)
Range("C4").Value = vege(3)
End Sub
実行結果
インデックス番号「0」(vege(0))もコードを残しているので、本来ならこの部分でエラーが発生します。
エラーを無視するコード「On Error Resume Next」を記述してコードの停止を回避しています。
Eraseステートメント
Eraseステートメントは配列の値をクリアします。
Eraseステートメントの働きを見るために、D列とE列に値を表示させます。
Sub Eraseテスト()
Dim vege(2) As Variant
Dim i As Long
Worksheets("Sheet2").Select
vege(0) = "きゅうり"
vege(1) = "玉ねぎ"
vege(2) = "ピーマン"
For i = 0 To 2
Range("D" & i + 1).Value = vege(i)
Next i
Erase vege
For i = 0 To 2
Range("E" & i + 1).Value = vege(i)
Range("E4").Value = "配列の値はクリアされました"
Next i
End Sub
実行結果
赤枠に表示されるべき値がEraseステートメントによってクリアされました。
ReDimステートメント
ReDimステートメントは「動的配列」では、必ず必要な、配列の再宣言のためのステートメントです。
例題は、先の記事で確認をしてください.。
1次元配列とは。静的配列と動的配列 エクセルVBAToキーワード
配列変数を宣言する時に、インデックス番号を「(始まり)TO(終わり)」という風に表記する時に使います。
Toキーワードを利用することによって、インデックス番号の開始番号を変更することが出来ます。
Sub Toテスト()
Dim vege(1 To 3) As String
Dim i As Long
Worksheets("Sheet2").Select
vege(1) = "きゅうり"
vege(2) = "玉ねぎ"
vege(3) = "ピーマン"
For i = 1 To 3
Range("F" & i).Value = vege(i)
Next i
End Sub
実行結果
Option Baseステートメントでもインデックス番号を「1」から始めることが出来ますが、
そのモジュール内のすべての配列変数に影響を及ぼします。
このToキーワードを使えば、使いたい部分にだけ作用しますので、
特にこちらを利用するようにした方がいいかと思います。
Preserveキーワード
一旦配列変数に格納したデータに、さらに追加で別データを、その配列変数に格納する時に使うキーワードです。
元の格納データをA列に、追加で格納するデータをB列に表示するようにコードを組み立てました。
Sub Preserveテスト()
Dim vege() As String
Dim i As Long, j As Long
Worksheets("Sheet2").Select
ReDim vege(2)
vege(0) = "きゅうり"
vege(1) = "玉ねぎ"
vege(2) = "ピーマン"
For i = 0 To 2
Range("A" & i + 11).Value = vege(i)
Next i
ReDim Preserve vege(2 + 3)
vege(3) = "キャベツ"
vege(4) = "ニンジン"
vege(5) = "じゃがいも"
For j = 3 To 5
Range("B" & j + 11).Value = vege(j)
Next j
End Sub
実行結果
正常に配列に追加分が格納され、B列に表示されました。
配列に関わる関数とステートメントのまとめ
こういった関数とステートメントで、配列をより使いやすく、コード作成を簡便に行うことができます。
その他、関数・ステートメントなどありますが、比較的利用頻度の多いものを説明してきました。
その場その場で、それぞれに研究いただければと思います。
配列の基本を押さえておけば、後は徐々に追加の知識を増やして行けると思います。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。