Excel VBA正则表达式:如果以三个空格开头,则将单元格格式设置为粗体

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"函数不会工作;因为它将在所有行上应用粗体字.

Mat*_*don 5

从三个空格开始,然后继续任何其他字符.

我认为这个正则表达式模式符合您的标准:

regEx.Pattern = "^\s{3}.*$"
Run Code Online (Sandbox Code Playgroud)

如果没有一些样本数据,很难判断A列中的所有单元格是否应该是粗体.

顺便说一句,你不需要那个If块:

If regEx.Test(ActiveCell.Value) Then
    ActiveCell.Font.Bold = True
Else
    ActiveCell.Font.Bold = False
End If
Run Code Online (Sandbox Code Playgroud)

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)

粗体行是前三个字符是空格第四个字符不是空格.

  • @Stelios编辑; 我仍然使用条件格式化公式;) (2认同)