Home » エクセルマクロ・Excel VBAの使い方 » 配列 » 2次元配列にセルのデータを格納するExcelマクロ

2次元配列にセルのデータを格納するExcelマクロ

対象:Excel2003, Excel2007, Excel2010

「vba 二次元配列 選択したセルのデータを格納」
という検索キーワードで、このサイト『インストラクターのネタ帳』にアクセスくださった方がいらっしゃいます。

2次元配列に、セル範囲のデータを代入する方法を探している方による検索です。

プログラミングの経験はあるけれども、Excel VBA(Visual Basic for Applications)のことをご存じない方の場合、ループをグルグル回しながらデータを配列に格納するということをやってしまいがちです。

Excel VBAの場合、とても簡単に2次元配列にデータを代入できます。

[スポンサードリンク]

セルのデータを配列に格納するサンプルマクロ

以下のマクロが参考になるでしょう。

Sub 選択されているセル範囲から新規ブックを作成する()
 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

 Workbooks.Add
 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

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » 2次元配列にセルのデータを格納するExcelマクロ

「配列」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.