0

長いループを実行するとコードの速度が低下するという問題があります (Excel 07 で VBA を使用)。1 つのブロックとしてではなく、多くの異なるセルに個別に書き込みを行っているため、この速度低下が発生していると 95% 確信しています。

ただし、書き込む必要があるセルのほとんどが連続しておらず、連続していないため、これを修正する方法がわかりません。以下を例にとります。

    ActiveSheet.Range("b2").Value = Sheet6.Cells(regionMembers(i), 2)
    ActiveSheet.Range("j4").Value = Sheet6.Cells(regionMembers(i), 4)
    ActiveSheet.Range("e6").Value = Sheet6.Cells(regionMembers(i), 5)
    ActiveSheet.Range("d22").Value = Sheet6.Cells(regionMembers(i), 6)
    ActiveSheet.Range("d23").Value = Sheet6.Cells(regionMembers(i), 7)

これは、書き込む必要があるセルの小さなセクションです (合計はループごとに約 150 であり、ループは配列 regionMembers() の範囲であり、領域メンバーは最大 40 ~ 50 の値を保持できます)。

sheet6 の値をバリアント配列に書き込み、それをアクティブ シートの 1 つのブロックに貼り付ける方法はありますか?

「A1:A100」のような範囲を知っています。おそらく範囲を(「A1」、「A100」)に設定し、貼り付けたいすべての値を配列に保存してから、次のようにします。

myRange.Value = myArray

しかし、範囲が連続していない場合、これを行う方法がわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

2

これ自体は問題にはなりませんが、プロセスを少し最適化する必要があるかもしれません。マクロ中に計算をオフにしてみます(ロジックで許可されている場合):

Application.Calculation = xlCalculationManual

その後、再び電源を入れます

Application.Calculation = xlCalculationAutomatic

連続していない範囲を値に割り当てることはできませんmyRange.Value = myArray。連続した範囲でのみ機能します。(基になるバリアントである myArray は、非連続性をサポートしていません)。

于 2013-05-28T14:31:50.073 に答える