事務職のためのExcelVBA入門講座 > ExcelVBAの基礎知識 > 配列とは

ExcelVBAの基礎知識

配列とは

変数には様々な値が格納できますが、1つの変数には1つの値しか入れる事ができません。
沢山の値を入れたい場合、1つ1つ変数を宣言していったら大変ですね。

そこで配列というものを使います。
配列は変数が集まったものです。
配列は変数と同じく、Dimステートメントで宣言します。

◆Dimステートメント
Dim 配列名(要素数) As データ型

要素数は値を入れる場所の番号(インデックス)です。
何も指定しなければ0から始まります。
要素数の指定方法は複数あります。

◆方法1:最大要素数を指定する場合
Dim Ary(1) As Long

配列Aryを最大要素数を1にして作成します。
最大要素数が1なので、Ary(0)とAry(1)の2つの場所が作成されます。

◆方法2:要素数の最小と最大を指定する場合
Dim Ary(1 To 5) As Long

配列Aryの要素数を1〜5で作成します。
Ary(1)〜Ary(5)までの5か所に値を入れる事ができます。
最小値と最大値は、正の数ならば自由に設定できます。
0や1以外からも始める事ができます。
Dim Ary (3 To 5) As Long

この場合、Ary(3)、Ary(4)、Ary(5)の3つの場所が作成されます。

◆方法3:要素数を指定しない場合
Dim Ary() As Long

この場合、要素数0の配列を作成します。

もちろん、このままでは使えないので使うにはマクロの中で
ReDimステートメントで配列の要素数を再定義する必要があります。

このような要素数0の配列は、マクロを実行してから要素数を決めたい場合に使用します。
(シート内のデータ件数をカウントして、データ件数分の要素数をもつ配列を定義したい場合など)

こうした配列のことを動的配列といいます。

配列に値を格納する、配列から値を取り出す



配列名(インデックス)で配列のデータを指定する事ができます。
上の例で言えば、
Ary(1) = 1


とすれば配列Aryのインデックス番号1番に1を格納します。

サンプルコード


A列に日付、B列に値が入ったリストから今月分の値を、
日付ごとに値を配列aryDateに集計します。

A列   B列
2010/3/1 5
2010/3/2 2
2010/3/3 6


配列aryDateの要素数は1〜最終日の日付です。
最終日の日付は「翌月1日のシリアル番号-1」になります。

コードを書く段階では要素数が確定していません。
(要素数が実行日の最終日の日付になるため)

ですので、一度空の配列を作成し、コード内でReDimステートメントで再定義しています。


Sub 日付ごとに集計()

Dim aryDate() As Long
Dim DayCount As Long
Dim lngRow As Long
Dim i As Long

DayCount = Day(DateSerial(Year(Date), Month(Date) + 1, 1) - 1)
ReDim aryDate(1 To DayCount)

lngRow = 1
With ThisWorkbook.Worksheets(1)
  Do Until .Cells(lngRow, "A").Value = ""
    If DateSerial(Year(Date), Month(Date), Day(.Cells(lngRow, "A").Value)) = .Cells(lngRow, "A").Value Then
      i = Day(.Cells(lngRow, "A").Value)
      aryDate(i) = aryDate(i) + .Cells(lngRow, "B").Value
    End If
    lngRow = lngRow + 1
  Loop
End With

End Sub

<<指定回数繰り返し(For...Nextステートメント) | 事務職のためのExcelVBA入門講座トップへ | リンクの更新などのメッセージを表示しないで開く>>

この記事へのコメント

コメントを書く

お名前
メールアドレス
URL
コメント
[必須入力]
認証コード
[必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック


Powered by Seesaa
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。