- PR -

【VBA】列の移動に時間がかかる

投稿者投稿内容
AERITH
会議室デビュー日: 2005/10/14
投稿数: 15
投稿日時: 2006-03-10 17:31
お返事遅れました。

まず、TEMP_WORKSHEETSの他に
コピーするにあたり後述する結合部分を解除しなければならないため
もうひとつオリジナル(BUNSEKI_DATA_ORIGINAL)の複製として
「BUNSEKI_DATA_ORIGINAL_COPY」シートを新しく作成しています。



todoさんの手法を用いて

Worksheets(TEMP_WORKSHEETS).Range("G1:G10000").Formula = Worksheets(BUNSEKI_DATA_ORIGINAL_COPY).Range("D1:D10000").Formula
     ・
     ・
     ・

と書いた所、プログラム開始位置からここのコピー箇所までが36秒でした。
その後の処理を含めて、総時間1分6秒という結果です。
もう少し早く出来るのではと思っていますが、TEMPシートにコピーするために、
元データ(BUNSEKI_DATA_ORIGINAL_COPY)の結合部分を

   Worksheets(BUNSEKI_DATA_ORIGINAL_COPY).Activate
   Worksheets(BUNSEKI_DATA_ORIGINAL_COPY).Rows.Select
   Selection.MergeCells = False

で解除するのと(解除なしではコピーできませんでした)、
結合解除のためのBUNSEKI_DATA_ORIGINAL_COPYシートを作成しなければならないため時間がかかっています。
さすがにこれは仕方ないでしょうか。。。

ちなみに現在集計するデータは縦2500×横20です。

また、todoさんから提示頂いた手法の部分を、「A1」といった決め打ちではなく
少し柔軟性を持たせたく、変数化しようと下記のようにしたのですがオブジェクトエラーが出てしまいました。

Worksheets(TEMP_WORKSHEETS).Range(Cells(1, StartColumnCell + 3), Cells(10000, StartColumnCell + 3)).Formula = Worksheets(BUNSEKI_DATA_ORIGINAL_COPY).Range(Cells(1, StartColumnCell), Cells(10000, StartColumnCell)).Formula

…Rangeの使い方を間違ってるだけでしょうか?
初歩的な質問ですみません。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-03-10 18:51
Cellsの使い方が拙そうですね。

Worksheets(BUNSEKI_DATA_ORIGINAL_COPY).Cells(1, StartColumnCell)
AERITH
会議室デビュー日: 2005/10/14
投稿数: 15
投稿日時: 2006-03-16 13:14
todoさん、お返事遅れてすみません。

ご指摘頂いた方法で無事動作しました。
ありがとうございました。
何か気持ち速度が下がった気もしましたが、恐らく気のせいでしょう^^;

スキルアップ/キャリアアップ(JOB@IT)