Excel 彩色特殊字符的总和

Excel Sum of Colored Special Characters

你好 Whosebug 社区

我试图自动计算每列的模块 + 小时数。最终我放弃了,因为我没有足够的经验并且使用的符号是特殊字符+彩色。

在 Excel 单元格中显示“u u”

是否可以制作一个VBA公式来对字符求和?

到目前为止我尝试使用的代码是:

Public Function SumColorRed(pRange1 As Range, pRange2 As Range) As Double
Application.Volatile
Dim rng As Range
For Each rng In pRange1
  If rng.Font.Color = pRange2.Font.Color Then
        SumColor = SumColor + 2
  End If
Next
End Function

提前致谢

第一件事很简单:单元格文本实际上是 u u,只是用 Font WinDings 格式化后会显示

如果使用rng.Font.Color读取或设置颜色,则表示该颜色对整个单元格有效。如果您想获取(或设置)单个字符的颜色(或其他属性,如粗体或斜体),您可以使用 Characters-属性。您需要将开始和长度指定为参数,例如 rng.Characters(3, 1) 到单元格的第 3 个字符。

以下代码查看单元格的第一个和第三个字符并检查颜色。我不能 100% 确定我的颜色定义与您 sheet 中使用的颜色完全一致,也许您必须调整常量定义。

Function getColorTime(cell As Range) As Date
    
    Const redCharColor = &HFF&
    Const yellowCharColor = &HC0FF&
    Const greenCharColor = &H50B000
    Const blueCharColor = &HC07000

    Dim c1 As Long, c2 As Long
    c1 = cell.Characters(1, 1).Font.Color
    c2 = cell.Characters(3, 1).Font.Color
    ' Debug.Print c1, c2
    If c1 = redCharColor And c2 = yellowCharColor Then
        getTime = TimeSerial(2, 0, 0)
    ElseIf c1 = yellowCharColor And c2 = greenCharColor Then
        getTime = TimeSerial(1, 0, 0)
    ElseIf c1 = blueCharColor And c2 = greenCharColor Then
        getTime = TimeSerial(0, 30, 0)
    End If
End Function

这是我的两分钱:

C1中的公式:

=CountColor(A1:A4)

引用 UDF:

Function CountColor(rng As Range) As Double

Dim cl As Range

For Each cl In rng
    Select Case cl.Characters(1, 1).Font.Color & "|" & cl.Characters(3, 1).Font.Color
        Case "255|49407"
            CountColor = CountColor + 2
        Case "12874308|4697456"
            CountColor = CountColor + 1
        Case "49407|4697456"
            CountColor = CountColor + 0.5
        Case Else
            CountColor = CountColor
    End Select
Next

End Function

显然,您想找出 color-codes 作为您的“王牌”。