配列のArray・LBound・RBound関数と各ステートメントを最速に理解

vbahairetu2eyecatch

エクセルVBA 配列を扱うときに利用できる関数とステートメントを説明していきます。

便利機能が多くありますので、配列を使う時の知識の引き出しとして覚えておくと良いかと思います。

 

エクセルVBAで配列を利用する時、それに関わる関数やステートメントを利用すれば、

より簡潔にコードを作成することが出来ます。

こんにちは、じゅんぱ店長(@junpa33)です。

 

Array・LBound・RBound関数と
各ステートメントを最速に理解

 

先の記事、エクセルVBA 1次元配列変数の利用法を最速に理解で1次元配列変数について紹介しましたが、

配列には関連するいくつかの関数とステートメントやキーワードがあります。

それらを使えば、コード作成でより簡単にやりたいことを行うことが出来ます。

関数については

キーワードについては

などになります。

簡単にサクッと説明をしていきたいと思います。

 

二次元配列についての記事はこちらになります。
エクセルVBA 2次元動的配列変数を実例的利用法で最速に理解一次元配列についての記事はこちらになります。
エクセルVBA 1次元配列変数の利用法を最速に理解

 

Array関数

 

配列をバリアント型変数に格納する時は、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

実行結果

vbahairetu2001

 

 

LBound関数とUBound関数

 

配列のインデックス番号を調べる関数です。

この2つはセットで使うことが多いです。

  • LBound関数は、インデックス番号の最小値
  • UBound関数は、インデックス番号の最大値

を表示します。

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

実行結果

vbahairetu2002

 

 

Option Baseステートメント

 

配列のインデックス番号のスタートを指定します。

デフォルトではインデックス番号は「0」から始まりますが、このステートメントを使えば、「1」から始めることが出来ます。

ただし、モジュール内の宣言セクションに記述しますので、モジュール全体に影響が及びます。

Option Baseステートメント

インデックス番号0は割り当てられていないので、セルC1の値はありません。

コード
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

実行結果

vbahairetu2003

インデックス番号「0」(vege(0))もコードを残しているので、本来ならこの部分でエラーが発生します。

エラーを無視するコード「On Error Resume Next」を記述してコードの停止を回避しています。

 

 

Eraseステートメント

 

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ステートメントによってクリアされました。

vbahairetu2004

 

 

ReDimステートメント

 

ReDimステートメントは「動的配列」では、必ず必要な、配列の再宣言のためのステートメントです。

例題は、先のエクセルVBA 1次元配列変数の利用法を最速に理解の記事で確認をしてください.。

 

Toキーワード

 

配列変数を宣言する時に、インデックス番号を「(始まり)TO(終わり)」という風に表記する時に使います。

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キーワードを使えば、このようにこの部分にだけ作用しますので、

特にこちらを利用するようにした方がいいかと思います。

vbahairetu2005

 

 

Preserveキーワード

 

一旦配列変数に格納したデータに、さらに追加で別データを、その配列変数に格納する時に使うキーワードです。

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列に表示されました。

vbahairetu2006

 

 

配列に関わる関数とステートメントのまとめ

 

解説してきましたこの様なオプションで、配列変数をより使いやすく、コード作成を簡便に行って行ければと思います。

その他にも、使えそうな関数などがあると思いますが、メインどころでこの辺りかと思います。

皆さんそれぞれに研究いただければと思います。

 

配列の基本を押さえておけば、後は徐々に追加の知識を増やして行けると思います。

 

短期間でエクセルVBAの独学習得を目指したいなら

 

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

 

このサイトでよく使うVBAのコードのトピックを纏めています。

「VBA最速理解」の記事一覧を開く

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。