首页 > 解决方案 > Excel中的自动部分文本着色(不是单元格)

问题描述

我是 excel 和 VBA 的新手,所以我来这里寻求您的帮助。
我正在寻找一个 VBA 代码来自动为每个列单元格的第一个字母着色。

这仅适用于 A 列,而不是 excel 中的所有列。列中只有单词。

例如,如果第一个字母是“a”,那么只有“a”会变成红色。
没有区分大小写的限制,每个 az 将被着色为 26 种可区分的颜色。
我尝试了几天来找到解决方案,但不幸的是我做不到。


示范:
在此处输入图像描述

提前致谢。

标签: excelvbacolors

解决方案


(至少)有几种方法可以做到这一点。下面的第一个选项为您选择颜色 - 您没有选择,但代码要短得多。第二个选项将要求您对每个字母所需的实际颜色进行硬编码——为了演示,我只写了 C。

在这两种情况下,您都将代码粘贴到相应工作表的工作表模块区域。让我知道你的情况如何。我采用这种方法是因为您说您希望它“自动”发生

选项一——更短但没有颜色选择

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo GetOut
Application.EnableEvents = False
Dim myFont As Integer, aCell As Range

For Each aCell In Target.Cells
    myFont = Asc(UCase(Left(aCell, 1))) - 62
    aCell.Characters(Start:=1, Length:=1).Font.ColorIndex = myFont
Next

Continue:
    Application.EnableEvents = True
    Exit Sub
GetOut:
    MsgBox Err.Description
    Resume Continue    
End Sub

选项二——你选择你想要的颜色,但必须添加

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo GetOut
Application.EnableEvents = False
Dim myLetter As String, aCell As Range

For Each aCell In Target.Cells    
    myLetter = UCase(Left(aCell, 1))

        Select Case myLetter
            Case Is = "A"
                aCell.Characters(Start:=1, Length:=1).Font.ColorIndex = 3 `<~~ change to your taste
            Case Is = "B"
                aCell.Characters(Start:=1, Length:=1).Font.ColorIndex = 4
            Case Is = "C"
                aCell.Characters(Start:=1, Length:=1).Font.ColorIndex = 5
    
            '*** etc etc etc Add the rest of the alphabet***
        End Select  
Next

Continue:
    Application.EnableEvents = True
    Exit Sub
GetOut:
    MsgBox Err.Description
    Resume Continue
End Sub 

推荐阅读