2017-10-08 8 views
0

Excelマクロで条件付き書式を使用してのみ、表示セルの各行の上位2つの値を強調表示しようとしています。私の範囲は動的なので、私は範囲の最後のセルに到達するためにループを実行しています。ここで可視セルの各行の上位2つの値を強調表示するための条件付き書式設定

は私のコードです:

With Sheets("pcSupplyChainAnalysis").Select 
    For i = 2 To ctr 
     Set rng = Range("C" & i & ":" & "I" & i).SpecialCells(xlCellTypeVisible) 
     rng.FormatConditions.AddTop10 
     rng.FormatConditions(rng.FormatConditions.Count).SetFirstPriority 
     With rng.FormatConditions(1) 
      .TopBottom = xlTop10Top 
      .Rank = 2 
      .Percent = False 
     End With 
     With rng.FormatConditions(1).Interior 
      .PatternColorIndex = xlAutomatic 
      .Color = 255 
      .TintAndShade = 0 
     End With 

     rng.FormatConditions(1).StopIfTrue = False 
    Next 
End With 

CTRは私のデータがあまりにもブランク値を持っているとして、私は、最後の非空白のセルの位置を見つけるために実行していると私は使用して別のシートからそれをコピーしていますカウンターですマクロ。添付

ctr = 2 
Do While (ActiveSheet.Range("A" & ctr).Value <> "") 
    ctr = ctr + 1 

Loop 
ctr = ctr - 1 
ActiveSheet.Range("B2:I" & ctr).Select 
Selection.Cut 
Range("C2:J" & ctr).Select 
ActiveSheet.Paste 

My data looks like this:私のデータの形式の画像です。私は各行のためにトップ2の数字を強調したいと思います(私は範囲内のいくつかのフィルターを使用しているので)。

答えて

0

この試してみてください:あなたはSelect何もする必要はありません

ctr = Worksheets("pcSupplyChainAnalysis").Cells(Rows.Count, "A").End(xlUp).Row


Option Explicit 

Public Sub ShowTop2() 
    Dim rng As Range, visibleRow As Range 

    Application.ScreenUpdating = False 

    With ThisWorkbook.Worksheets("pcSupplyChainAnalysis") 
     .Columns.FormatConditions.Delete 
     Set rng = .UsedRange.SpecialCells(xlCellTypeVisible) 
    End With 

    For Each visibleRow In rng.Rows 
     If visibleRow.Row > 1 Then 
      With visibleRow.FormatConditions 
       .AddTop10 
       .Item(.Count).SetFirstPriority 
       With .Item(1) 
        .TopBottom = xlTop10Top 
        .Rank = 2 
        .Interior.Color = 255 
       End With 
      End With 
     End If 
    Next 

    Application.ScreenUpdating = True 
End Sub 

列Aに最後に使用された行を決定する簡単な方法をあなたの行動のために

関連する問題