在Excel中为单元格中的部分文本着色


13

在Excel中,有几种方法可以根据其值对整个单元格进行动态着色,但是有什么方法可以根据其值对单元格的一部分进行动态着色?

例如,假设我正在构建一个类似于以下内容的报告:

 _________________________
|       |    Dec    | Nov |
|_______|___________|_____|
|Gross R| $75 (-25%)| $100|
|_______|___________|_____|
|Net Inc| $55 (+10%)| $50 |
|_______|___________|_____|

在这种情况下,我只希望为百分比值(-25%)和(+ 10%)上色,而不是同样在单元格中的美元值$ 75和$ 55。另一个问题是着色应该是动态的(绿色代表正值,红色代表负值),并且这些单元格是参考(因此手动着色不在表格中)。

我试过使用内置TEXT()函数,但这也不起作用。具体来说,我尝试了=TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")在哪里A1是对美元金额A2的单元格引用,并且是对百分比增量的单元格引用。

令人沮丧的是,自定义格式[Green]0%;[Red](-0%)在应用于整个单元格时(通过自定义数字格式设置部分)工作得很好,但是当通过TEXT()函数应用时,它将停止工作。因此,如何自定义单元格中部分值的颜色?


1
Excel函数无法做到,条件格式仅适用于整个单元格,听起来您已经用尽了自定义数字格式的所有可能性。不过,它可能在VBA中可行。(举个简单的例子,在这里看看。不过我很好奇。如何在一个单元格中获得两个数字,也许将它们建立为字符串?
chuff 2013年

@chuff是的,我将它们构建为字符串,因此可以绕过Excel的网格限制(每行固定宽度的列大小)。
摩西

Answers:


8

我发现有两种方法可以解决此问题,但都不是最佳方法。

第一种方法是将字符串分成两个单独的列,这样我就可以使用前面描述的自定义格式之一来设置其颜色。这不是理想的解决方案,因为我不得不在报表的“外观”上做出折衷以容纳该额外的列。

第二种方法是通过使用VBA /宏,尽管我选择避免在这种特定情况下使用,但完全可以完成任务。虽然我不会打印出完整的工作代码,但其实质可以归结为:

  1. 查找要调整的单元格(通过ActiveCell循环或循环)
  2. 使用Instr函数在字符串中查找要修改颜色的位置
  3. 如果文本长度可变,请Instr再次使用它在字符串中查找要停止颜色的位置
  4. 使用该Characters(start, length)函数突出显示您想要修改的确切字符,并传递先前找到的值。
  5. 用改变颜色 Font.Color = RGB(r,g,b)

1
没有足够的代表来投票,但这将是我的第一篇文章:“虽然我不会打印出完整的工作代码” -为什么不呢?对于这样的论坛非常有帮助。
hmedia1

5

可以在此处找到使用宏的示例:

宏为Excel中的单元格中的文本上色

Excel宏-用于循环给单元格的一部分上色

使用一个包含for循环的Excel宏来循环浏览天气数据行,如果单元格文本包含单词hot,则将单元格文本的颜色设置为红色,如果包含单词cool,则将其设置为blue:

使用说明

  1. 在Excel中单击“开发人员”选项卡
  2. 单击Visual Basic图标,然后将下面的宏文本复制到1“代码”窗口中
  3. 单击Excel图标以切换回Excel视图
  4. 单击宏图标,选择名为TextPartColourMacro的宏,然后单击运行

完成的宏:

Sub TextPartColourMacro()

' Declarations and Initialisation
Dim Row As Integer, Col As Integer
Dim CurrentCellText As String
Col = 1

' Loop Through Rows 2 to 5
For Row = 2 To 5

    ' Get Text in Current Cell
    CurrentCellText = ActiveSheet.Cells(Row, Col).Value

    ' Get the Position of the Text Hot and Cool
    HotStartPosition = InStr(1, CurrentCellText, "Hot")
    CoolStartPosition = InStr(1, CurrentCellText, "Cool")

    ' Colour the Word Hot Red
    If HotStartPosition > 0 Then
        ActiveSheet.Cells(Row, Col).Characters(HotStartPosition, 3).Font.Color = RGB(255, 0, 0)
    End If

    ' Colour the Word Cool Blue
    If CoolStartPosition > 0 Then
        ActiveSheet.Cells(Row, Col).Characters(CoolStartPosition, 4).Font.Color = RGB(0, 0, 255)
    End If

Next Row
End Sub

2
超级用户的目的是建立知识库,而不是指向其他位置的答案的链接的集合。外部链接可能会中断,在这种情况下,您的答案将毫无价值。请在回答中包括必要的信息,并使用链接进行归因和进一步阅读。
fixer1234

这是一个很好的解决方案,我将对其进行部署。
htm11h

0

如果方括号内的文本包含“-”字符,则此宏会将包含方括号的所有选定范围的文本上色为红色,否则将上绿色。括号外的所有文本均保持不变。

Dim rngCell As Range
Dim CharCount As Integer
Dim BracketBegin As Integer
Dim BracketEnd As Integer
Dim strToColour As String

For Each rngCell In Selection
    CharCount = Len(rngCell)
    BracketBegin = InStr(1, rngCell, "(")
    BracketEnd = InStr(1, rngCell, ")")
    With rngCell.Characters(BracketBegin, CharCount - BracketEnd)
        ' Pull out string to check for +/-
        strToColour = rngCell.Characters(BracketBegin, CharCount - BracketEnd).Text
        ' If negative, colour red, otherwise green
        If InStr(strToColour, "-") Then
            .Font.Color = vbRed
        Else
            .Font.Color = vbGreen
        End If
  End With
Next rngCell
End Sub

[Example][1]


  [1]: https://i.stack.imgur.com/4lyN4.png

-1

在要突出显示的文本上插入行,使行高至需要突出显示的高度,将文本颜色更改为黄色(或选择的任何颜色),并根据喜好减少行的不透明度。


-1

如果您将excel表格网格(单元格宽度)划分为等于字符空间,那么一种可行的方法虽然不是MS EXCEL中的解决方案,但是您可以使用它作为选择的颜色:

示例表

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.