2016-11-03 2 views
1

у меня есть макрос первенствовать, который сравнивает каждую ячейку с предыдущим и показать больше, меньше или равное изображение:Сравнить клетки и отображать значки

Sub Up() 
Dim c As Range 

For Each c In Worksheets("Général").Range("D2:T20") 
MFC c 
Next c 
End Sub 

Private Sub MFC(ByVal Rng As Range) 

With Rng 
.FormatConditions.Delete 
.FormatConditions.AddIconSetCondition 
With .FormatConditions(1) 
    .SetFirstPriority 
    .IconSet = ThisWorkbook.IconSets(xl3Arrows) 
    With .IconCriteria(2) 
     .Type = xlConditionValueFormula 
     .Value = "=" & Rng.Offset(, -1).Address 
     .Operator = xlGreaterEqual 
    End With 
    With .IconCriteria(3) 
     .Type = xlConditionValueFormula 
     .Value = "=" & Rng.Offset(, -1).Address 
     .Operator = xlGreater 
    End With 
End With 
End With 
End Sub 

Фактический дисплей:

enter image description here

Мне просто нужно обратить вспять больше и меньше значков (для позиций треков: положение 1 лучше, чем положение 2)

Wanted дисплей:

enter image description here

+0

Если вы хотите изменить критерии значков, почему бы вам не изменить код, задающий критерии значка? –

+0

Не просто изменить значок, но изменить правило сравнения, чтобы установить стрелку вверх, если число меньше предыдущего и наоборот. – Clementine

+0

Я попробовал xlLess вместо xlGreater, но это не сработало. – Clementine

ответ

1

Учитывая идею переключения xlGreaterEqual в xlLessEqual и xlGreater к xlLess Я отметил это MSDN article, который говорит:

Для правило условного форматирования набора значков, это свойство может быть установлено в onl y одна из следующих двух констант: xlGreater или xlGreaterEqual.

Это вновь искуственные в пользовательском интерфейсе, где это является ограничение на параметры, которые могут быть выбраны для условного форматирования с набор иконок правил:

enter image description here

Так что, возможно решением здесь является просто измените знак на данные, а затем «откройте», что с форматированием чисел и используйте код, который вы уже разместили.

Таким образом, в этом примере:

enter image description here

  • Первый диапазон: в вашем примере
  • Второй диапазон ваш пример, где каждое значение *-1
  • Третий диапазон является второй диапазон с формат пользовательских номеров 0;0;0, чтобы сделать отрицательные числа позитивными.

Код в точности такой же, как у вас (мои изменения в диапазонах на моих листах); это знак переключение и номер формат, который получить желаемый результат:

Option Explicit 

Sub Up() 

    Dim rngSource As Range 
    Dim rngCell As Range 

    Set rngSource = ThisWorkbook.Worksheets("Sheet1").Range("B2:E3") 

    For Each rngCell In rngSource 
     MFC rngCell 
    Next rngCell 

    Set rngSource = ThisWorkbook.Worksheets("Sheet1").Range("B6:E7") 

    For Each rngCell In rngSource 
     MFC rngCell 
    Next rngCell 

    Set rngSource = ThisWorkbook.Worksheets("Sheet1").Range("B10:E11") 

    For Each rngCell In rngSource 
     MFC rngCell 
    Next rngCell 

End Sub 

Private Sub MFC(ByVal rng As Range) 

    Dim lngThisNumber As Long 
    Dim lngPreviousNumber As Long 

    lngThisNumber = rng.Value 
    lngPreviousNumber = rng.Offset(0, -1).Value 

    With rng 
     .FormatConditions.Delete 
     .FormatConditions.AddIconSetCondition 
     With .FormatConditions(1) 
      .SetFirstPriority 
      .IconSet = ThisWorkbook.IconSets(xl3Arrows) 
      With .IconCriteria(2) 
       .Type = xlConditionValueFormula 
       .Value = "=" & rng.Offset(, -1).Address 
       .Operator = xlGreaterEqual 
      End With 
      With .IconCriteria(3) 
       .Type = xlConditionValueFormula 
       .Value = "=" & rng.Offset(, -1).Address 
       .Operator = xlGreater 
      End With 
     End With 
    End With 

End Sub 

Обратите внимание, что я попробовал это для .Value назначения:

.Value = "=" & rng.Offset(, -1).Address & "*-1" 

Так что *-1 будет сделан во время выполнения, когда форматирование было применено - однако это не получило желаемого результата вообще.

Смежные вопросы