CurrentRegionから配列を得る

セル

CurrentRegionの使い方

CurrentRegion は現在のセルから値のあるセルの領域を選択することができます。
これはあるセルを選択した状態で、Ctr + Shift + * キーを押したのと同じ状態です。

 基本的に途中の行や列で値が抜けて途切れている場合は選択できなくなるので注意しましょう。

 以下のサンプルは、選択されたセルからCurrentRegionで領域選択した結果を表示するものです。

Sub SelectCurrentRegion()
    Dim r As Range
    Set r = Selection
    r.CurrentRegion.Select
    Debug.Print Selection.Address(False, False)
End Sub

CurrentRegionから配列を得る

 CurrentRegion は表などのデータを配列に格納するのに便利なプロパティです。
ただ、一列、一行の場合でも二次配列として読み込みます。それぞれの挙動を確認します。

 今回は以下のような状態で実験してみます。

二次配列を取得

 この例ではB2から始まるC6までの領域を二次配列として読み込んでいます。
これは特に難しくはありません。

一行、一列の領域でも二次配列に

 E2から横方向に一行で並んだデータですが二次配列として読み込まれています。

 次はE4から始まる一列のデータですが、これも二次配列として認識されています。

一次配列として読み込ませる方法

 一次配列として読み込ませるために、Transpose関数を使う方法を示します。
Transpose関数は、列と行を入れ替えますが、データが一列の時、行方向に変換する際に一次配列にしてくれます。
縦方向の領域であれば、簡単に一次配列を得る事が出来ます。

 この例ではE4から始まる縦の一列を、Transpose関数で列から行に変換する際に一時配列にしてくれています。

 続いて横方向の領域の場合ですが、単純にTranspose関数を2回行えば、一次配列を得る事が出来ます。

最後に

 Excel(VBA)では、横方向の領域(Range)であれば、そのまま一次配列にすることができますが、CurrentRegionを使って配列にすると二次配列に変換されてしまいます。
 このため今回はTranspose関数を2回使って対処しました。

 尚、縦方向(列)の領域を配列にしたい場合、Transpose関数は必須となります。これはExcelの仕様となりますので覚えておくと良いでしょう。

タイトルとURLをコピーしました