配列を使おうサンプルコードではデータ数はそれほどでもありませんが、実際扱う変数の数は
膨大なものがあるはずです。それをいちいち読んだり書いたりしていたのでは
不便になってきます。そこで配列があります。
■ この章で学ぶこと |
以下のコードを入力して実行してください。
Sub 配列1()
Dim BaseballTeam As Variant
BaseballTeam = Array("阪神", "巨人", "ヤクルト")
Range("A1") = BaseballTeam(0)
Range("A2") = BaseballTeam(1)
Range("A3") = BaseballTeam(2)
End Sub
|
Dim BaseballTeam As Variant
まず、BaseballTeamという変数を宣言しています。ここで変数は
Variantにしていますが、この配列の定義の仕方だとVariantで定義
する必要があることを覚えておいてください。これは、Arrayの戻り値が
Variantであるからという理由とのことですがあまり深く考えないで
使い込んでみましょう。
BaseballTeam = Array("阪神","巨人","ヤクルト")
配列を作っています。0番目に阪神、1番目に巨人、2番目
にヤクルトを入れています。注意しないといけないのは0番目
があるため、3つの配列を定義した場合、0,1,2という順序で
配列が代入されるということです。
以下のコードを入力して実行してください。
Sub 配列2()
Dim BaseballTeam() As String
ReDim BaseballTeam(2)
BaseballTeam(0) = "阪神"
BaseballTeam(1) = "巨人"
BaseballTeam(2) = "ヤクルト"
Range("A1") = BaseballTeam(0)
Range("A2") = BaseballTeam(1)
Range("A3") = BaseballTeam(2)
End Sub
|
Dim BaseballTeam() As String
@ではVariantで定義しましたがここでは、あらかじめ配列であることを宣言して
String型で定義しています。
ReDim BaseballTeam(2)
配列BaseballTeamに入れ物を3つ用意しなさいという命令です。
BaseballTeam(0) = "阪神"
0番目に阪神を代入しています。1番目、2番目も同様です。
こちらの方がデータ型を定義できるのと、各配列に代入する方法が
容易となっているため、こちらの方が使い勝手がよいと思われます。
以下のコードを入力して実行してください(右下図のようにセルに文字を入力してください)。
Sub 動的配列() Dim ClassMate() As String Dim RowPos As Integer '1列目から開始するので1を代入 RowPos = 1 Do ReDim Preserve ClassMate(RowPos - 1) ClassMate(RowPos - 1) = Cells(RowPos, 1) RowPos = RowPos + 1 Loop While Cells(RowPos, 1) <> "" End Sub |
Do〜Loop Whileでセルが空白になるまで配列に文字を挿入していきます。
(もちろん定義次第では数字でも何でも良い)
ReDim Preserve ClassMate(○)
動的配列を使用する場合には必ず使用します。
頭にたたき込んでおいた方がよいでしょう。
ClassMateという配列の(○-1番目)までの値をそのままにして
配列○番目の入れ物を作りなさいということになります。
もしRedim ClassMate(○)という命令にしてしまうとあらたに○個の
入れ物群を作ってしまうので、それまでに代入した文字はすべて
消えてしまうことになります(一度やってみてください)。
RowPos-1
随所で不自然に1を引いています。これはセルの行数は1から始まるのに対して
配列は0から始まるからです。別に無理矢理1を引くことはないのかも知れませんが
ここではあえてそういうやり方をしました。