VBA 静的配列の基本:宣言・初期化・活用法を徹底解説

静的配列について解説 VBA

VBAでデータを効率的に管理したいけれど、どうやって固定されたデータを扱えばいいんだろう…
そんな疑問を持っていませんか?

お悩みポイント
悩む人
  • 固定されたデータをまとめて管理する方法を知りたい
  • 配列の基本的な概念を理解したい
  • VBA初心者でも簡単に静的配列を使いこなしたい

この記事では、VBAにおける「静的配列」を使ってデータを効率的に管理する方法を詳しく解説します。

「静的配列」を使うことで、データの管理が容易になり、プログラムのパフォーマンスを最適化できます。

この記事では、静的配列の基本的な概念からその使い方、さらに初期化の方法まで詳しく解説します。

使用例もすべてコピペして実行できるので、ぜひ最後までご覧いただき、実践してみてください。

そもそも配列とは?という方は、そちらを解説した記事もありますので是非ご覧ください。


【 この記事の概要 】

  よく使う度    4.0  
  難しさ     3.5  
  覚えておくと安心度    4.0  

この記事でできるようになること

この記事を読むことで、以下のことができるようになります。

この記事を見てできるようになること

静的配列とはなにか?

VBAにおいて、静的配列とは、配列のサイズをあらかじめ固定して宣言する方法で、データが固定されている場面でよく使用されます。

静的配列の基本

静的配列とは、配列のサイズを事前に決めて固定する配列のことです。
これは、データの数が事前に確定している場合や、後でサイズを変更する必要がない場合に特に有効です。

静的配列のイメージ

例えば、1週間分の売上データや、固定されたオプションリストなどを管理する際に、静的配列を使用することで、データの管理が簡単になります。

静的配列の宣言方法

静的配列を宣言する際には、次のように記述します。

静的配列の構成(toなし)
設定解説
  • 配列名 (必須)
    • この配列の名前を指定します。
      配列名には意味のある名前を付けると、コードの可読性が高まり、後からコードを見直すときに理解しやすくなります。
  • 数値 (必須)
    • この配列が格納できる要素の数を指定しています。
      基本的にはインデックスは「0」から始まります。
  • 型 (必須)
    • この配列がどのような種類のデータを格納するのかを指定する部分です。
      VBAでは、Long, String, Double, Variant など、さまざまなデータ型を指定することができます。

また、「To」を使って、インデックスの範囲を指定する方法もあります。

静的配列の構成(toあり)
設定解説
  • 配列名 (必須)
    • この配列の名前を指定します。
      配列名には意味のある名前を付けると、コードの可読性が高まり、後からコードを見直すときに理解しやすくなります。
  • 数値1 To 数値2 (必須)
    • この配列が格納できる要素の範囲を指定します。
      「数値1」がインデックスの開始番号で、「数値2」がインデックスの終了番号を意味します。

      例えば、「Dim 売上(1 To 5) As Long」と記述すると、この配列はインデックスが「1」から「5」までの範囲を持ち、「5」つの要素を格納できます。
      この形式を使用すると、インデックスが「0」以外の値から始まる配列を作成でき、特定の場面で非常に便利です。
  • 型 (必須)
    • この配列がどのような種類のデータを格納するのかを指定する部分です。
      VBAでは、Long, String, Double, Variant など、さまざまなデータ型を指定することができます。

この宣言方法では、インデックスが1から7までの要素を持つ静的配列を作成できます。

静的配列をリセットする方法

静的配列の内容をリセットしたい場合、Erase ステートメントを使うと便利です。
Erase を使用すると、配列の全ての要素がそのデータ型に応じた初期値にリセットされます。

Erase ステートメントの使い方

例えば、以下のように配列に値を設定した後、それをリセットすることができます。

Dim 数字(4) As Long

'// 配列に値を設定
数字(0) = 10
数字(1) = 20
数字(2) = 30
数字(3) = 40
数字(4) = 50

'// 配列をリセット(初期化)
Erase 数字

処理結果

Erase ステートメントの処理結果

このコードを実行すると、数字 配列内の全ての要素が「0」にリセットされます。
Erase は、配列を一度クリアして、再度データを設定し直したい場合などに有効です。

静的配列がよく使われる場面

静的配列は、次のような場面でよく使われます。

よく使われる事例
  • 固定されたリストの管理
    • 静的配列は、変わらないリストを管理するのに最適です。

      例えば、曜日や月の名前など、常に同じ内容のリストを扱うときに使います。
      これらは毎回変わることがないため、一度静的配列に入れてしまえば効率よくデータを管理できます。
  • 特定の数値範囲の保存
    • 静的配列は、特定の範囲に限定された数値を保存するのにも便利です。

      例えば、テストの評価基準や点数の範囲など、範囲が決まっているデータを保存するときに使います。
      静的配列を使うと、決まった範囲のデータを簡単に整理しておけます。
  • 繰り返し処理を簡単にする
    • 静的配列は、同じ処理を複数のデータに対して繰り返し行う場合にも役立ちます。

      例えば、5人の学生のテストの点数を計算する際に、それぞれの点数を静的配列に入れておくと、ループを使って全員分の点数を一度に処理できます。
      これにより、コードがシンプルになり、作業がスムーズに進みます。

静的配列を使う際の注意ポイント

  • 効率的なメモリ管理
    • 静的配列は、サイズが固定されているため、効率的にメモリを使用できます。
      しかし、事前に正確なサイズを決めておく必要があるため、データ量をしっかりと把握してから配列を設計することが重要です。
  • データ量の予測
    • 静的配列は、データ量が確定している場合に便利ですが、後からサイズを変更することができないため、追加のデータが発生する可能性がある場合には注意が必要です。
      データの変動が予想される場合は、静的配列ではなく動的配列を検討しましょう。
  • サイズ変更の制約
    • 静的配列のサイズを変更する場合、ReDimステートメントを使用できますが、この操作を行うと既存のデータが失われます
      そのため、サイズを変更する必要がある場合には、別の配列にデータをコピーしてからReDimを行うなどの工夫が必要です。
      この点を理解し、適切なサイズを予め見積もることが大切です。
  • サイズを間違えて呼び出すとエラーが発生
    • 静的配列のサイズを間違えて呼び出すと、エラーが発生します。
      例えば、配列に存在しないインデックスを参照しようとすると、「インデックスが範囲外です」というエラーが発生します。
      このため、コードを書く際には、配列のサイズを正確に把握し、誤って範囲外の要素にアクセスしないように注意が必要です。

静的配列の使用例

ここからは、静的配列の使用例を紹介します。

使用例1: 固定データを入力する

静的配列を使用して、固定されたデータを効率的に管理する方法を紹介します。
この例では、曜日の名前を静的配列に格納し、各曜日を順番に表示します。

主な使用用途
曜日や月など、変更されない固定されたデータを管理する際に使用します。
データが決まっている場合、静的配列で効率よく管理でき、コードの可読性や保守性が向上します。

Sub ManageFixedData()
    Dim 曜日(6) As String
    Dim i As Long
    
    曜日(0) = "日曜日"
    曜日(1) = "月曜日"
    曜日(2) = "火曜日"
    曜日(3) = "水曜日"
    曜日(4) = "木曜日"
    曜日(5) = "金曜日"
    曜日(6) = "土曜日"
    
    '// 配列内のデータを出力
    For i = 0 To 6
        Debug.Print "曜日(" & i & ") = " & 曜日(i)
    Next i
End Sub
動作概要
  • STEP1
    変数「曜日」の宣言と初期化

    文字列型の静的配列「曜日」を宣言し、7つの要素(インデックスは0から6)を持つ配列として初期化します。各要素には、日曜日から土曜日までの曜日名を格納します。

  • STEP2
    配列へのデータ格納

    各曜日名を対応するインデックスに手動で格納します。曜日(0)には「日曜日」、曜日(1)には「月曜日」…と、全ての曜日が配列に保存されます。

  • STEP3
    Forループの開始

    Forループを使って、配列「曜日」の全ての要素を順に処理します。iはインデックスとして機能し、0から6までの値を取ります。

  • STEP4
    デバッグウィンドウへの出力

    ループ内で、配列「曜日」の各要素をDebug.Printを使ってデバッグウィンドウに出力します。これにより、各曜日の名前が順番に表示されます。

  • STEP5
    ループの終了

    インデックスiが6に達すると、ループが終了します。これで、全ての曜日がデバッグウィンドウに表示され、処理が完了します。

このコードで使用している機能

処理結果

使用例1の結果

1行ずつ解説

コードの詳細
  1. Sub ManageFixedData()
    • この行で、新しいサブルーチン「ManageFixedData」を定義します。
      曜日を静的配列に格納し、その内容を表示する処理が行われます。
  2. Dim 曜日(6) As String
    • ここでは、文字列型の静的配列「曜日」を宣言しています。
      この配列は「7」つの要素を持ち、それぞれに曜日の名前を格納します。
  3. 曜日(0) = “日曜日” ~ 曜日(6) = “土曜日”
    • これらの行では、各曜日名を配列の対応する要素に格納しています。
      これにより、配列「曜日」に全ての曜日が保存されます。
  4. For i = 0 To 6
    • この行で、Forループが開始されます。
      「i」が「0」から「6」まで変化し、その範囲内の全ての配列要素が順に処理されます。
  5. Debug.Print “曜日(” & i & “) = ” & 曜日(i)
    • この行で、配列「曜日」の現在の要素がデバッグウィンドウに表示されます。
      これにより、「i」に対応する曜日名が順に表示されます。
  6. Next i
    • この行で、Forループが次のインデックスに進みます。
      「i」が「6」になるまで、ループが繰り返されます。
  7. End Sub
    • この行で、サブルーチンが終了します。
      全ての処理が完了し、プログラムの次のステップに進みます。

静的配列は、固定されたデータを扱う際に非常に便利で、特にデータの数が変わらない場合に適しています。
配列を使用することで、複数のデータを一括で管理でき、コードの可読性や保守性が向上します。

また、配列の要素を順に処理するためにForループを使うことで、簡単に全ての要素にアクセスできることを確認しました。
これは、データが増えることのない固定されたリストを処理する際に非常に有効です。

使用例2: Array関数を使用してデータを格納

Array 関数を使用して、複数のデータを効率的に静的配列に格納する方法を紹介します。
この例では、数値をArray関数でまとめて配列に格納し、その内容を順番に表示します。

主な使用用途
複数のデータを一度にまとめて配列に格納したい場合に使用します。
特に、固定されたデータが既にある場合や、データの数が決まっている場合に便利です。
Array関数を使うことで、手動でデータを入力する手間を省き、コードを簡潔に保つことができます。

Sub StoreDataWithArray()
    Dim データ As Variant
    Dim i As Long

    データ = Array(100, 200, 300, 400, 500)
    
    '// 配列内のデータを出力
    For i = LBound(データ) To UBound(データ)
        Debug.Print "データ(" & i & ") = " & データ(i)
    Next i
End Sub
動作概要
  • STEP1
    変数「データ」の宣言と初期化

    Variant型 の配列「データ」を宣言し、Array 関数を使用して「5つ」の要素を持つ配列として初期化します。
    各要素には、「100」から「500」までの数値が格納されます。

  • STEP2
    Forループの開始

    Forループ を使って、配列「データ」の全ての要素を順に処理します。
    「i」 はインデックスとして機能し、配列の最初のインデックスから最後のインデックスまでの値を取ります。

  • STEP3
    デバッグウィンドウへの出力

    ループ内で、配列「データ」の各要素を Debug.Print を使ってデバッグウィンドウに出力します。
    これにより、各数値が順番に表示されます。

  • STEP4
    ループの終了

    インデックス 「i」 が配列の最後の要素に達すると、ループが終了します。
    これで、全てのデータがデバッグウィンドウに表示され、処理が完了します。

このコードで使用している機能

処理結果

使用例2の結果

1行ずつ解説

コードの詳細
  1. Sub StoreDataWithArray()
    • この行では、StoreDataWithArray という新しいサブルーチンを定義しています。
      このサブルーチンを実行すると、Array 関数を使用してデータを配列に格納し、その内容を出力する処理が実行されます。
  2. Dim データ As Variant
    • こでは、「データ」という配列を Variant型 として宣言しています。
      Variant型 は、様々なデータ型を格納できる柔軟な型であり、Array 関数を使用して複数のデータを格納する際に便利です。
  3. Dim i As Long
    • この行では、インデックスを管理するための変数「i」を Long型 として宣言しています。
      この変数は Forループ で使用され、配列の各要素を順に処理するために使います。
  4. データ = Array(100, 200, 300, 400, 500)
    • Array 関数を使用して、数値「100」から「500」までの値を持つ配列を データ に格納しています。
      このコードにより、5つの数値が配列にまとめられ、それぞれにインデックスが割り当てられます。
  5. For i = LBound(データ) To UBound(データ)
    • ここでは、Forループ を開始しています。
      LBound(データ) は配列の最初のインデックスを、UBound(データ) は配列の最後のインデックスを取得します。
      これにより、配列の全要素が順に処理されます。
  6. Debug.Print “データ(” & i & “) = ” & データ(i)
    • この行では、現在のインデックス i に対応する データ の値を Debug.Print で出力しています。
      この結果、イミディエイトウィンドウに配列内の各要素が順番に表示されます。
      例えば、「データ(0) = 100」のように出力されます。
  7. Next i
    • Forループ の次のサイクルに進みます。
      インデックス i が次の値に増加し、配列の次の要素が処理されます。
      この処理が配列の最後の要素まで繰り返されます。
  8. End Sub
    • この行で、Sub StoreDataWithArray のサブルーチンが終了することを示しています。
      すべての処理が完了し、この時点でプログラムは次のステップに進みます。

Array 関数を利用することで、複数のデータを一度に配列に格納でき、配列の初期化が簡単になります。
また、LBound と UBound を使用して配列の最初と最後のインデックスを自動的に取得し、For ループを使って全ての要素を効率的に処理することができます。

このように、Array 関数は柔軟で強力な機能を持ち、VBAで配列を操作する際に非常に便利です。
特に、データの数が固定されている場合や、手動での初期化が煩雑になる場合には、この方法が非常に有効です。

まとめ

静的配列は、データの数が予め決まっている場合に非常に有効なデータ管理手法です。

これにより、効率的にデータを格納・操作することができ、VBAプログラムのパフォーマンスを向上させることができます。

ポイントのおさらい

  • 静的配列の基本概念を理解する
    • 静的配列は、配列のサイズが事前に決定されている場合に使用されます。
      データが固定されている場面で特に有効で、配列の要素数を事前に定義しておくことで、効率的なメモリ管理が可能となります。

      「静的配列とはなにか?」もう一度見る。
  • 静的配列の宣言方法をマスターする
    • 静的配列を宣言する際には、要素の数やデータ型を事前に決定します。
      また、Toを使ってインデックス範囲を指定することで、より柔軟な配列管理が可能になります。

      「静的配列の宣言方法」もう一度見る。
  • 静的配列のリセット方法を知る
  • 静的配列を使う上での注意ポイントを確認する
  • 静的配列がよく使われる場面を理解する
    • 静的配列は、固定されたリストや数値範囲を管理する際に最適です。
      また、繰り返し処理を効率化するためにも使用され、コードの可読性とメンテナンス性を向上させます。

      「静的配列の使用例」もう一度見る。

さらに学ぶために

静的配列の基本を理解したら、次は動的配列や他の配列操作方法に挑戦してみましょう。データの柔軟な管理が可能になり、より高度なVBAプログラミングを実現するためのステップアップになります。

タイトルとURLをコピーしました