もくじ

taka



最新記事 by taka (全て見る)
- 『雑記』最近の私の話~ - 2019年9月26日
- 【動画】自作パソコン構成変更!ケースをNZXT H500に交換しました! - 2019年6月5日
- VBA 『Array関数』指定した要素で配列を作成する - 2019年5月23日
- 「動画」初完全ワイヤレスイヤホン『Jabra Elite Active 65t』 - 2019年5月17日
- VBA 日付で令和を簡単に判定してみよう - 2019年5月7日
どうも、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
イメージとしてはこのような感じです。
では配列はどのような風になるのか?
画像イメージにするとこういうようになります。
上の画像では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】に4の部分です。配列の要素数というのは「0」から始まるんです。
なので5つの要素を宣言したい時は【Dim Group(4) As String】としてあげればいいんです。
先ほどのコードで作成した配列は下記のようになります。


あとは変数からインデックス番号を指定して箱から値を抜き出してあげればいいので下記のようにしてあげればかく値を表示することができます。
MsgBox Group(0) & "、" & Group(1) & "、" & Group(2) & "、" & Group(3) & "、" & Group(4)
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ステートメントの注意点
さて、ReDimステートメントを使って要素数を定義すると、それまで定義されていた配列の値がすべて消えてなくなってしまいます。
試しに下記のコードを実行してみてください。
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を使った動的配列のサンプルコード
下記のコードを実行してみるとすべての値が表示されるはずです。
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
配列でよく使う4つのVBA関数
配列をうまく使おうとすると関数を使用する必要になる場合があります。
その中でも比較的多く使う事が多いのが以下の関数です、以下のいくつかは本ブログでも解説しておりますので参考程度にご覧ください(^^)
- Array関数『配列をバリアント型で返す』(まだ解説しておりません)
- LBound関数『VBA【LBound関数】配列の最小要素数を返す』
- UBound関数『VBA【UBound関数】配列の最大要素数を返す』
- Split関数『VBA【Split関数】文字列を分割できる』
配列を使う場合は上記の4つの関数を使う事が多いと思いますので使い方だけでも覚えておくことをお勧めします!
まとめ
以上、配列の基本的な内容についてご紹介させていただきましたがいかがでしたでしょうか?
VBAを始めたばかりの場合、「配列ってなんか苦手」という方が結構多い気がしますが、覚えてしまうと結構便利ですし、処理速度の高速化などにも使えますので基本的な使い方だけでも覚えておくことをお勧めします(^^♪
上記以外の使い方でも『VBAでGooglemapを使わずに地図を作成(Yahoo!API)』など、テキストファイルを一度配列に格納してHTMLファイルに変換するなどの使い方も可能です。
個人的には配列を覚える=『初心者卒業』見たいに感じているので、頑張って覚えてしまいましょう(^^)/
フォロー・チャンネル登録お願いします
VBA以外についてのブログはこちら↓
https://yb-log.com/■Twitterフォロー
Follow @taka_pc1027■YouTubeチャンネル登録
コメントを残す