2017-05-31 6 views
0

3組の値を取り、最高値(または最低値)を強調表示し、次の最高値(または最低値)を強調表示して、マッチする2組のラウンド。Excel VBA - 条件付きハイライト - 次に高い値をハイライト表示

勝者または最初の3つのペアを強調するコードは少しきれいになる可能性があります(私は平均を上回っていましたが、上記のロジックとは対照的に最高の値を選択する方法があります平均以下...)、私は仕事に2番目の部分を得ることができません。私はその第4の価値を私に提供するトップ10を策定する論理に行きました。私はエラーを起こさず、デバッグして値を印刷しようとすると、何も得られません。

'Highlight winners of first round 
    Range("C4:C6").Select 
    Selection.FormatConditions.AddAboveAverage 
    Selection.FormatConditions(1).AboveBelow = xlAboveAverage 
    Selection.FormatConditions(1).Interior.Color = 5296274 
    Range("C9:C11").Select 
    Selection.FormatConditions.AddAboveAverage 
    Selection.FormatConditions(1).AboveBelow = xlAboveAverage 
    Selection.FormatConditions(1).Interior.Color = 5296274 
    Range("C14:C16").Select 
    Selection.FormatConditions.AddAboveAverage 
    Selection.FormatConditions(1).AboveBelow = xlAboveAverage 
    Selection.FormatConditions(1).Interior.Color = 5296274 

'Highlight highest losing analyst 
    Range("C4:C16").Select 
    If Selection.FormatConditions(1).Interior.Color <> 5296274 Then 
     Selection.FormatConditions.AddTop10 
     With Selection.FormatConditions 
      .TopBottom = xlTop10Top 
      .Rank = 10 
     End With 
     With Selection.FormatConditions.Interior 
      .Color = 10092492 
     End With 
    End If 

enter image description here

私の問題上の任意のアイデア?

編集済み:スクリプトを実行した後のファイルの外観を示すスクリーンショットが追加されました。しかし、次のラウンドも対戦することになるので、各試合の勝者が表示されます。この場合、人物Bでも強調表示される「4位」の人が必要です

答えて

1

私は分かりません条件付き書式設定だけで厳密にしようとしていることを行うことができます。私はこの事例で彼らのことを明らかにすると、通常のvbaを使用します。このサブの「rng」を各セットの最初のセルに設定します。議論の通り、最低値が各ペアの勝者です。各敗者の値は、これまでに見られた最低値より低いかどうかを調べるためにチェックされます。そうであれば、 'minval'変数はこの値で更新され、そのセルへのポインタ 'mincell'も更新されます。

Sub OrgHighestAndNext1() 

    Dim rng As Range: Set rng = [C4,C9,C14] 

    Range("C" & rng.Row & ":C" & rng.Areas(3).Rows.Row + 2).Interior.ColorIndex = xlColorIndexNone 

    Dim cell As Range, scell As Range, mincell As Range 
    Dim minval As Double: minval = 9999.9 

    For Each cell In rng 
     If cell.Value2 < cell.Offset(2, 0).Value2 Then 
     cell.Interior.Color = 5296274 
     Set scell = cell.Offset(2, 0).Cells 
     Else 
     cell.Offset(2, 0).Interior.Color = 5296274 
     Set scell = cell.Cells 
     End If 

     If scell.Value2 < minval Then 
     Set mincell = scell 
     minval = scell.Value2 
     End If 
    Next 

    mincell.Interior.Color = 10092492 
End Sub 

値は、暗い緑色の背景が与えられます。敗者の背景は変更されません(ワークシートが最初からそうであった場合は白です)。敗者のうち最も低いもの(すべてのペアが処理された後の 'mincell'が示すもの)には、明るい緑の色が与えられます。

最低でも の最高順位の順位付けで言えば、種子6は2,3,5,6,4,1のようにランク付けされているので、種子6は純粋に時間だけにランクされた です。しかし、あなたが最初に 勝者の時間に基づいてランク付けし、次に敗者の場合、種子は 2,3,6(これらは勝者)と5,4,1(敗者)のようにランク付けされます。あなたが後にしているのは です。この2番目のタイプのランキングです。 の勝者は気にしませんが、遅い時間にランクされた方がいいので は最高(最低)の時間で敗者を見つけることができます。

+0

はい私はお詫び申し上げます。空白のセルで区切られた2つの値、したがって3つのセルの範囲があります。私があなたのことを正しく理解するために、私の目標は、各試合の「優勝者」を強調してから、「ベスト敗者」(IE第4シード)を別の色で強調表示することです。 – sbagnato

+0

コードは「勝ち」の値が最小の場所でも動作しますか?最初の値をより小さい値よりも小さい値に変更すると、3番目に小さい値が得られますが、2番目の値を2より小さい値に変更すると、maxcell.interior.color行に "Object variable not set"エラーが表示されます。 maxcellをmincellに変更して(そしてそれを宣言しても)動作しません。私は何が欠けていますか? – sbagnato

+0

あなたが何を後にしているか完全にはわからない。第1より大きい符号を切り替えると、各ラウンドのすべての敗者を強調表示します。そのような変更と最下位の勝者を得るためには、最初にmaxvalを999.9のようなものに設定してから、2番目のより大きい値をより小さい記号に変更する必要があります。 – Amorpheuses

関連する問題