Условное форматирование - выделите «Топ 3» - Проблема с дубликатами - PullRequest
0 голосов
/ 05 июня 2019

У меня есть набор данных (чисел) в одном столбце. Чего я хотел добиться, так это выделить (непосредственно в этом столбце) три верхних значения. Работает нормально, если нет дубликатов, но если они есть, я получил неправильный результат (дубликаты считаются уникальными значениями).

Я написал простую функцию (см. Ниже), но она также не работает.

Function isTop(cellTop As Range, rngTop As Range, noTop As Integer) As Boolean

'cellTop - cell to be checked
'rngTop - range to be considered
'noTop - nth top value

Dim iStartTop As Integer, noOccurTop As Integer, noTopUpdate As Integer

    For iStartTop = 1 To noTop

        If cellTop.Value = Application.WorksheetFunction.Large(rngTop, iStartTop) Then
            isTop = True
            Exit Function
        End If

    Next iStartTop

End Function

Предположим, что в столбце A имеется следующий набор данных (12 элементов):

1
2
3
4
1
2
3
4
1
2
3
4

и я хочу выделить три верхних элемента (используя условное форматирование и либо стандартное условие верхних 3, либо функцию = isTop (A1, A: A, 3)). После применения любого из предоставленных методов будут выделены только ячейки, содержащие «4».

Однако, я ожидаю, что будут выделены "4", "3" и "2". Есть ли способ решить эту проблему, если дубликаты присутствуют в данном столбце?

Заранее благодарю за помощь. С уважением, Камиль

1 Ответ

1 голос
/ 05 июня 2019

Итак, вот один способ сделать то, что вы хотите:

Создать три новых правила условного форматирования:

  1. Применить к диапазону $A:$A

    =$A1=MAX($A$1:$A$12)
    
  2. Применить к диапазону $A:$A

    =$A1=LARGE(($A$1:$A$12<MAX($A$1:$A$12))*($A$1:$A$12),1)
    
  3. Применить к диапазону $A:$A

    =$A1=LARGE(($A$1:$A$12<LARGE(($A$1:$A$12<MAX($A$1:$A$12))*($A$1:$A$12),1))*($A$1:$A$12),1)
    

enter image description here

Вы также можете пойти по маршруту VBA, но это зависит от вас.

...