自动格式化单元格不同颜色的部分

时间:2018-09-24 21:12:45

标签: excel vba

我正试图为我的孩子们整理一个基于Excel的,带有颜色编码的日历。当前的日历如下所示:

enter image description here

最终,我希望这样做,以便根据每个任务的标签(即[S]或[B]),标签字体将自动像这样着色:

enter image description here

通常,我只会为此使用条件格式,但是设​​置此日历的目的是使每个日期都是一个单元格。条件格式将应用于整个单元,而不仅仅是更改标签的颜色。是否可以对同一单元格中文本的不同部分应用多个条件字体更改操作?

2 个答案:

答案 0 :(得分:1)

最好的方法是定义一个函数,该函数获取要进行颜色编码的文本以及颜色,当然还要获取要应用颜色编码的工作表。您只需要简单地运行例程print(df) 0 title1 title2 title3 title4 title5 2 0 A1 A2 A3 A4 A5 1 B1 B2 B3 B4 B5 2 C1 C2 C3 C4 C5 3 D1 D2 D3 D4 D5 ,其余的将得到处理。您可以编辑该功能,以使多个文本着色,但是保持简单为佳。您需要使用自己喜欢的颜色为Main运行一次Main,然后为[S]运行一次。另外,您可以为数字值上色,但是那会比较麻烦。我不确定您对快照中的单元格进行了多么精确的格式化,但是看来日期是第一个字符,因此您只需要找出以空格或换行分隔的第一个文本,然后即可找到文本的长度(日期)并为其着色。

[B]

答案 1 :(得分:0)

您将需要使用字体的ColorIndex属性。参见Microsoft Docs Article

以下是您如何执行此操作的示例。

Public Sub ColorSubTest()
    'A range to work with
    Dim rng As Range
    'Set range to A1
    Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1")

    'Reset ColorIndex to black
    rng.Font.ColorIndex = 1
    'Set the text you want for the task
    rng.Value2 = "[S] Wash Dishes"
    'Choose the color index you want 3 is red
    rng.Characters(Start:=1, Length:=3).Font.ColorIndex = 3

    'Next row
    Set rng = rng.Offset(1, 0)
    'Reset ColorIndex to black
    rng.Font.ColorIndex = 1
    'Set the text you want for the task
    rng.Value2 = "[B] Fold Clothes"
    'Choose the color index you want 5 is blue
    rng.Characters(Start:=1, Length:=3).Font.ColorIndex = 5

End Sub