Условное форматирование для ограниченной части в каждой ячейке в EXCEL - PullRequest
1 голос
/ 08 марта 2019

Предположим, у нас есть 3 ячейки с содержанием соответственно "123 (45)", "456 (67)" и "789 (89)".Возможно ли форматирование трех ячеек только на основе их первых значений, т. Е. «123», «456», «789»?

Чтобы было понятно:

enter image description here

Как отформатировать, как показано на рисунке, предположим, что после каждого числа в каждой ячейке стоит «(XX)»,

, т. Е. 480 (XX), 7 (XX), 112 (XX) '' '' '' ''

1 Ответ

1 голос
/ 08 марта 2019

, если ячейка содержит тот же шаблон, например: 123 (45)

, тогда вы можете использовать условное форматирование на основе формулы и поместить эту формулу:

=NUMBERVALUE(LEFT(A1,3)) = 123 

или

=NUMBERVALUE(LEFT(A1,3))=B1

B1, если вы хотите сослаться на значение некоторой ячейки

и выполнить желаемое форматирование

, если шаблон не тот же, но, например, некоторые похожи: 123 (45), 1234 (46), затем:

=NUMBERVALUE(LEFT(A1,FIND(" ",A1)-1)) = 123

или

=NUMBERVALUE(LEFT(A1,FIND(" ",A1)-1)) =B1

РЕДАКТИРОВАТЬ

Простой способ сделать этоis:

В другом столбце рядом со столбцом, содержащим данные, поместите эту формулу:

=NUMBERVALUE(LEFT(A1,FIND(" ",A1)-1))

, затем вы можете применить условное форматирование панелей данных, внутри опций условного форматирования для панели данных.это флажок «Показывать только бар», и результат будет примерно таким:

enter image description here

Другой способ в другой колонке поставить формулу:

=A1&"     "&REPT("|",NUMBERVALUE(LEFT(A1,FIND(" ",A1)-1))/5)

enter image description here

или это

=A8&"     "&REPT("∙",NUMBERVALUE(LEFT(A8,FIND(" ",A8)-1))/5)

enter image description here

нет другого простого способа сделать это, потому что условное форматирование строки данных не принимает формулу массива.

Вы можете сделать это в любом случае с макросом на листе, который имеет копию данных и вставьте следующий код:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim lRow As Long

Dim data As Range

Set data = ActiveSheet.Range("A:A")

If Not Intersect(Target, data) Is Nothing Then

lRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row

Dim arr() As Double

On Error Resume Next
For i = 1 To lRow

Set myrange = ActiveSheet.Range("A" & i)

ReDim Preserve arr(i)
arr(i) = Left(myrange, WorksheetFunction.Find(" ", myrange) - 1)


Next i

Dim MaxValue As Long

MaxValue = WorksheetFunction.Max(arr)

For i = 1 To lRow
Set myrange = ActiveSheet.Range("A" & i)

With myrange.Interior
  .Pattern = xlPatternLinearGradient
  .Gradient.Degree = 180
  .Gradient.ColorStops.Clear
End With
With myrange.Interior.Gradient.ColorStops.Add(1)
  .Color = RGB(13, 71, 161)
  .TintAndShade = 0
End With
With myrange.Interior.Gradient.ColorStops.Add(1 - (arr(i) / MaxValue))
  .Color = RGB(13, 71, 161)
  .TintAndShade = 1
End With

With myrange.Interior.Gradient.ColorStops.Add(0)
  .Color = RGB(255, 255, 255)
  .TintAndShade = 1
End With

Next i
End If
End Sub

Так что с этим кодом каждый раз, когда вы помещаете новые данные в столбец, он автоматически форматирует их, как показано на рисунке ниже.Я проверил, и это работает, просто вставьте его в свой лист, а не в модуль и измените диапазоны, как вам подходит.

enter image description here

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...