1

あるワークブックから別のワークブックにデータをコピーするスクリプトを書いています。後者は一種のデータベースとして使用されています(私の考えではありません)。テストとして、最大300行のデータをコピーしています。そのうち、3列は条件付き書式で、残りはプレーンテキストです。テキストのコピーは簡単でほぼ瞬時に行われますが、フォーマットはより困難です。現在、フォーマットされたセルをコピーするために以下のコードを使用しています。

thisSheet.Range("G" & CStr(rRow), "I" & CStr(rRow)).Copy
masterSheet.Range("G" & CStr(mRow), "I" & CStr(mRow)).PasteSpecial (xlPasteAll)

〜300行の場合、これには約40秒かかりますが、これは遅すぎます。複数の行で構成される範囲は順番に貼り付けられないため、コピーできません。

次のコードを試して、フォーマットをコピーしてみました。

masterSheet.Range("G" & CStr(mRow), "I" & CStr(mRow)).value = thisSheet.Range("G" & CStr(rRow), "I" & CStr(rRow)).value
masterSheet.Range("G" & CStr(mRow), "I" & CStr(mRow)).Font.Color = thisSheet.Range("G" & CStr(rRow), "I" & CStr(rRow)).Font.Color
masterSheet.Range("G" & CStr(mRow), "I" & CStr(mRow)).Interior.ColorIndex = thisSheet.Range("G" & CStr(rRow), "I" & CStr(rRow)).Interior.ColorIndex
'cell color and font color are the only things i am interested in

このコードは約3秒で実行されますが、条件付き書式によって適用された書式はコピーされません。

条件付き書式で適用されたセルとフォントの色をコピーするより効率的な方法はありますか?

4

1 に答える 1

1

これをコードの先頭に追加してみてください。

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

そしてこれで終わりです:

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

これが必要な速度を向上させるために機能しない場合は、条件付き書式をVBAにハードコーディングすることをお勧めします。

たとえば、条件付き書式ルールの1つで、数値が100を超えた場合にセルが赤になった場合、値をコピーしている間にそのチェックをVBAに追加し、その値に基づいて目的の形式に宛先セルを設定します。

于 2012-07-09T18:21:32.407 に答える