【问题标题】:Extracting font colour in Excel formulae在Excel公式中提取字体颜色
【发布时间】:2018-11-02 14:47:59
【问题描述】:

我正在设计一个扑克培训应用程序,只是添加一些收尾工作 -

这可能更像是一个 VBA 问题,但是,我为每张卡片的价值(每套从 2 到 A 的所有卡片)设置了一个列,其中菱形和心形为红色)。

理想情况下,我希望手牌和翻牌列中显示的牌 - 显示为红色 - 即序列中最后一个字符是♥或♦的任何一对字符

作为参考,“手”列的公式是:

=F2&"  "&F3

对于“翻牌”栏:

=F4&"  "&F5&"  "&F6

我尝试了条件格式,但它突出显示了整个单元格,而不仅仅是特定字符 - 我尝试了以下 VBA 代码,每次尝试运行它时都会冻结我的 Excel:

Function GetColorText(pRange As Range) As String
'Updateby20141105
Dim xOut As String
Dim xValue As String
Dim i As Long
xValue = pRange.Text

For i = 1 To VBA.Len(xValue)

    If pRange.Characters(i, 1).Font.Color = vbRed Then
        xOut = xOut & VBA.Mid(xValue, i, 1)
    End If

Next

GetColorText = xOut
   End Function

Result from below answer

【问题讨论】:

  • 到目前为止,您研究/尝试了什么?您是否尝试过条件格式?
  • 是的,如果我想突出显示整个单元格,这可行,但我希望突出显示单元格中的某些字符并将其余字符留空 - 我还遇到了一个不起作用的 VBA 脚本-
  • 编辑您的问题以包含您尝试过的代码以及错误是什么。
  • 好的,我已经在底部添加了代码

标签: excel fonts colors


【解决方案1】:

试试这个:

Public Enum Suits
    spade = 9824
    heart = 9829
    diamond = 9830
    club = 9827
End Enum

Sub ColorSuits(ByRef c As Range)
    Dim s() As String
    Dim i As Integer
    Dim x As Integer, y As Integer

    s = Split(c.Value, "  ")
    For i = LBound(s) To UBound(s)
          x = InStr(c.Value, s(i))
          y = Len(s(i))
          c.Characters(x, y).Font.Color = SuitColor(s(i))
    Next i
End Sub

Function SuitColor(ByVal s As String)
    Select Case Right(s, 1)
        Case ChrW(heart), ChrW(diamond)
            SuitColor = vbRed
        Case Else
            SuitColor = vbBlack
    End Select
End Function


Sub Test()
    Dim c As Range
    For Each c In Selection
        ColorSuits c
    Next c
End Sub

【讨论】:

  • 试过这个 - 它似乎正确地拾取了符号,使用单元格中找到的第一个符号,然后用红色突出显示整个单元格,而不仅仅是心形和钻石 - 有问题的截图编辑跨度>
猜你喜欢
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多