单元格中的文本格式

单元格中的文本格式

Excel 可轻松将单元格区域的背景颜色格式化为颜色范围/色谱。我选择“条件格式”→“新规则”→“根据值格式化所有单元格”和格式样式:“2 色标”。这会将背景(填充)单元格的颜色,基于其值。例如:

    编辑格式规则窗口:低颜色 = 红色,高颜色 = 蓝色

将把包含范围内最低值的单元格的填充颜色设置为红色,将最高值设置为蓝色,将中间值设置为紫红色、粉红色、紫罗兰色和紫色:

样本数据(范围从 1 到 10)按描述格式化

我怎样才能改变文本使用相同条件的颜色?

答案1

我想建议您使用简单的 VBA 代码来对指定范围内的文本数据进行条件格式化。

这是最短的方法,现在你要做的是,在数据范围中选择出现次数最多的文本,然后尽可能对其进行排序。

Private Sub CommandButton1_Click()

lRow = Range("A" & Rows.Count).End(xlUp).Row
Set Mrng = Range("A120:A" & lRow)

For Each Cell In Mrng

    Select Case Cell.Value
        Case "Yes"
            cell_colour = 9
        Case "No"
            cell_colour = 5
        Case Else
            cell_colour = 3
        End Select

    Cell.Font.ColorIndex = cell_colour
Next

End Sub

注意: 根据需要应用颜色索引代码并改变数据范围。

希望这对你有帮助。

笔记, 我在发布此代码之前已经测试过它。如果有人有不同意见,请在投反对票之前写下理由。

答案2

似乎没有从 GUI 执行此操作的本机方法。但是,在 VBA 中这并不难。此例程将根据单元格中的值与 和 的比较情况,将范围内每个单元格的前景色/文本颜色设置为在颜色和 颜色之间Target线性插值的颜色:LoHiLo_ValHi_Val

Sub Colorize(Target As Range, Lo_Val, Hi_Val, Lo_R, Lo_G, Lo_B, Hi_R, Hi_G, Hi_B)
    Dim R, G, B As Long

    delta_val = Hi_Val - Lo_Val
    If (delta_val <= 0) Then
        MsgBox "Lo_Val and Hi_Val must not be the same, or in the wrong order."
        Exit Sub
    End If
    If (Application.Min(Lo_R, Lo_G, Lo_B, Hi_R, Hi_G, Hi_B) < 0 _
                Or Application.Max(Lo_R, Lo_G, Lo_B, Hi_R, Hi_G, Hi_B) > 255) Then
        MsgBox "Invalid color(s)."
        Exit Sub
    End If
    Delta_R = Hi_R - Lo_R
    Delta_G = Hi_G - Lo_G
    Delta_B = Hi_B - Lo_B
    For Each c In Target
        If (c < Lo_Val Or c > Hi_Val) Then
            c.Font.Color = 0        ' Black
            ' Alternatively, set values < Lo_Val to the Lo color
            ' and set values > Hi_Val to the Hi color.
            ' Or do nothing, leaving them with whatever color they have now.
        Else
            Diff_Val = c - Lo_Val
            ' We probably could just compute (c - Lo_Val) / delta_val
            ' at this point, but I'm not sure how well that would work
            ' with the rounding.
            R = Round(Lo_R + Delta_R * Diff_Val / delta_val)
            G = Round(Lo_G + Delta_G * Diff_Val / delta_val)
            B = Round(Lo_B + Delta_B * Diff_Val / delta_val)
            ' Use 256& to get a constant with value 256 and type Long.
            c.Font.Color = R + 256& * G + 256& * 256& * B
        End If
    Next c
End Sub

如何在 MS Office 中添加 VBA? 有关如何输入和使用它的一般信息。

为了提高灵活性,我将其编写为带参数的例程。据我所知,从普通的 Excel UI 调用带参数的 VBA 例程是不可能的。您可能需要定义一个短小的宏(带有参数)使用您想要的参数调用上述方法;例如,

Sub Macro1()
'
' Macro1 Macro
'
    Call Colorize(Range("A1:J1"), 1, 10, 255, 0, 0, 0, 0, 255)
End Sub

这会将低数字(1 及以上)设置为红色阴影,将高数字(10 及以下)设置为蓝色阴影。例如,使用问题中的数字,这给我们

数字,采用不同颜色格式化

(我手动增加了字体大小以使颜色更加清晰)。

然后,您可以从“开发人员”→“代码”→“宏”调用它,或将其绑定到按钮。或者,如果您希望每次更改值时都自动进行格式化,则可以使用例程Worksheet_Change来调用Colorize。并且,为了使其行为更像条件格式,您可以对其进行编码以设置Lo_ValHi_Val 当前范围内的最小值和最大值。

笔记:

  • Dim R, G, B As Long行代码似乎没有必要。但是当我使用 plain256而不是 时,会出现溢出错误256&
  • 人眼和大脑如何感知颜色的科学原理非常复杂。RGB 值的线性插值可能不是生成颜色分级范围/光谱的最佳算法。

答案3

是的,这是完全有可能的,请按照以下步骤操作。

  1. 选择数据范围。
  2. 单击“条件格式”。
  3. 打擊新規則。
  4. 查找并选择选项“仅格式化包含以下内容的单元格”
  5. 在编辑规则描述中。
  6. 设置“仅格式化单元格”,单元格值和等于然后输入文本,例如东,然后点击格式化按钮并选择适当的文本颜色。

笔记,您需要对相同数据范围的其他文本和颜色重复步骤 1 至 6。

如果可能的话,对数据范围进行排序以便文本按组排列,然后选择并应用条件格式。

希望这对你有帮助。

相关内容