Ste*_*ios 2 regex excel vba excel-vba
我试图扫描列"A"并将粗体字应用于以三个空格开头的所有单元格,然后继续使用任何其他字符.如果单元格字符串以四个或更多空格字符开头; 粗体字体不应该应用于它.
这就是我现在所拥有的; 这导致A列的所有单元格变为粗体.
Sub Macro1()
Dim regEx As New RegExp
NumRows = Range("A2", Range("A2").End(xlDown)).Rows.Count
regEx.Pattern = "(\s{3})(\S)"
regEx.Global = False
Sheets("1022_CPU").Activate
Range("A2").Activate
Application.ScreenUpdating = False
Do Until IsEmpty(ActiveCell)
If regEx.Test(ActiveCell.Value) Then
ActiveCell.Font.Bold = True
Else
ActiveCell.Font.Bold = False
End If
ActiveCell.Offset(1, 0).Activate
Loop
Range("A1").Select
Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)
编辑:示例数据:
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process()
org.apache.coyote.http11.Http11Processor.process()
org.apache.catalina.connector.CoyoteAdapter.service()
org.apache.catalina.core.StandardEngineValve.invoke()
Run Code Online (Sandbox Code Playgroud)
考虑到上面的数据,我想在第一行应用粗体字体("org."前面有三个空格,但在其他三行上没有.这就是为什么内置函数,如"LEFT"函数不会工作;因为它将在所有行上应用粗体字.
从三个空格开始,然后继续任何其他字符.
我认为这个正则表达式模式符合您的标准:
regEx.Pattern = "^\s{3}.*$"
Run Code Online (Sandbox Code Playgroud)
如果没有一些样本数据,很难判断A列中的所有单元格是否应该是粗体.
顺便说一句,你不需要那个If
块:
Run Code Online (Sandbox Code Playgroud)If regEx.Test(ActiveCell.Value) Then ActiveCell.Font.Bold = True Else ActiveCell.Font.Bold = False End If
regEx.Test(ActiveCell.Value)
是一个布尔值,因此是ActiveCell.Font.Bold
- 因此您可以将它分配给regEx.Test
调用的结果:
ActiveCell.Font.Bold = regEx.Test(ActiveCell.Value)
Run Code Online (Sandbox Code Playgroud)
这不会解决你的问题,但肯定看起来更干净;)
也就是说,我认为你不需要VBA,更不用说RegEx了.尝试条件格式:选择列A,然后使用公式确定格式:=LEFT(A1,3)=" "
,并使其变为粗体.
考虑到提供的样本数据,您似乎已经分析/措辞错误的问题陈述:
以三个空格开头,然后继续使用
任何其他字符非空白字符.
如果数据总是至少4个字符长,我不明白为什么条件格式方法不起作用:
=AND(LEFT(A1,3)=" ",MID(A1,4,1)<>" ")
Run Code Online (Sandbox Code Playgroud)
粗体行是前三个字符是空格而第四个字符不是空格.