スポンサードリンク

配列のセルへの一括転記(1.配列の並びとは)

VBAで取得している配列をTranspose関数で行列を入れ替えて、

セル範囲へ一括貼り付けをよく使います。

配列からの一括転記にすると処理がかなり高速化されます。

 

しかしこのTranspose関数を使えば良いのか使わなくていいのか、

2回使わないといけないのかで迷ってしまいます。

迷うというか理解していないので、実際にマクロを走らせて結果を見て

使用回数を決定するというダメっぷり。

 

ということで今回は配列の並び方の種類について調べてみました。

 

配列の種類

大きく分けると次の3種類に別れます。

・一次元配列:var(0)

・多次元配列:var(0,0)

・多段階配列(ジャグ配列):(0)(0)

 

名前の後ろのvar~はVBEのローカルウィンドウで配列がどのように記載されているかを示しています。

Transposeの使用で悩むのは「多次元配列」と「多段階配列(ジャグ配列)」の区別がついていなかったからなんですね。

配列の状態が多次元配列の状態の時にセルへの一括転記が可能です。

 

一次元配列

列が1列しかない配列。

特に指定をしない場合にはこの配列になります。

 

列が1列しかない場合でもVBEで確認したときにvar(0,0)となっている場合は

後述する多次元配列になっています。

var = range("A1:A4").valueというように一括でVariant型変数に取り込むと

1列でも多次元配列になります。

 

以下のようなデータを次のマクロで配列に取り込んでみました。

f:id:ExcelLover:20181021115844j:plain

Sub ArrayTest1()
    Dim Var(3) As Variant
    Dim myRng As Range
    Dim n As Long
   
    For Each myRng In Range("A1:A4")
         Var(n) = myRng.Value
         n = n + 1
    Next
End Sub

 

この時の配列をVBEで見るとこの様になっています。

 

f:id:ExcelLover:20181021120625j:plain

 

イメージとしてはこんな感じでしょうか。

f:id:ExcelLover:20181021120642j:plain

 

多次元配列

同じように以下のデータを次のマクロで配列に取り込んでみました。

f:id:ExcelLover:20181021120705j:plain

Sub ArrayTest2()
    Dim Var As Variant
    Var = Range("A1:B4").Value
End Sub

 

VBEで見るとこの様になっています。

f:id:ExcelLover:20181021120722j:plain

基本的に配列の添字は0から始まるが、

セル範囲を一括でVariant型変数へ取り込むと、添字の最小値が1になるようです。

※配列にTranspose関数を使用しても、添字の開始が1からに変更されます。

この多次元配列の場合のみセル範囲へ一括転記が可能です。

 

イメージはこんな感じでしょうか 

f:id:ExcelLover:20181021120758j:plain

 

多段階配列(ジャグ配列)

多次元配列と似ていますが、配列の中に配列を取り込んでいるものを多段階配列(ジャグ配列)といいます。

多次元配列の時と同じ例のデータを次は以下のマクロで配列に取り込みます。

f:id:ExcelLover:20181021120705j:plain

Sub ArrayTest3()
    Dim Var(3) As Variant
    Dim myRng As Range
    Dim n As Long
   
    For Each myRng In Range("A1:A4")
        Var(n) = Array(myRng.Value, myRng.Offset(, 1).Value)
        n = n + 1
    Next
End Sub

 

VBEで確認すると以下のようになっています。

 

f:id:ExcelLover:20181021120841j:plain

配列の種類の項で説明しましたが、多次元配列ではvar(0,0)となっていた要素が

多段階配列ではvar(0)(0)となっています。

この状態ではセル範囲への一括転記は正しく行われません。

 

この例では配列の中の配列の要素数が全て同じになっていますが、異なる要素数を設定することも出来ます。

 

イメージはこんな感じでしょうか。

f:id:ExcelLover:20181021120927j:plain

まとめ

一口に配列と言っても色々な状態の配列があることがわかりました。

状態の違いを正しく認識することで上手に配列を扱えるようになるのではないでしょうか。

次回は配列の行列並び替えについて調べてみたいと思います。

おまけ

一次元配列のイメージを表すのによく、横向きに箱を並べる図が出てくるんだけど、

二次元配列のイメージを表す際には、一次元目の向きが縦になってるんだよな。

Excelのイメージと合わせるなら一次元配列のイメージも縦方向ではなかろうかと、

今回悶々としている間に思った次第。