Excel 用大写字母改变单词的颜色
我有一张有很多单词的桌子,需要找到大写字母的单词并改变颜色。例如:Excel 用大写字母改变单词的颜色,excel,vba,Excel,Vba,我有一张有很多单词的桌子,需要找到大写字母的单词并改变颜色。例如: A1: event A2: Event A3: Happy day 在A2和A3中,应将单词的颜色更改为红色,但在A3中,仅更改为“快乐”单词。我试图用条件格式解决问题,但失败了。:)(可能是VBA?) 感谢您的帮助。参考-MicroSoft VBScript正则表达式X.X Sub test() Dim mCol As MatchCollection Dim Ws As Worksheet D
A1: event
A2: Event
A3: Happy day
- 在A2和A3中,应将单词的颜色更改为红色,但在A3中,仅更改为“快乐”单词。我试图用条件格式解决问题,但失败了。:)(可能是VBA?)
感谢您的帮助。参考-MicroSoft VBScript正则表达式X.X
Sub test()
Dim mCol As MatchCollection
Dim Ws As Worksheet
Dim rngDB As Range, rng As Range
Dim strPattern As String
Dim s As String
Dim i As Integer, Ln As Integer, c As Integer
Set Ws = ActiveSheet
Set rngDB = Ws.Range("a1", Ws.Range("a" & Rows.Count).End(xlUp))
strPattern = "[A-Z][a-z]{1,}"
For Each rng In rngDB
s = rng.Value
Set mCol = GetRegEx(s, strPattern)
If Not mCol Is Nothing Then
For i = 0 To mCol.Count - 1
c = mCol.Item(i).FirstIndex + 1
Ln = mCol.Item(i).Length
rng.Characters(c, Ln).Font.Color = vbRed
Next i
End If
Next
End Sub
Function GetRegEx(StrInput As String, strPattern As String) As Object
Dim RegEx As New RegExp
Set RegEx = New RegExp
With RegEx
.Global = True
.IgnoreCase = False
.MultiLine = True
.Pattern = strPattern
End With
If RegEx.test(StrInput) Then
Set GetRegEx = RegEx.Execute(StrInput)
End If
End Function
参考-MicroSoft VBScript正则表达式X.X
Sub test()
Dim mCol As MatchCollection
Dim Ws As Worksheet
Dim rngDB As Range, rng As Range
Dim strPattern As String
Dim s As String
Dim i As Integer, Ln As Integer, c As Integer
Set Ws = ActiveSheet
Set rngDB = Ws.Range("a1", Ws.Range("a" & Rows.Count).End(xlUp))
strPattern = "[A-Z][a-z]{1,}"
For Each rng In rngDB
s = rng.Value
Set mCol = GetRegEx(s, strPattern)
If Not mCol Is Nothing Then
For i = 0 To mCol.Count - 1
c = mCol.Item(i).FirstIndex + 1
Ln = mCol.Item(i).Length
rng.Characters(c, Ln).Font.Color = vbRed
Next i
End If
Next
End Sub
Function GetRegEx(StrInput As String, strPattern As String) As Object
Dim RegEx As New RegExp
Set RegEx = New RegExp
With RegEx
.Global = True
.IgnoreCase = False
.MultiLine = True
.Pattern = strPattern
End With
If RegEx.test(StrInput) Then
Set GetRegEx = RegEx.Execute(StrInput)
End If
End Function
我可能会跳过正则表达式,只检查第一个字符的ucase等价物(这只是一个猜测,但我认为它也会比使用正则表达式更快)。像这样:
Sub Capitalize()
Dim sheet As Worksheet
Dim cell, range As range
Dim results() As String
Dim pos As Integer
Set sheet = ActiveSheet
Set range = sheet.range("a1", sheet.range("a" & Rows.Count).End(xlUp))
For Each cell In range
pos = 1
results = Split(cell)
'if first char is upper then set color
For Each r In results
If Left(r, 1) = UCase(Left(r, 1)) Then
cell.Characters(pos, Len(r) + 1).Font.Color = vbRed
End If
pos = pos + Len(r) + 1
Next
Next
End Sub
我可能会跳过正则表达式,只检查第一个字符的ucase等价物(这只是一个猜测,但我认为它也会比使用正则表达式更快)。像这样:
Sub Capitalize()
Dim sheet As Worksheet
Dim cell, range As range
Dim results() As String
Dim pos As Integer
Set sheet = ActiveSheet
Set range = sheet.range("a1", sheet.range("a" & Rows.Count).End(xlUp))
For Each cell In range
pos = 1
results = Split(cell)
'if first char is upper then set color
For Each r In results
If Left(r, 1) = UCase(Left(r, 1)) Then
cell.Characters(pos, Len(r) + 1).Font.Color = vbRed
End If
pos = pos + Len(r) + 1
Next
Next
End Sub
编辑凯文的答案,如果你想检查单词中的任何字母(不仅仅是第一个字母)是否大写,如果为真,则用红色突出显示
Sub Capitalize()
Dim sheet As Worksheet
Dim cell As range, myrange As range
Dim results() As String
Dim pos As Integer
Set sheet = ActiveSheet
Set myrange = sheet.range("a1", sheet.range("a" & Rows.Count).End(xlUp))
For Each cell In myrange
pos = 1
results = Split(cell)
For Each r In results
If r <> LCase(r) Then
cell.Characters(pos, Len(r) + 1).Font.Color = vbRed
End If
pos = pos + Len(r) + 1
Next
Next
End Sub
Sub-Capitalize()
将工作表设置为工作表
暗淡单元格作为范围,myrange作为范围
Dim results()作为字符串
作为整数的Dim pos
设置工作表=活动工作表
设置myrange=sheet.range(“a1”,sheet.range(“a”和Rows.Count).End(xlUp))
对于myrange中的每个单元格
位置=1
结果=拆分(单元格)
对于结果中的每个r
如果r是LCase(r),那么
cell.Characters(pos,Len(r)+1)。Font.Color=vbRed
如果结束
位置=位置+透镜(右)+1
下一个
下一个
端接头
如果你想检查单词中的任何字母(不仅仅是第一个字母)是否大写,请编辑Kevin的答案,如果为真,请将其高亮显示为红色
Sub Capitalize()
Dim sheet As Worksheet
Dim cell As range, myrange As range
Dim results() As String
Dim pos As Integer
Set sheet = ActiveSheet
Set myrange = sheet.range("a1", sheet.range("a" & Rows.Count).End(xlUp))
For Each cell In myrange
pos = 1
results = Split(cell)
For Each r In results
If r <> LCase(r) Then
cell.Characters(pos, Len(r) + 1).Font.Color = vbRed
End If
pos = pos + Len(r) + 1
Next
Next
End Sub
Sub-Capitalize()
将工作表设置为工作表
暗淡单元格作为范围,myrange作为范围
Dim results()作为字符串
作为整数的Dim pos
设置工作表=活动工作表
设置myrange=sheet.range(“a1”,sheet.range(“a”和Rows.Count).End(xlUp))
对于myrange中的每个单元格
位置=1
结果=拆分(单元格)
对于结果中的每个r
如果r是LCase(r),那么
cell.Characters(pos,Len(r)+1)。Font.Color=vbRed
如果结束
位置=位置+透镜(右)+1
下一个
下一个
端接头
您需要VBA,只有当单元格的内容是字符串而不是公式的结果时,您才能使用它。您可以使用基于公式的规则(例如,
=not(EXACT(A2,LOWER(A2)))来使用CF(对于整个单元格)。
您需要VBA,只有当单元格的内容是字符串时,您才能使用它,而不是公式的结果。您可以使用基于公式的规则使用CF(对于整个单元格),例如(eg)=not(精确的(A2,较低的(A2))
非常感谢,它工作起来很有魅力。:)谢谢,我不确定你是否需要红色,如果任何字母大写-如@Naresh answer这两种解决方案都适合我的任务。我现在需要找到大写的单词,但也许@Naresh的版本将来会有用。:)非常感谢,它就像一个符咒谢谢,我不确定你是否需要红色,如果任何字母大写-如@Naresh answer这两种解决方案都适合我的任务。我现在需要找到大写的单词,但也许@Naresh的版本将来会有用。:)非常感谢,它工作得更加完美。:)非常感谢,它工作得更加完美。:)对不起,它坏了。它以“编译错误:未定义用户定义类型”消息停止。很抱歉,它无法工作。它以“编译错误:未定义用户定义类型”消息停止。