【问题标题】:Conditional formatting for restricted part in each cell in EXCELEXCEL中每个单元格中受限部分的条件格式
【发布时间】:2019-03-13 06:42:07
【问题描述】:

假设我们有 3 个单元格,内容分别为“123 (45)”、“456 (67)”和“789 (89)”。是否可以仅根据它们的第一个值来格式化三个单元格,即“123”、“456”、“789”?

说清楚:

假设我在每个单元格中的每个数字后面都有“(XX)”,如何仍然如图所示格式化,

即 480 (XX), 7 (XX), 112 (XX)''''''''

【问题讨论】:

  • 是的。 (如何?条件格式有一个基于公式的选项。确定提取您感兴趣的值部分所需的公式,如果需要,转换为数字,设置格式。对所需的每种特定格式重复。)取决于具体程度您正在寻找的答案,您可能需要添加有关您正在寻找的条件格式类型的更多信息。
  • 谢谢,我的目标是根据受限部分的值格式化单元格。
  • 如果您需要示例,可以使用 vba 完成,我将为您更新我的答案
  • 问题是你必须将 =NUMBERVALUE(LEFT(A1:A10,3)) 放入一个数组中,我认为数据栏无法识别数组
  • 或者如何仅在隐藏列中提取值然后应用数据栏

标签: excel


【解决方案1】:

如果单元格包含相同的模式例如: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

编辑

这样做的简单方法是:

在具有数据的列旁边的另一列中输入以下公式:

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

然后您可以应用数据栏条件格式,在数据栏的条件格式选项内有一个复选框“仅显示栏”,结果将是这样的:

另一种方法是在另一列中输入公式:

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

或者这个

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

没有其他简单的方法可以做到这一点,因为数据栏条件格式不接受数组公式。

无论如何,您都可以使用工作表中的宏来复制数据并粘贴以下代码:

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

因此,每次使用此代码在列中添加新数据时,它都会自动将其格式化,如下图所示。我已经测试过,它只需将其粘贴到您的工作表中,而不是在模块中,然后根据您的需要更改范围。

希望对你有帮助!

【讨论】:

  • 条纹是什么意思,能不能提供一张你想做的照片?
  • 嗯,谢谢。我的目标是根据我感兴趣的部分的值来格式化单元格。在这种情况下,456 (XX) 应该显示比 123(XX) 更长的条
  • @FuminWang 你检查了我上一个答案吗,vba 代码会为你完成请求的任务,检查它并告诉我它是否有帮助。
  • 这很有帮助,让我花点时间消化一下,谢谢!
  • 改范围就好了,我已经设置为范围A了,你可以把A换成你的范围
猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多