矩形範囲を配列として取得

Pocket

Excelのマクロで「複数のセルに値をセットするときは配列を使うと処理が速い」ということを紹介しました。
複数のセル(範囲)に配列を使って値をセットするだけでなく、配列として値を取得することができます。
「arrs = Range("a1:b2").Value」のようにすると指定した矩形範囲の値を配列として取得できます。

選択範囲を配列として取得するには「arrs = Selection.Value」とします。
選択範囲のみに変換を施すような処理で使えます。

次のサンプルは選択した範囲の文字列についてスペースを削除します。
最初の行で配列として取得し、最後の行で配列で値をセットしています。

Sub 選択範囲の先頭と末尾のスペースを削除()
    arrs = Selection.Value
    For r = 1 To UBound(arrs, 1)
        For c = 1 To UBound(arrs, 2)
            v = arrs(r, c)
            arrs(r, c) = Trim(v)
        Next c
    Next r
    Selection.Value = arrs
End Sub

以下に範囲と配列がそれぞれどのような動きをするか調べたことをメモしておきます。

a = Range("A1:C5")

5行×3列の範囲を配列aに代入している。
a(1 to 5,1 to 3)という配列になる。添え字は1から始まる。

Dim b(5, 3)
Range("A1:D6") = b

前半で配列を宣言している。
b(0 to 5,0 to 3)という配列になる。この場合、通常は添え字は0から始まる。
後半で範囲に配列をセットしている。セルA1にb(0,0)、セルD6にb(5,3)がセットされる。
範囲のサイズと配列のサイズは同じにする。範囲のサイズが小さいと大きい部分の配列の値はセットされない。

c = Selection

選択範囲を配列cに代入している。
A1:C5を選択していた場合、c(1 to 5,1 to 3)という配列になる。この場合も添え字は1から始まる。

Dim d(2, 1)
d(0, 0) = "0x0"
d(1, 0) = "1x0"
d(2, 0) = "2x0"
d(0, 1) = "0x1"
d(1, 1) = "1x1"
d(2, 1) = "2x1"
Range("A1:B3") = d
e = Range("A1:B3")

前半で配列を宣言している。d(0 to 2,0 to 1)となる。
後半で範囲にセットしている。これをまた配列として取得するとe(1 to 3,1 to 2)となる。
つまり「添え字が0から始まる場合」と「添え字が1から始まる場合」のいずれであっても、範囲に配列をセットする場合は最初の要素が範囲の左上にセットされる。

[ 2014年10月22日 | カテゴリー: Excel | タグ: , , ]

« | »

コメントを残す

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

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報