• ベストアンサー

VBAにて、配列のデータを一度にシート上に貼り付ける方法

シートにデータを貼り付けるための高速化を検討しています。 現在、VBからエクセルの指定セルに直接データを書いていますが、遅くてしかたありません。  (こんな感じです ⇒ Cell(○、□) = データ) 一応、表示更新は、止めています。(ScreenUpdatingプロパティを使っています。) 配列のデータを一度に、あるシート上に貼り付けたいのですが、ループ処理で回すしか方法がありませんか? すいませんが、宜しくお願いします。

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

  • ベストアンサー
  • ebis
  • ベストアンサー率27% (17/61)
回答No.2

3個だけの配列のサンプルですが、どうでしょう 縦に貼り付け Sub test() Dim a(2, 0) As Variant a(0, 0) = "aaa" a(1, 0) = "bbb" a(2, 0) = "ccc" Range("A1:A3").Value = a End Sub 一応横の貼り付けはこうなります。 Sub test2() Dim a(0, 2) As Variant a(0, 0) = "aaa" a(0, 1) = "bbb" a(0, 2) = "ccc" Range("A1:C1").Value = a End Sub 配列は2次元でないと、うまくいきません。

0333
質問者

お礼

早速の回答ありがとうございました。 テストしたところ、画期的に早くなりました。 1次元では、テストしたのですが、同じ値が貼り付けられるので、無理かと思っていましたが... 2次元にして行います。

その他の回答 (1)

noname#4564
noname#4564
回答No.1

  > 現在、VBからエクセルの指定セルに直接データを書いていますが、遅くてしかたありません。 >  (こんな感じです ⇒ Cell(○、□) = データ) (1) データベースの処理なら、CopyFromRecordsetメソッドを検討しましょう。(注 1) (2) データベースの処理なら、DAO/ADO + Jet経由で出力できないか、検討しましょう。 (3) レコードセットではない配列なら、Rangeを指定して一括出力できないか検討しましょう。(注 2) (注 1) Excel 97以前では、DAOのレコードセットしか処理できません。     (2000以降は、DAO/ADOのどちらも可)     Excel 95 ではExcelプロセス外のレコードセットを処理できません。 (注 2) 座標のタテヨコ(X,Y)が逆転しないよう注意してください。     (縦横変換が必要な場合、性能上のボトルネックになります)  

0333
質問者

お礼

早速の回答ありがとうございました。 データベースの処理では、ありませんので、Range側で行います。

関連するQ&A