「vba 二次元配列 選択したセルのデータを格納」
という検索キーワードで、このサイト『インストラクターのネタ帳』にアクセスくださった方がいらっしゃいます。
2次元配列に、セル範囲のデータを代入する方法を探している方による検索です。
プログラミングの経験はあるけれども、Excel VBA(Visual Basic for Applications)のことをご存じない方の場合、ループをグルグル回しながらデータを配列に格納するということをやってしまいがちです。
Excel VBAの場合、とても簡単に2次元配列にデータを代入できます。
セルのデータを配列に格納するサンプルマクロ
以下のマクロが参考になるでしょう。
Dim arr As Variant
Dim r As Long
Dim c As Long
arr = Selection.Value ' ←ここで配列にデータを格納
If IsArray(arr) Then
r = UBound(arr, 1)
c = UBound(arr, 2)
Else
r = 1
c = 1
End If
Range("A1", Cells(r, c)).Value = arr
End Sub
例えば、B2:G11セルが選択させた状態で上記のマクロを実行すると、新規ブックが作成され、その新規ブックのA1:F10セルに、元のブックのB2:G11セルのデータが入力されます。
サンプルマクロの解説
以下の1行で配列・arrにデータが格納されます。
arr = Selection.Value
ReDimステートメントもないこの1行で、バリアント型の変数arrに、選択されていたセルのデータを、2次元配列としていきなり格納できます。
ただし、セルが1個だけ選択されていたときには、変数・arrが配列になりません。
そのためIsArray関数でarrが配列かどうかをチェックして
If IsArray(arr) Then
配列になっていた場合には大きさをUBoud関数を使って調べ、変数rと変数cに代入しています。
r = UBound(arr, 1)
c = UBound(arr, 2)
arrが配列でないときには「1」を代入しています。
Else
r = 1
c = 1
ステップ実行をして、End Ifの行でローカルウィンドウを表示すれば、arrが2次元配列になって、選択しておいたセル範囲のデータが格納されていることを確認できるでしょう。
ブックを追加して
Workbooks.Add
配列から新規ブックのセル範囲にデータを一気に書き出しています。
Range("A1", Cells(r, c)).Value = arr
書き出す方も、ループ処理をする必要はなく、一気に書き出すことができます。
なお、
Range("A1").Value = arr
のように先頭のセルだけを指定して書き出してくれないかと考えてしまう方もいらっしゃいますが、これはダメです。
書き出すセル範囲を、
Range("A1", Cells(r, c)).Value = arr
のようにしっかりと指定してください。
この指定が必要なために、変数・rとcに行数・列数を格納する処理、
If IsArray(arr) Then
r = UBound(arr, 1)
c = UBound(arr, 2)
Else
r = 1
c = 1
End If
が入っていたのです。
最終更新日時:2023-08-10 10:39
- Newer:Word2010・2007で縦書きに
- Older:要点を絞って、とてもわかりやすい流れ
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » 2次元配列にセルのデータを格納するExcelマクロ