0

シート全体に条件付き書式をペアで適用するこの VBA コードがあります。つまり、BC、DE、FG などからの重複を探します。問題は、これが列全体に対して行われ、シートの速度が本当に低下していることです

このコードによって生成された列 B と D のルールを確認すると、=$B$1:$C$87,$B$89:$C$1048576 に適用されます。これが ROW 88 をスキップする理由は、この行に合計があり、すべてのルールを削除したためです。このコードを変更して、シート全体ではなく行 87 以降にのみ適用する方法はありますか? 現在、それは物事をかなり遅くしています。

Sub findDups()
Dim startCell As Range
Dim formatCols As Range

Set startCell = ActiveCell

Do
    Set formatCols = startCell.Resize(1, 2).EntireColumn

    formatCols.FormatConditions.AddUniqueValues
    formatCols.FormatConditions(formatCols.FormatConditions.Count).SetFirstPriority
    formatCols.FormatConditions(1).DupeUnique = xlDuplicate
    With formatCols.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With formatCols.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With

    Set startCell = startCell.Offset(0, 2)

Loop Until startCell.Column >= 26

End Sub
4

2 に答える 2

1

変更する必要があるだけですformatCols (それは奇妙です、88行目を回避するコードは何も見えません)

...
Application.ScreenUpdating = False
Set startCell = ActiveSheet.Range("B1")

Do
    Set formatCols = startCell.Worksheet.Range(startCell, startCell.Offset(86, 1))

    ...
Loop Until ....

Application.ScreenUpdating = True
.....
于 2013-06-25T21:38:29.373 に答える
0

選択範囲を制限するために使用する 1 つの方法は、列の最後のセルを見つけることです。このコードを使用している場所:

Set formatCols = startCell.Resize(1, 2).EntireColumn

Range オブジェクトを使用するように変更します。

  1. 新しい Range オブジェクトを宣言し、フォーマットする列に設定します
  2. その列の最後の値を見つけます (87 の場合はこれを使用できます。それ以外の場合は startCell.End(xlDown) を使用できます)
  3. このセルまでの範囲を使用するように新しい範囲変数を設定します
  4. 範囲値を使用して書式設定を適用します

これにより、コードが高速化されます。

いくつかの追加のことを試すこともできます。

  1. Application.ScreenUpdating を False に設定する
  2. Application.Calculation を xlCalculationManual に設定します。

それが役に立てば幸い!

完全ITPro

于 2013-06-25T21:32:30.440 に答える