VBAの配列について徹底解説



The following two tabs change content below.
アバター

taka

あることがキッカケでVBAを独学で勉強しました、今ではブログを通してVBAでできることを解説しつつ、VBAや他の言語の勉強、ブログ運営の勉強をしています(^^♪

どうも、taka(@takabou63)です(^^♪

さて、皆さん、VBAを勉強していく中で「配列」という言葉ができてきますよね!

でもプログラマーでもない方が急に配列なんていわれても正直イメージがつかないと思うんですよ(*_*;

しかもいろいろな解説を見てもどうもわかりにくい・・・(私の理解力の問題か?)

なので、今回は私なりにVBAにおける配列をなるべくわかりやすく解説していきます!

そもそも配列ってなに?

そもそも配列とはなんぞや?という所からですが、配列というのは「同じデータ型の複数の変数を1つにまとめた物」といわれています。

普通の変数は【箱のようなも】といわれていて、その箱には1つの値しか格納できない物ですね?

Sub Sample()

 Dim i As Long
 i = 2 '変数iに2を格納
 i = 1 '変数iに1を格納
 MsgBox i '後に格納された値【1】が表示される
  
End Sub
VBA変数image

VBA変数image

イメージとしてはこのような感じです。

では配列はどのような風になるのか?

画像イメージにするとこういうようになります。

VBA配列image

VBA配列image

上の画像では5つの箱が並んでいますね、それぞれ配列には

  • 箱の事態の事を【要素
  • 箱の数のことを【要素数
  • 箱の番号のことを【インデックス番号

という名称がついています。これは解説にもよく出てきますので覚えておきましょう!

では実際にこの配列を使って簡単なコードを書いてみましょう!

配列を使ったサンプルコード

実際に配列を使ってみましょう!

使い方は変数にとっても似ていて、配列も変数と同じように宣言をする必要があるからです。

変数と少し違う所は、【Dim 変数名(要素数) As 型名】のように宣言するということです。

下記のコードは画像と同じように5つの要素を持った配列となります。

Sub Sample()
 
'groupという配列を宣言
 Dim Group(4) As String
  '↓配列に値を格納---
  Group(0) = "鈴木"
  Group(1) = "佐藤"
  Group(2) = "山本"
  Group(3) = "加藤"
  Group(4) = "田中"
  '-------------------
  
  MsgBox Group(0) & "、" & Group(1) & "、" & Group(2) & "、" & Group(3) & "、" & Group(4)
 
End Sub

さて、このコードを見て不思議に思ったことはありませんか?

そう、【Dim Group(4) As String】にの部分です。配列の要素数というのは「0」から始まるんです。

なので5つの要素を宣言したい時は【Dim Group(4) As String】としてあげればいいんです。

先ほどのコードで作成した配列は下記のようになります。

あとは変数からインデックス番号を指定して箱から値を抜き出してあげればいいので下記のようにしてあげればかく値を表示することができます。

 MsgBox Group(0) & "、" & Group(1) & "、" & Group(2) & "、" & Group(3) & "、" & Group(4)
VBA配列サンプルコード結果

VBA配列サンプルコード結果

VBAの動的配列について

さて、配列は「同じデータ型の複数の変数を1つにまとめた物」とご紹介しました。

ですが、そんな配列には動的配列というものがありますこの動的配列は使い方が違ってきてしまいます。

ここからは『動的配列』についてをご紹介していきます。

VBAの動的配列とは

さて、普通の配列を使う場合下記のようなコードを使うことが多いと思います。

Sub Sample()
 
'groupという配列を宣言
 Dim Group(4) As String
  '↓配列に値を格納---
  Group(0) = "鈴木"
  Group(1) = "佐藤"
  Group(2) = "山本"
  Group(3) = "加藤"
  Group(4) = "田中"
  '-------------------
    MsgBox Group(0) & "、" & Group(1) & "、" & Group(2) & "、" & Group(3) & "、" & Group(4)
 
End Sub

ここで注目してほしいのが【Dim Group(4) As String】です。

このコードでは要素数を『4』と宣言しています。

ですが、毎回、要素数が決まっているわけじゃありませんよね?

じゃあ要素数が決まっていない場合はどうすればいいの?

ここからご紹介する動的配列は【要素数が決まっていないとき使う配列】の事を指します

動的配列の使い方:ReDimステートメントを使う

動的配列を使用するときには【配列の宣言をするときに要素数を指定しないで宣言する】です。

 Dim Member() As String '要素数を定義しない

このように要素数を定義しないで、必要となった数だけ後で要素数を定義してあげる事が可能になります。

プロシージャ内で要素数を定義するには【ReDimステートメント】を使用します。

ReDimステートメントを使った動的配列のサンプルコード

動的配列のサンプルコードは下記のようになります。

Sub Sample()

    Dim Member() As String '要素数を定義しない

    MsgBox "要素数を再定義"

    ReDim Member(3) '要素数を再定義
    Member(1) = "tanaka"
    Member(2) = "yamada"
    Member(3) = "sato"

    MsgBox "配列は" & Member(1) & "・" & Member(2) & "・" & Member(3)     

End Sub
ReDimステートメントSampleコード結果

ReDimステートメントSampleコード結果

ReDimステートメントの注意点

さて、ReDimステートメントを使って要素数を定義すると、それまで定義されていた配列の値がすべて消えてなくなってしまいます。

動的配列のimage

動的の配列のイメージ

試しに下記のコードを実行してみてください。

Sub Sample()

    Dim Member() As String '要素数を定義しない

   
    MsgBox "要素数を再定義"

    ReDim Member(2) '要素数を再定義

    Member(0) = "tanaka"

    Member(1) = "yamada"

    Member(2) = "sato"

    MsgBox "配列は" & Member(0) & "・" & Member(1) & "・" & Member(2)

    MsgBox "要素数をさらに再定義"
    
    ReDim Member(3) '要素数をさらに再定義
     'Member(0)~(2)のtanaka,yamada,satoが消える
    Member(3) = "さいとー"
   
    MsgBox "配列は" & Member(0) & "・" & Member(1) & "・" & Member(2) & "・" & Member(3)

End Sub
動的配列の結果

動的配列の結果

Member(0)~(2)のtanaka,yamada,satoが消えて、Member(3)に格納された「さいとー」だけが表示されましたね。

既存の値を消さないで要素数を変更するにはPreserveを使う

はい、せっかく要素数を変更しても内容が消えてしまうのが困ってしまうことも多いです。

では既存の値を消さないで要素数を変更したい場合はどうしたらいいのか?そんな時に使うのが【Preserveキーワード】です。

ReDimステートメントにPreserveキーワードを使うことで既に格納されている値を消すことなく要素数を変更することができます。

Preserveを使用した動的配列のimage

Preserveを使用した動的配列のimage

Preserveを使った動的配列のサンプルコード

下記のコードを実行してみるとすべての値が表示されるはずです。

Sub Sample()

    Dim Member() As String '要素数を定義しない

   
    MsgBox "要素数を再定義"

    ReDim Member(2) '要素数を再定義

    Member(0) = "tanaka"
    Member(1) = "yamada"
    Member(2) = "sato"

    MsgBox "配列は" & Member(0) & "・" & Member(1) & "・" & Member(2)

    MsgBox "要素数をさらに再定義"
    
    ReDim Preserve Member(3) 'ReDim Preserveを使用して要素数をさらに再定義
    Member(3) = "さいとー"

   '全ての配列の値が消えないで表示される
    MsgBox "配列は" & Member(0) & "・" & Member(1) & "・" & Member(2) & "・" & Member(3)

End Sub
Preserveを使用した動的配列の結果

Preserveを使用した動的配列の結果

配列でよく使う4つのVBA関数

配列をうまく使おうとすると関数を使用する必要になる場合があります。

その中でも比較的多く使う事が多いのが以下の関数です、以下のいくつかは本ブログでも解説しておりますので参考程度にご覧ください(^^)

配列を使う場合は上記の4つの関数を使う事が多いと思いますので使い方だけでも覚えておくことをお勧めします!

まとめ

以上、配列の基本的な内容についてご紹介させていただきましたがいかがでしたでしょうか?

VBAを始めたばかりの場合、「配列ってなんか苦手」という方が結構多い気がしますが、覚えてしまうと結構便利ですし、処理速度の高速化などにも使えますので基本的な使い方だけでも覚えておくことをお勧めします(^^♪

上記以外の使い方でも『VBAでGooglemapを使わずに地図を作成(Yahoo!API)』など、テキストファイルを一度配列に格納してHTMLファイルに変換するなどの使い方も可能です。

個人的には配列を覚える=『初心者卒業』見たいに感じているので、頑張って覚えてしまいましょう(^^)/

フォロー・チャンネル登録お願いします

VBA以外についてのブログはこちら↓

https://yb-log.com/

■Twitterフォロー

■YouTubeチャンネル登録

ファイルやコードの利用、WEBサイトの利用について

サンプルコードなどは当サイトの免責事項をよくお読みになってからお使いください。

Sponsored Link

 

WordPressでブログを始めるなら

WordPress簡単インストール&安心の安定性

レンタルサーバー Xserver

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です