Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改excel单元格中文本的颜色_Excel_Vba_Conditional Formatting - Fatal编程技术网

更改excel单元格中文本的颜色

更改excel单元格中文本的颜色,excel,vba,conditional-formatting,Excel,Vba,Conditional Formatting,我想更改MS Excel中单元格中文本的颜色,就像条件格式一样。我在一个单元格中有不同的文本,例如WUG-FGT或INZL-DRE。我想格式化我的工作集中的所有单元格,一个定义的文本(如WUG-FGT)显示为红色,另一个文本(如ZL-DRE)显示为绿色,但文本位于同一单元格中。使用sandard条件格式,我只对背景进行着色 一个类似的问题是: 但不同的是,我实际上不从事编程工作。这意味着我需要一个更简单或更容易的解决方案来在我的excel文件中实现这一点 这可能吗?使用VBA的解决方案也是可能的

我想更改MS Excel中单元格中文本的颜色,就像条件格式一样。我在一个单元格中有不同的文本,例如WUG-FGT或INZL-DRE。我想格式化我的工作集中的所有单元格,一个定义的文本(如WUG-FGT)显示为红色,另一个文本(如ZL-DRE)显示为绿色,但文本位于同一单元格中。使用sandard条件格式,我只对背景进行着色

一个类似的问题是:

但不同的是,我实际上不从事编程工作。这意味着我需要一个更简单或更容易的解决方案来在我的excel文件中实现这一点


这可能吗?使用VBA的解决方案也是可能的,我知道如何实现这些解决方案。

这里是如何实现所需结果的示例:

Sub test()
    Dim cl As Range
    Dim sVar1$, sVar2$, pos%
    sVar1 = "WUG-FGT"
    sVar2 = "INZL-DRE"
    For Each cl In Selection
        If cl.Value2 Like "*" & sVar1 & "*" Then
            pos = InStr(1, cl.Value2, sVar1, vbTextCompare)
            cl.Characters(pos, Len(sVar1)).Font.Color = vbRed
        End If
        If cl.Value2 Like "*" & sVar2 & "*" Then
            pos = InStr(1, cl.Value2, sVar2, vbTextCompare)
            cl.Characters(pos, Len(sVar2)).Font.Color = vbGreen
        End If
    Next cl
End Sub
试验

更新

是否可以计算检测到该单词的频率。要么将总数写入定义的单元格,要么将括号中的计数数与控制变量一起添加到单词后面,这样做会更好吗?在你的例子中:A2:WUG-FGT1,A4:WUG-FGT2,A5:WUG-FGT3

是的,但您应该在着色之前更新单元格,否则整个单元格字体将由第一个字符的颜色着色,例如单元格同时包含关键字,第一个为红色,第二个为绿色,更新后整个单元格字体将为红色。见更新的代码和测试波纹管:

Sub test_upd()
    Dim cl As Range, sVar1$, sVar2$, pos%, cnt1%, cnt2%
    Dim bVar1 As Boolean, bVar2 As Boolean

    sVar1 = "WUG-FGT": cnt1 = 0
    sVar2 = "INZL-DRE": cnt2 = 0

    For Each cl In Selection
        'string value should be updated before colorize
        If cl.Value2 Like "*" & sVar1 & "*" Then
            bVar1 = True
            cnt1 = cnt1 + 1
            cl.Value2 = Replace(cl.Value, sVar1, sVar1 & "(" & cnt1 & ")")
        End If

        If cl.Value2 Like "*" & sVar2 & "*" Then
            bVar2 = True
            cnt2 = cnt2 + 1
            cl.Value2 = Replace(cl.Value, sVar2, sVar2 & "(" & cnt2 & ")")
        End If

        pos = InStr(1, cl.Value2, sVar1, vbTextCompare)
        If bVar1 Then cl.Characters(pos, Len(sVar1)).Font.Color = vbRed
        pos = InStr(1, cl.Value2, sVar2, vbTextCompare)
        If bVar2 Then cl.Characters(pos, Len(sVar2)).Font.Color = vbGreen

        bVar1 = False: bVar2 = False
    Next cl
End Sub
试验


以下是您如何实现所需结果的示例:

Sub test()
    Dim cl As Range
    Dim sVar1$, sVar2$, pos%
    sVar1 = "WUG-FGT"
    sVar2 = "INZL-DRE"
    For Each cl In Selection
        If cl.Value2 Like "*" & sVar1 & "*" Then
            pos = InStr(1, cl.Value2, sVar1, vbTextCompare)
            cl.Characters(pos, Len(sVar1)).Font.Color = vbRed
        End If
        If cl.Value2 Like "*" & sVar2 & "*" Then
            pos = InStr(1, cl.Value2, sVar2, vbTextCompare)
            cl.Characters(pos, Len(sVar2)).Font.Color = vbGreen
        End If
    Next cl
End Sub
试验

更新

是否可以计算检测到该单词的频率。要么将总数写入定义的单元格,要么将括号中的计数数与控制变量一起添加到单词后面,这样做会更好吗?在你的例子中:A2:WUG-FGT1,A4:WUG-FGT2,A5:WUG-FGT3

是的,但您应该在着色之前更新单元格,否则整个单元格字体将由第一个字符的颜色着色,例如单元格同时包含关键字,第一个为红色,第二个为绿色,更新后整个单元格字体将为红色。见更新的代码和测试波纹管:

Sub test_upd()
    Dim cl As Range, sVar1$, sVar2$, pos%, cnt1%, cnt2%
    Dim bVar1 As Boolean, bVar2 As Boolean

    sVar1 = "WUG-FGT": cnt1 = 0
    sVar2 = "INZL-DRE": cnt2 = 0

    For Each cl In Selection
        'string value should be updated before colorize
        If cl.Value2 Like "*" & sVar1 & "*" Then
            bVar1 = True
            cnt1 = cnt1 + 1
            cl.Value2 = Replace(cl.Value, sVar1, sVar1 & "(" & cnt1 & ")")
        End If

        If cl.Value2 Like "*" & sVar2 & "*" Then
            bVar2 = True
            cnt2 = cnt2 + 1
            cl.Value2 = Replace(cl.Value, sVar2, sVar2 & "(" & cnt2 & ")")
        End If

        pos = InStr(1, cl.Value2, sVar1, vbTextCompare)
        If bVar1 Then cl.Characters(pos, Len(sVar1)).Font.Color = vbRed
        pos = InStr(1, cl.Value2, sVar2, vbTextCompare)
        If bVar2 Then cl.Characters(pos, Len(sVar2)).Font.Color = vbGreen

        bVar1 = False: bVar2 = False
    Next cl
End Sub
试验

尝试:

尝试:

更改单元格中部分值的格式 链接 形象 代码 用法 如果将Change1Reset0参数设置为1,则以下代码将在不区分大小写的搜索中更改所需字符串每次出现时的格式

'*******************************************************************************
Sub ChangeStringFormat(Optional Change1Reset0 As Long = 0)

    Const cSheet As Variant = "Sheet1"
    Const cStringList As String = "WUG-FGT,INZL-DRE"
    Const cColorIndexList As String = "3,10"   ' 3-Red, 10-Green
    ' Note: More strings can be added to cStringList but then there have to be
    ' added more ColorIndex values to cColorIndexList i.e. the number of
    ' elements in cStringList has to be equal to the number of elements
    ' in cColorIndexList.

    Dim rng As Range      ' Range
    Dim vntS As Variant   ' String Array
    Dim vntC As Variant   ' Color IndexArray
    Dim i As Long         ' Array Elements Counter

    Set rng = RUR(ThisWorkbook.Worksheets(cSheet))

    If Not rng Is Nothing Then
        vntS = Split(cStringList, ",")
        If Change1Reset0 = 1 Then
            vntC = Split(cColorIndexList, ",")
            ' Loop through elements of String (ColorIndex) Array
            For i = 0 To UBound(vntS)
                ' Change Font Format.
                CFF rng, CStr(Trim(vntS(i))), CLng(Trim(vntC(i)))
            Next
          Else
            For i = 0 To UBound(vntS)
                ' Reset Font Format.
                CFF rng, CStr(Trim(vntS(i)))
            Next
        End If
    End If

End Sub
'*******************************************************************************
前面的代码应全部位于标准模块中,例如模块1

命令按钮 以下代码应位于创建命令按钮的工作表窗口中,例如Sheet1

更改单元格中部分值的格式 链接 形象 代码 用法 如果将Change1Reset0参数设置为1,则以下代码将在不区分大小写的搜索中更改所需字符串每次出现时的格式

'*******************************************************************************
Sub ChangeStringFormat(Optional Change1Reset0 As Long = 0)

    Const cSheet As Variant = "Sheet1"
    Const cStringList As String = "WUG-FGT,INZL-DRE"
    Const cColorIndexList As String = "3,10"   ' 3-Red, 10-Green
    ' Note: More strings can be added to cStringList but then there have to be
    ' added more ColorIndex values to cColorIndexList i.e. the number of
    ' elements in cStringList has to be equal to the number of elements
    ' in cColorIndexList.

    Dim rng As Range      ' Range
    Dim vntS As Variant   ' String Array
    Dim vntC As Variant   ' Color IndexArray
    Dim i As Long         ' Array Elements Counter

    Set rng = RUR(ThisWorkbook.Worksheets(cSheet))

    If Not rng Is Nothing Then
        vntS = Split(cStringList, ",")
        If Change1Reset0 = 1 Then
            vntC = Split(cColorIndexList, ",")
            ' Loop through elements of String (ColorIndex) Array
            For i = 0 To UBound(vntS)
                ' Change Font Format.
                CFF rng, CStr(Trim(vntS(i))), CLng(Trim(vntC(i)))
            Next
          Else
            For i = 0 To UBound(vntS)
                ' Reset Font Format.
                CFF rng, CStr(Trim(vntS(i)))
            Next
        End If
    End If

End Sub
'*******************************************************************************
前面的代码应全部位于标准模块中,例如模块1

命令按钮 以下代码应位于创建命令按钮的工作表窗口中,例如Sheet1


但是文本在同一个单元格中,你的确切意思是什么?单元格中是否有多个值,例如WUG-FGT、INZL-DRE?如果它们位于不同的单元格中,则标准条件格式完全能够更改字体颜色。否则您需要VBA。可能重复的是,一个单元格中有多个值,如您所述,例如WUG-FGT,INZL-DRE在一个单元格中。好的,使用VBA的解决方案意味着更多的努力。那么,是否有可能使用或实施上述链接中的解决方案?是的,完全有可能实施这样的解决方案。请看一看。可能与您的意思完全相同,但文本位于同一单元格中?单元格中是否有多个值,例如WUG-FGT、INZL-DRE?如果它们位于不同的单元格中,则标准条件格式完全能够更改字体颜色。否则您需要VBA。可能重复的是,一个单元格中有多个值,如您所述,例如WUG-FGT,INZL-DRE在一个单元格中。好的,使用VBA的解决方案意味着更多的努力。那么,是否有可能使用或实施上述链接中的解决方案?是的,完全有可能实施这样的解决方案。请看一看。可能重复感谢这个非常好和简单的解决方案!它非常完美,易于处理,并且很容易添加更多规则!非常感谢你的努力!进一步的问题:有没有可能计算出这个词被检测到的频率。要么将总数写入定义的单元格,要么将括号中的计数数与控制变量一起添加到单词后面,这样做会更好吗?在你的例子中:A2:WUG-FGT1,A4:WUG-FGT2,A5:WUG-FGT3哇,精彩的演示!不过我有个问题。$signs和%signs在变量声明中实现了什么?@vbasic208它只是一个简写变量声明,%is Integer,&is Long,$is String,@is Currency!是单人的,是双人的。谢谢这个非常好的简单的解决方案!它是
非常完美,易于处理,并且很容易添加更多规则!非常感谢你的努力!进一步的问题:有没有可能计算出这个词被检测到的频率。要么将总数写入定义的单元格,要么将括号中的计数数与控制变量一起添加到单词后面,这样做会更好吗?在你的例子中:A2:WUG-FGT1,A4:WUG-FGT2,A5:WUG-FGT3哇,精彩的演示!不过我有个问题。$signs和%signs在变量声明中实现了什么?@vbasic208它只是一个简写变量声明,%is Integer,&is Long,$is String,@is Currency!是单人的,是双人的。谢谢你的解决方案,也很好地解决了我的问题!谢谢你的解决方案,它也很好的工作,也是一个很好的解决我的问题,以及!谢谢你能解决我的问题。我尝试了你所有的建议,效果也很好!谢谢你能解决我的问题。我尝试了你所有的建议,效果也很好!
Option Explicit

Private Sub cmdChange_Click()
    ChangeStringFormat 1
End Sub

Private Sub cmdReset_Click()
    ChangeStringFormat ' or ChangeStringFormat 0
End Sub