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

我正在尝试扫描列“A”,并将粗体字应用于所有以三个空格开头的单元格,然后继续使用其他任何字符。 如果一个单元格string以四个空格字符开头或更多; 粗体字体不应该应用于它。

这是我到现在为止, 这导致列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 

编辑:示例数据:

  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() 

考虑到上面的数据,我想在第一行应用粗体字(“org。”前面有三个空格,而另外三行没有,这就是为什么像“LEFT”工作;因为它将在所有行上应用粗体字体。

如果你想避免使用RegEx,试试这个:(修剪的单元格删除所有的前导和尾随空格,如果3个空格的长度+3与原始长度相匹配,则将单元格变为粗体)

 Sub Macro1() Dim LastRow as Long Dim CurRow As Long Sheets("1022_CPU").Activate LastRow = Range("A" & Rows.Count).End(xlUp).Row Application.ScreenUpdating = False For CurRow = 2 to LastRow If Len(Cells(CurRow, 1).Value) = Len(Trim(Cells(CurRow, 1).Value))+3 Cells(CurRow, 1).Font.Bold = True Else Cells(CurRow, 1).Font.Bold = False End If Next CurRow Range("A1").Select Application.ScreenUpdating = True End Sub 

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

我认为这个正则expression式将符合你的标准:

 regEx.Pattern = "^\s{3}.*$" 

A列中的所有单元格是否应该是粗体都很难说清楚,没有一点样本数据。

顺便说一下,你不需要If块:

 If regEx.Test(ActiveCell.Value) Then ActiveCell.Font.Bold = True Else ActiveCell.Font.Bold = False End If 

regEx.Test(ActiveCell.Value)是一个布尔值, regEx.Test(ActiveCell.Value)也是如此 – 因此您可以将其分配给regEx.Test调用的结果:

 ActiveCell.Font.Bold = regEx.Test(ActiveCell.Value) 

这不会解决你的问题,但肯定看起来更清洁;)


这就是说,我不认为你需要VBA,甚至更less的RegEx来做到这一点。 尝试使用条件格式:select列A,然后使用公式确定格式=LEFT(A1,3)=" " ,并将其设置为粗体。


考虑到提供的样本数据,看起来你已经分析了/问题陈述错误:

它以三个空格开始,然后继续与其他任何字符 非空白字符。

如果数据总是至less有4个字符长,我不明白为什么条件格式方法不起作用:

 =AND(LEFT(A1,3)=" ",MID(A1,4,1)<>" ") 

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