gpt4 book ai didi

regex - Excel VBA 正则表达式删除前导数字、句点和空格?

转载 作者:行者123 更新时间:2023-12-04 21:40:44 26 4
gpt4 key购买 nike

我有一张工作表,我使用 Excel VBA 宏在单击按钮时使用相关信息自动填充所有工作表页眉(不是列标题)。此宏使用 wSheet.Name 填充标题标题。但是,wSheet.Name 通常包含我不想出现在标题中的前导数字、句点和空格。

请注意以下示例工作表名称:

Cover Page
1a. Test Page
1b. Sample Page
2. Another Test Page
3. Yet Another Test Page
4. Almost the Last Example Page
998. Last Example Page

我想使用正则表达式删除这些前导数字、句点和空格,但我不确定如何在 Excel 中使用 VBA 对其进行编码。我希望它尽可能灵活。这是我希望工作表名称显示方式的示例:
Cover Page
Test Page
Sample Page
Another Test Page
Yet Another Test Page
Almost the Last Example Page
Last Example Page

这是我现有的填充标题的代码:
Sub FillHeaders()
'
' Auto_Fill_Project_Name Macro
'
For Each wSheet In ActiveWorkbook.Worksheets
If wSheet.Name <> "Cover Page" Then
wSheet.PageSetup.CenterHeader = _
"&16&KFF0000" & ActiveSheet.Range("J1") & "&10&K000000 &16" & " " & _
wSheet.Name & Chr(13) & "&10 &11 Revision Date: "
End If
Next wSheet
'
End Sub

我该如何修改它以实现我的目标?

谢谢!

编辑——我采取了以下方法:
Function remleaddig(str As String)
Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = "^\S*\."
str = regEx.Replace(str, "")
remleaddig = Trim(str)
End Function

最佳答案

更新: -- 添加了 UDF

Function StripChars(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "^.+\.\s+"
.ignorecase = True
StripChars = .Replace(strIn, vbNullString)
End With
End Function

首发`

我会结合 使用变体数组来减少代码运行时间。下面的代码使用
  • 后期绑定(bind)设置regexp
  • ActiveSheet 的 A 列中的值被读入一个变量数组X (请注意,该代码将处理二维范围,即您可以使用 X = Range([a1], Cells(Rows.Count, "B").End(xlUp)).Value2 处理 A 列和 B 列
  • regexp去除不需要的字符 - 如果它出现在您要保留的文本之前,它将处理多个空格
  • 清理后的文本从 C1 开始转储到事件工作表中。 .更改此行以移动转储 - 您可以使其转储回从 A1 开始的原始值. [c1].Resize(UBound(X, 1), UBound(X, 2)).Value2 = X

  • enter image description here

    代码
    Sub QuickUpdate()
    Dim X()
    Dim objRegex As Object
    Dim lngRow As Long
    Dim lngCol As Long

    X = Range([a1], Cells(Rows.Count, "A").End(xlUp)).Value2
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
    .Pattern = "^.+\.\s+"
    .ignorecase = True
    For lngRow = 1 To UBound(X, 1)
    For lngCol = 1 To UBound(X, 2)
    X(lngRow, lngCol) = .Replace(X(lngRow, lngCol), vbNullString)
    Next lngCol
    Next lngRow
    End With

    [c1].Resize(UBound(X, 1), UBound(X, 2)).Value2 = X

    End Sub

    关于regex - Excel VBA 正则表达式删除前导数字、句点和空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234031/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com