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