ExcelVBAでデータを一括してセルに貼り付ける方法とは?

このQ&Aのポイント
  • ExcelVBAで配列のデータを一括してセルに貼り付ける方法について教えてください。
  • 現在は一つ一つ貼り付ける方法を使用していますが、件数が多いと時間がかかるため、まとめて貼り付ける方法を知りたいです。
  • 具体的には、100列1000行のデータを配列として用意し、1行単位でまとめて貼り付けたいです。
回答を見る
  • ベストアンサー

ExcelVBAでデータを一括してセルに貼り付ける

こんばんは ExcelVBAで教えてください。 配列のデータをセルに貼り付ける方法です。 一つ一つ行う方法は解ります。 しかし、これでは件数が多いと時間がかかってしまいます。 まとめて貼り付ける方法を教えてください。 例えば次のように100列1000行のデータのとき、一つ一つでは10万回も貼り付けることになります。 これを1行単位で1000回とか全部まとめて1回とかでできないでしょうか。 配列データを用意する都合で1行単位もお願いします。 For Row = 1 To 1000 For Column = 1 To 100 Cells(Row, Column).Value = 配列(Row - 1, Column - 1) Next Next

質問者が選んだベストアンサー

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1
Hirorin_20
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

Range("A1:CV1000").Value=配列 或いは Range(Cells(1,1),Cells(1000,100)).Value=配列 で一気にできますよ。

Hirorin_20
質問者

お礼

ありがとうございました。

関連するQ&A

  • VBAで、配列のデータをセルに書き戻す方法について

    1000行200列の配列があり、配列の5列目と6列目のデータを、セルの10列目と11列目にすばやく書き戻す方法を教えてください。 (方法1) Dim DATA() As Long ReDim DATA(1 To 1000, 1 To 200) FOR 行番号= 1 TO 1000 CELLS(行番号,10).VALUE = DATA(行番号,5) CELLS(行番号,11).VALUE = DATA(行番号,6) NEXT (方法2) Dim DATA() As Long ReDim DATA(1 To 1000, 1 To 200) Dim WORK1() As Long ReDim WORK1(1 To 1000, 1 To 1) Dim WORK2() As Long ReDim WORK2(1 To 1000, 1 To 1) FOR 行番号= 1 TO 1000 WORK1(行番号,1) = DATA(行番号,5) WORK2(行番号,1) = DATA(行番号,6) NEXT RANGE("J1:J1000").VALUE = WORK1() RANGE("K1:K1000").VALUE = WORK2() (方法1)より(方法2)の方が早いのですが、WORKに貯めるのもめんどうなので、 RANGE("J1:K1000").VALUE = DATA(1,5), DATA(2,5), DATA(3,5),~,DATA(999,6),DATA(1000,6)のようなことができればと思います。 よろしくお願いします。

  • エクセルVBAの配列について

    エクセルVBAの配列について VBAをはじめたばかりの初心者です。 現在、下記のようにデータを配列の中に入れ、 別シートに書き出そうとしております。 (配列へ読み込むところのみ) Dim 配列(1 To 件数, 1 To 9) As Variant For j =1 To 件数 For i = 2 To L If Cells(i, 2).Value = Tx_month Then For k = 3 To 11 配列(j, k - 2) = Cells(i, k).Value Next k End If Next j,i 現状では、データの最終行のみを「件数」分書き出してしまいます。 jとiのForが重なっているからだと思うのですが、どう書き直したら良いか分かりません。 質問をさせていただくのも初めてなので、分かりづらく恐縮ですが お力添え頂けますと幸いです。 どうぞ宜しくお願い致します。

  • VBAの配列の格納について

    エクセルのVBAで、セルのデータを配列に格納するスピードを向上したいと思います。 例えば、A1~A10000のセルにデータを書き出す場合、 For 行番号 = 1 To 10000 Cells(行番号, 1).Value = 1 Next よりも、一旦、配列に書き込んだ後、一気にセルに書き込んだ方法が早いのですが、 For 行番号 = 1 To 10000 HAIRETU(行番号, 1) = 1 Next Range("A1:A10000").Value = HAIRETU() 今度は、A1~A10000に書き込んだデータを、再度、配列に格納する場合、 For 行番号 = 1 To 10000 HAIRETU(行番号, 1) = Cells(行番号, 1).Value Next とすると時間がかかるので、 HAIRETU() = Range("A1:A10000").Value というような処理をしたいのですが、うまくいきません。 よい方法がありましたら、ご教授ください。 よろしくお願いします。

  • Excelのセルから配列変数への一括読込み

    VB(というかプログラミング)の超初心者です。 Excelシートの任意の領域にある数値を、配列変数に一括して 入力したいと思っています。 これまで、 Dim XXX(10) As Variant For I = 1 To 10 XXX(I - 1) = Cells(1, I).Value Next I Range(Cells(10, 1), Cells(10, 10)).Value = XXX の様な感じで処理していましたが(最近まで、セルへの書込みも For-Nextで処理していました)、データ数が多くなると処理に 時間がかかってしまいます。 配列YYYへの読込みもセルへの書込みの様に一括して行うには どうすれば良いでしょうか? よろしくお願いします。

  • 配列データのソートについて

    配列データのソートについて 配列データAAA(1000,10)があるとします。 このデータを5番目のデータにて降順にソートしたいと考えています。 現在、次の方法にて実施していますが、効率が悪いようなので、効率の良い方法を教えて下さい。 Sheets("荷捌場").Select Range(Cells(1, 1), Cells(1000, 10))="" For A=1 To 1000 For B=1 To 10 Cells(A,B)=AAA(A,B) Next B Next A Range(Cells(1, 1), Cells(1000, 10)).Select Selection.Sort Key1:=Range("E1"), Order1:=xlDescending For A=1 To 1000 For B=1 To 10 BBB(A,B)=Cells(A,B).Value Next B Next A Sheets("ソート後のデータ貼付場").Select For A=1 To 1000 For B=1 To 10 Cells(A,B)=BBB(A,B) Next B Next A

  • ExcelVBAマクロで貼り付け先の配列化について

    ExcelVBAマクロについて確認させてください。 プログラム高速化のために2番目のワークシート貼り付け先範囲を配列化しました。 1番目のワークシートの文字をtrim関数によって前後の空白を除去したうえで2番目のワークシートに貼り付けようとしていますが、空白が除去できていない状況です。 何か原因なのでしょうかm(__)m Sub test() Dim x As Long Dim y As Long Dim x2 As Long Dim y2 As Long Dim a As String Dim Table As Variant '配列化のため '最大列取得 x = Worksheets(1).Cells(1, Columns.Count).End(xlToLeft).Column '最大行取得 y = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row Table = Worksheets(2).Range(Worksheets(2).Cells(1, 1), Worksheets(2).Cells(y, x)) '貼り付け先範囲を配列化 For x2 = 1 To x '最大列 For y2 = 1 To y '最大行 a = Worksheets(1).Cells(y2, x2).Value Table(y2, x2) = Trim(a) 'ワークシート1の値から前後空白を取り除いてワークシート2に貼り付け Next Next End Sub

  • 指定したセルにデータの書き出し

    いつもお世話になっております。 VB.net+SQLでデータベース連携しております。 SQLで抽出したデータをエクセルに書き出すプログラムを考えています。 For Each myRow In ds.Tables("Estimate").Rows Code = myRow("Code") xlSheet.Cells(3, 2).Value = Code Next myRow 上記で3行目の2列目にデータを書き出すことは出来たのですが 変数codeには複数のデータを格納していて上記のプログラムだとCells(3, 2).Value と指定しているので、はじめのデータから最後のデータまで同じセルに上書きしてしまっているようです。 これを各データを一行ずつ書き出したいのですが、上手くいきません。 For Each myRow In ds.Tables("Estimate").Rows    For i = 3 To 17 Code = myRow("Code") xlSheet.Cells(i, 2).Value = Code      i+=1    Next i Next myRow のようにセルの行指示を変数にしたのですが、変わりませんでした。 分かりますでしょうか?

  • シートの全てを半角にする

    A列からT列、 行は10000行ほどあるのですが 全てを半角にしたいのですがマクロでないと無理でしょうか? Sub 全てを半角にする() Dim row行 As Long Dim col列 As Long For col列 = 1 To Range("IV1").End(xlToLeft).Column For row行 = 2 To Cells(65536, 2).End(xlUp).Row Cells(row行, col列) = StrConv(Cells(row行, col列), vbNarrow) Next row行 Next col列 End Sub でやるしかないですか? もっと効率のいい方法があったら教えてください!

  • 【Excel VBA】日付の代入

    現在以下の操作を行いたく、コードを作成しています。 ・20~23行で各最大値を抽出し、C列に代入する ・最大値に紐づく日付をD列に代入する ・D列の日付が入ったセルを改行し、 2行目に"(曜日)"を入力する <現在のExcelデータ詳細> A20:"処理1" A21:"処理2" A22:"処理3" A23:"処理4" B19~AF19:日付 B20~AF23:任意の数字 C31:処理1の最大値 C33:処理2の最大値 C35:処理3の最大値 C37:処理4の最大値 D31、D33、D35、D37:日付 L(曜日)を入力予定 最大値に紐づく日付をD列に代入するところで 躓いています。 ご教示いただけないでしょうか。 現在のコードは下記の通りです。 Sub 最大値の取得() Dim max As Long Dim row As Integer Dim column As Integer For row = 20 To 23 max = 0 For column = 2 To 32 If Cells(row, column).Value > max Then max = Cells(row, column).Value End If Next Cells((row - 20) * 2 + 31, 3).Value = max For i = 4 To 1 Step -4 '編集中 Cells((row - 20) * 2 + 31, 4).Value = Cells(row - i, column - 1) '編集中 Next End Sub

  • 重複データーの集計、削除

    どなたかご教授下さい。 下記のようにD列に重複する行があればI列に集計し、行削除するマクロを作成しました。 さらに、重複する基準となる列を複数(D列,F列,G列)に増やしたいのですが、上手く出来ません。 宜しくお願い致します。 Sub test() Dim i, j For i = 19 To Cells(Rows.Count, 2).End(xlUp).row - 1 For j = Cells(Rows.Count, 2).End(xlUp).row To i + 1 Step -1 If Cells(i, 4).value = "" Then Exit Sub If Cells(i, 4).value = Cells(j, 4).value Then Cells(i, 9).value = Cells(i, 9).value + Cells(j, 9).value Rows(j).Delete End If Next Next End Sub

専門家に質問してみよう