「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が配列でないときには変数・rとcに「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
が入っていたのです。
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » 2次元配列にセルのデータを格納するExcelマクロ
- Newer:Word2010・2007で縦書きに
- Older:要点を絞って、とてもわかりやすい流れ
TrackBack:4
- TrackBack URL
- 表内の文字列を配列に格納するPowerPointマクロ from インストラクターのネタ帳
- PowerPoint(パワーポイント)で、表の中の文字列を取得するVBAのコードをご紹介しています。
- 表内の文字列を2次元配列に格納するWordマクロ from インストラクターのネタ帳
- 表内の文字列を2次元配列に格納するWord(ワード)マクロをご紹介しています。
- VBAでAVARAGE関数の引数に配列変数を指定する from インストラクターのネタ帳
- Excel(エクセル)VBA(Visual Basic for Applications)で、ワークシート関数・AVARAGEの引数に配列を指定するサンプ...
- テキストファイルを読み込んでワークシートへデータを書き出すExcelマクロ from インストラクターのネタ帳
- テキストファイルのデータを読み込んで、ワークシートに書き出すExcel(エクセル)マクロに書き出すマクロをご紹介しています。