Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


149 / 13645 ツリー ←次へ | 前へ→

【81771】コピペ高速化のコードについて(配列) やまた 21/5/8(土) 22:50 質問[未読]
【81772】Re:コピペ高速化のコードについて(配列) γ 21/5/9(日) 14:25 回答[未読]
【81773】Re:コピペ高速化のコードについて(配列) やまた 21/5/10(月) 0:34 発言[未読]

【81771】コピペ高速化のコードについて(配列)
質問  やまた  - 21/5/8(土) 22:50 -

引用なし
パスワード
   コピペ高速化のコードについて


3つのシート(”反映作業1”、”反映作業2”、”反映作業3”)があり
”反映作業1”、”反映作業2”から”出力シート”に
”反映作業3”から”予定シート”に転記する際の
VBAコードについて教えていただけると幸いです。

現在、都度、シート間を移動してコピペをするコードのため
処理するのに数分かかってしまいます。

高速化のためにどうすればよいか調べ、配列を使用すれば
高速処理が可能になるだろう思い、配列について調べていたのですが
今の私には難しく、思っている作業を実現するコードが書けません。

お力添えいただけたらと思います。

行いたい作業は以下です。

”反映作業1”のシートのRange("AA157:AD256")をコピーして
”入力シート”のRange("H155")に値の貼り付け

”反映作業1”のシートのRange("AE157:AH256")をコピーして
”入力シート”のRange("N155")に値の貼り付け

”反映作業1”のシートのRange("AI157:AL256")をコピーして
”入力シート”のRange("T155")に値の貼り付け

”反映作業1”のシートのRange("AM157:AP256")をコピーして
”入力シート”のRange("Z155")に値の貼り付け

中略

”反映作業1”のシートのRange("BS157:BV256")をコピーして
”入力シート”のRange("BV155")に値の貼り付け

↓(”反映作業1”から”出力シート”へのコピペは計12回です)

”反映作業2”のシートのRange("AA157:AD256")をコピーして
”入力シート”のRange("H274")に値の貼り付け

”反映作業2”のシートのRange("AE157:AH256")をコピーして
”入力シート”のRange("N274")に値の貼り付け

”反映作業2”のシートのRange("AI157:AL256")をコピーして
”入力シート”のRange("T274")に値の貼り付け

”反映作業2”のシートのRange("AM157:AP256")をコピーして
”入力シート”のRange("Z274")に値の貼り付け

中略

”反映作業2”のシートのRange("BS157:BV256")をコピーして
”入力シート”のRange("BV274")に値の貼り付け

↓(”反映作業2”から”出力シート”へのコピペは計12回です)

”反映作業3”のシートのRange("AA157:AX166")から
”予定シート”のRange("B7")に値の貼り付け


あまりも長いので、行いたい作業を中略してしまいましたが
必要な情報でしたらご指摘ください。


どうぞよろしくお願いいたします。

【81772】Re:コピペ高速化のコードについて(配列)
回答  γ  - 21/5/9(日) 14:25 -

引用なし
パスワード
   Function copy2(rngFrom As Range, rngTo As Range)
  Dim v
  v = rngFrom.Value
  rngTo.Resize(UBound(v, 1), UBound(v, 2)) = v
End Function
と定義しておいて、

Call copy2(ws1.Range("AA157:AD256"),ws2.Range("H155"))
などとしてみてはどうですか?

今のコードでもセルを一つずつコピーしているわけではないから、
どの程度のスピードアップにつながるのかは不明だが。
(3割くらいにはなるのかも)

以下のようにして速度を測り、その結果をフィードバックしてください。
 dim t
 t = Timer
 ' ここで作業
 Debug.Print Timer - t '経過時間の出力

それから転記先に計算式が多いのであれば、
手動計算モードにしてから処理実行し、終了後、自動計算に戻すとよいでしょう。
今のコードでも効果あるかもしれません。

# なお、転記元、先に一定の規則性のようなものがありそうで、
# 記述の短縮が図られそうな気もするが、それには触れません。

【81773】Re:コピペ高速化のコードについて(配列)
発言  やまた  - 21/5/10(月) 0:34 -

引用なし
パスワード
   yさん

ご回答ありがとうございます。

実行作業が行えておらず、実行次第ご返信致します。

149 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free