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

vbahairetu2eyecatch

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

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

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

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

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

Array・LBound・RBound関数と各ステートメント

vbahairetup2007

先の記事で1次元配列変数について紹介しました。

vbahairetueyecatch 1次元配列とは。静的配列と動的配列 エクセルVBA

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

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

関数については

キーワードについては

などになります。

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

参考記事

  • 二次元配列についての記事はこちらになります。
vbahairetu3eyecatch 2次元動的配列の実務での利用法 エクセルVBA
  • 一次元配列についての記事はこちらになります。
vbahairetueyecatch 1次元配列とは。静的配列と動的配列 エクセルVBA

Array関数

配列をバリアント型変数に格納する時は、Array関数を使って行うことが出来ます。

Array関数

Arrayで変数を格納する場合はデータ型をVariantにします。

インデックス番号は0から始まります。

VBA
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関数
VBA
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の値はありません。

VBA
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

実行結果

vbahairetu2003

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

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

Eraseステートメント

Eraseステートメントは配列の値をクリアします。

Eraseステートメント

Eraseステートメントの働きを見るために、D列とE列に値を表示させます。

VBA
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ステートメントは「動的配列」では、必ず必要な、配列の再宣言のためのステートメントです。

例題は、先の記事で確認をしてください.。

vbahairetueyecatch 1次元配列とは。静的配列と動的配列 エクセルVBA

Toキーワード

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

Toキーワード

Toキーワードを利用することによって、インデックス番号の開始番号を変更することが出来ます。

VBA
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列に表示するようにコードを組み立てました。

VBA
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

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

vbahairetup2008

こういった関数とステートメントで、配列をより使いやすく、コード作成を簡便に行うことができます。

その他、関数・ステートメントなどありますが、比較的利用頻度の多いものを説明してきました。

その場その場で、それぞれに研究いただければと思います。

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

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

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

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

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

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min