【问题标题】:Bold text using RegExp Regular Expressions使用 RegExp 正则表达式的粗体文本
【发布时间】:2021-01-28 00:00:49
【问题描述】:

我正在尝试使用 regEx 来查找日期并在一个范围内的多个单元格的文本中加粗它们,但似乎我没有使用正确的表达式来使用 regEx 加粗文本。下面的代码在除粗体功能之外工作。我需要正则表达式,因为我需要以 yyyy-mm-dd 格式加粗所有日期。我知道下面的正则表达式不正确,但我要在处理下一部分之前让粗体功能正常工作。

我检查了所有其他问题,他们都避免使用正则表达式进行粗体显示。

Sub Bold_a_date2()

Dim ws As Worksheets
Dim item As Variant
Dim arr As Variant
arr = Worksheets("Formatted").Range("M1:M1000")

Dim regEx As New RegExp
regEx.Global = True
regEx.Pattern = "202[0-9]"

Dim text As Variant
Dim mc As MatchCollection, row As Long
row = 1

  For Each text In arr
    
    If regEx.test(text) = True Then
    Set mc = regEx.Execute(text)
    
    Selection.Font.Bold = True
    Debug.Print text
        
    End If
    
row = row + 1

Next text


End Sub

【问题讨论】:

  • RegEx 查找文本。文本位于单元格中。该单元格具有Font 属性,该属性具有Bold 属性。那么,变量mc 中有什么?如果可以从该集合中提取单元格地址,则可以使用MyCell.Font.Bold = True 之类的代码来更改字体粗细。就目前情况而言,没有理由相信 mc 直接持有一个范围对象,因为您分配给它的是文本。
  • 日期是单独在单元格中,还是包含在其他文本中?你想加粗整个单元格文本,还是只加粗日期部分?

标签: excel regex vba bold


【解决方案1】:

如果您的数据是日期值,结果会很奇怪。如果数据是文本格式,可以如下操作。

Sub Bold_a_date2()

Dim ws As Worksheets
Dim item As Variant
Dim arr As Range
Dim text As Range

Set arr = Worksheets("Formatted").Range("M1:M1000")
'Set arr = Worksheets("Formatted").Range("i1:i1000")

Dim regEx As New RegExp
regEx.Global = True
regEx.Pattern = "202[0-9]"


Dim mc As MatchCollection, row As Long
Dim m As Match
Dim s As Integer, l As Integer
    For Each text In arr
    
        If regEx.test(text) = True Then
            Set mc = regEx.Execute(text)
            For Each m In mc
                s = m.FirstIndex
                l = m.Length
                text.Characters(s + 1, l).Font.Bold = True
            Next m
            Debug.Print text
        End If
    Next text
End Sub

字符串与日期值

多案例

【讨论】:

  • 非常感谢,日期存储为文本,所以效果很好
  • 我唯一的问题是,你将如何改变它以在一个单元格中获取多个日期?
  • 目前它只在每个单元格中拾取模式的第一个实例并将其加粗,然后它正在移动到下一个单元格,而不是在前一个单元格中加粗模式的所有实例。
  • @SamOram,我添加了另一张图片。就我而言,它工作正常。很高兴知道您的具体数据。
  • @SamOram,您的常规模式是 202[0-9],因此不包括 2019。常规模式是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2012-11-13
相关资源
最近更新 更多