excel - 使用带有六个条件的图标集的条件格式

标签 excel excel-formula conditional-formatting vba

我正在使用条件格式,我已经使用条件格式几天了,但我无法得到我正在寻找的响应。

我希望根据输入的标记在单元格中显示一个彩色圆圈。但问题是我有六个条件,但我认为 Excel 仅支持五个。这可能吗?

0-20  red color circle
21-39 green color circle
40-54 blue color circle
55-64 yellow color circle
65-79 orange color circle
80-100 pink color circle

Example - icon style base conditional formatting

最佳答案

如果您仅限于使用图标集的条件格式规则:

  • 如果您不需要圆圈,您可以轻松设置 6 条规则,如下图所示

  • 如果您在 CF 规则中需要超过 4 个彩色圆圈:Create Your Own Excel Icon Set

如果您可以使用 VBA,下面的代码将创建类似于原生 CF 圆圈的风格化圆圈

  • 打开 VBA:Alt + F11
  • 创建新模块:菜单项插入> 模块并粘贴代码
  • 单击第一个子 testIcons() 内的任意位置,然后按 F5 运行它
<小时/>
Option Explicit

Public Sub testIcons()
   Application.ScreenUpdating = False
   setIcon Sheet1.UsedRange
   Application.ScreenUpdating = True
End Sub

Public Sub setIcon(ByRef rng As Range)
   Dim cel As Range, sh As Shape, adr As String

   For Each sh In rng.Parent.Shapes
      If InStrB(sh.Name, "$") > 0 Then sh.Delete
   Next: DoEvents
   For Each cel In rng
      If Not IsError(cel.Value2) Then
         If Val(cel.Value2) > 0 And Not IsDate(cel) Then
           adr = cel.Address
           Set sh = Sheet1.Shapes.AddShape(msoShapeOval, cel.Left + 5, cel.Top + 2, 10, 10)
           sh.ShapeStyle = msoShapeStylePreset38: sh.Name = adr
           sh.Fill.ForeColor.RGB = getCelColor(Val(cel.Value2))
           sh.Fill.Solid
         End If
      End If
   Next
End Sub

Public Function getCelColor(ByRef celVal As Long) As Long
   Select Case True
      Case celVal < 21:    getCelColor = RGB(222, 0, 0):    Exit Function
      Case celVal < 40:    getCelColor = RGB(0, 111, 0):    Exit Function
      Case celVal < 55:    getCelColor = RGB(0, 0, 255):    Exit Function
      Case celVal < 64:    getCelColor = RGB(200, 200, 0):  Exit Function
      Case celVal < 80:    getCelColor = RGB(200, 100, 0):  Exit Function
      Case celVal <= 100:  getCelColor = RGB(200, 0, 200):  Exit Function
   End Select
End Function
<小时/>

enter image description here

<小时/>

注意:

  • VBA 代码应用于小数据
  • 它可以生成大量形状,这将使所有其他操作变慢

大约 1,000 行和 20 列的测试:总圆数 19,250;持续时间:47.921875 秒

<小时/>

编辑:对子 setIcon()

进行了 2 处更新
  1. 自清洁
  2. 如果单元格不包含错误,则仅处理数值

    • 它排除包含文本、空单元格或日期的单元格
    • 感谢@EEM 的建议

关于excel - 使用带有六个条件的图标集的条件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32536860/

相关文章:

vba - Excel VBA 宏,复制行中的第一个值

c# - 一个简单的 C# DLL - 如何从 Excel、Access、VBA、VB6 调用它?

excel - 复制没有背景颜色的 Excel 范围

excel - 在 VLOOKUP 中检查一位、两位或三位数字

java - Vaadin 树形网格条件格式

arrays - 二维数组作为字典的项目

excel - 获取连续的最后一个非空单元格

Excel - 如何获得最后一个由数字和 "N/A"随机混合组成的行中最后10个值的平均值

excel - 特殊的excel条件格式

vba - 特定单元格值决定列颜色 Excel