【VBA】ReDimをマスター|基本から応用までの徹底解説

この記事では、VBA(Visual Basic for Applications)で使用されるReDimステートメントについて、基本から応用まで徹底的に解説します。ReDimは、動的配列の要素数を柔軟に変更するための非常に重要なステートメントです。この記事を最後まで読むことで、ReDimの使い方を理解し、より効率的なプログラミングができるようになるでしょう。

目次

ReDimステートメントの基本

ReDimの重要性と役割

ReDimステートメントは、動的配列の要素数を変更するために使用されます。静的配列とは異なり、動的配列では要素数をプログラムが実行されている最中にも変更することが可能です。これは、データの量が実行時に変わるような場合に非常に便利です。

基本的な書き方と構文

ReDimの基本的な書き方は以下の通りです。

ReDim [Preserve] 配列名(添字) [As 型]
  • Preserve:このキーワードを使用すると、要素数を変更しても配列の既存の値が保持されます。
  • 配列名:要素数を変更する配列の名前です。
  • 添字:新しい要素数を指定します。
  • As 型:オプションで、新しいデータ型を指定できます。

Preserveキーワードの詳細

Preserveキーワードを使用すると、要素数を変更しても配列の既存の値が保持されます。ただし、Preserveを使用する場合、変更できるのは配列の最後の次元の要素数のみです。

初期化される値について

配列変数がReDimで初期化される際には、データ型に応じて以下のような値に初期化されます。

  • 数値変数:0
  • 可変長文字列:空文字列(“”)
  • 固定長文字列:vbNullChar(文字コード0)
  • ブール変数:False
  • バリアント型変数:Empty値

ReDimの応用テクニック

要素数と次元数の変更

ReDimを使用すると、次元も要素数も変更することができます。具体的な例は以下の通りです。

' 2次元配列を1次元配列に変更
ReDim MyArray(10, 10)
ReDim MyArray(10)

Preserveの制限と注意点

Preserveを使用する場合、最後の次元以外のサイズを変更するとエラーが発生します。例えば、以下のようなコードはエラーになります。

ReDim Preserve MyArray(11, 10)

Variant型での特例

Variant型の変数を配列として使用する場合、添字の下限も変更可能です。

Dim myArray 'Variant変数
ReDim myArray(0 To 10, 0 To 10)
ReDim Preserve myArray(0 To 10, 1 To 11)

サンプルプログラムと使用例

基本的な使用例

以下は、ReDimPreserveを使用した基本的なサンプルプログラムです。

Sub ReDimBasicSample()
    Dim MyArray() As Integer
    ReDim MyArray(1 To 5)
    
    Dim i As Integer
    For i = 1 To 5
        MyArray(i) = i * 10
    Next i
    
    ' 要素数を変更(Preserveを使用)
    ReDim Preserve MyArray(1 To 10)
    
    For i = 6 To 10
        MyArray(i) = i * 10
    Next i
    
    ' 結果を出力
    For i = 1 To 10
        Debug.Print MyArray(i)
    Next i
End Sub

複数次元配列での使用例

ReDimは複数次元配列にも使用できます。以下はその例です。

Sub ReDimMultiDimensionSample()
    Dim MyArray() As Integer
    ReDim MyArray(1 To 5, 1 To 5)
    
    Dim i As Integer, j As Integer
    For i = 1 To 5
        For j = 1 To 5
            MyArray(i, j) = i * j
        Next j
    Next i
    
    ' 要素数を変更(Preserveを使用)
    ReDim Preserve MyArray(1 To 5, 1 To 10)
    
    For i = 1 To 5
        For j = 6 To 10
            MyArray(i, j) = i * j
        Next j
    Next i
    
    ' 結果を出力
    For i = 1 To 5
        For j = 1 To 10
            Debug.Print MyArray(i, j)
        Next j
    Next i
End Sub

ReDimに関するFAQ

Q:ReDimとは何ですか?

A:ReDim(Re-Dimension)は、VBA(Visual Basic for Applications)で使用されるステートメントの一つです。このステートメントは、動的配列の要素数を変更するために使用されます。静的配列とは異なり、動的配列では要素数をプログラムが実行されている最中にも変更することが可能です。

Q:Preserveキーワードは何ですか?

A:Preserveキーワードは、ReDimステートメントと一緒に使用することで、配列の要素数を変更しても既存のデータを保持することができます。ただし、このキーワードを使用する場合、配列の最後の次元の要素数のみを変更することができます。

Q:ReDimで次元数を変更できますか?

A:はい、ReDimを使用すると、配列の次元数も変更することが可能です。ただし、Preserveキーワードを使用している場合、次元数を変更することはできません。

Q:ReDimでデータ型を変更できますか?

A:いいえ、ReDimステートメントではデータ型を変更することはできません。データ型を変更する必要がある場合は、新しい配列を作成してデータをコピーする必要があります。

Q:ReDimはどのデータ型に使用できますか?

A:ReDimは数値、文字列、ブール値、オブジェクト、Variantなど、ほとんどのデータ型に使用することができます。ただし、固定長の文字列やユーザー定義型には使用できません。

Q:ReDimでエラーが出る場合の対処法は?

A:ReDimでよく発生するエラーには、次元数の不一致やPreserveキーワードの誤用などがあります。エラーメッセージをよく読み、コードを修正することが重要です。

Q:ReDimとDimの違いは何ですか?

A:Dimは変数や配列を宣言する際に使用されますが、ReDimは既に宣言された動的配列の要素数を変更するために使用されます。Dimで宣言した後、ReDimで要素数を変更することが一般的です。

Q:ReDimはループの中で使用できますか?

A:はい、ReDimはループの中で使用することができます。ただし、ループの中で頻繁にReDimを使用すると、パフォーマンスに影響を与える可能性があります。

Q:ReDimで配列を縮小するとどうなりますか?

A:ReDimで配列を縮小すると、超過した要素は切り捨てられます。Preserveキーワードを使用している場合でも、縮小した部分のデータは失われます。

関連動画

まとめ

この記事では、ReDimステートメントの基本から応用までを解説しました。ReDimは、動的配列を効率よく扱うために必要なステートメントです。特にPreserveキーワードの使用方法や、Variant型での特例など、理解しておくと非常に便利です。この知識を活かして、より高度なVBAプログラミングに挑戦してみてください。

Excelのショートカットキーの練習

当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。

下のスタートボタンを押して練習モードに入ります。
STARTSTOP
※入力モード切り替え ctrl + shift + alt + space
PRE
NEXT
現在の問題をリストから除外
除外したリストをリセット
現在の除外状況のURL取得
コピー
ガイドモード
リピートモード

※推奨ブラウザ Google Chrome

PUSH ENTER
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次