excel - 使用 VBA 正则表达式删除模式中的空格

标签 excel vba regexp-replace

我对 VBA 很陌生,我正在处理来自化学仪器的数据,该仪器输出的值没有统一分隔并包含特殊字符。我正在尝试将这些值导入到 excel 中,并且已经解决了几乎所有的问题,除了一个。当我将这些值导入 excel 时,它们会逐行读取。读入的每一行都包含在 A 列中自己的单元格中。可以有 50 到大约 1000 列数据,上面有相关的标识符和元数据。下面是前 5 行数据的复制/粘贴。
1 7.724 1190 1231 1292 PV 4 724391 121434659 49.60% 9.688%
2 9.272 1451 1481 1484 VB 3961552 186833117 76.32% 14.905%
3 10.968 1732 1754 1816 VV 2673526 111034313 45.36% 8.858%
4 15.249 2382 2445 2453 PV 296082 33844178 13.82% 2.700%
5 15.384 2453 2466 2500 VV 219908 14461812 5.91% 1.154%
我遇到的问题是,有时有多个峰组成一个值并记录为 2 个字母一个空格和一到两个数字(0-9),而只有一个峰的峰类型只有两个字母.例如,请查看第 1 行的“PV 4”。我正在尝试使用正则表达式遍历 A 列,从第 18 行开始到第 1000 行结束,以查找字母和相关数字,并删除间隙空间,使单元格看起来像这样:
1 7.724 1190 1231 1292 PV4 724391 121434659 49.60% 9.688%
一旦采用这种形式,我就可以使用空格分隔符来分隔单元格,而无需对具有多个峰类型的单元格进行帧移动。
这是我到目前为止编写的代码,但我不确定如何继续:

Sub PKTYRegexRemoveSpace()

Dim StrPattern As String: StrPattern = "[A,B,H,M,N,P,S,T,U,V,X,\+][A,B,H,M,N,P,S,T,U,V,X,\+]\s[0-9]{1,2}\s"
Dim StrInput As String
Dim MyRange As Range
Dim regEx As New RegExp
Dim Cell As Range



Set MyRange = ActiveSheet.Range("A22:A24")

For Each Cell In MyRange
    If StrPattern <> "" Then
        StrInput = Cell.Value

    With regEx
        .Pattern = StrPattern
        .Global = False
        .IgnoreCase = False
    End With
    
    If regEx.Test(StrInput) Then
        MsgBox (regEx.Replace(StrInput, *this is where I need help*))
    Else
        MsgBox ("Not matched")
    End If
    
End If
Next
End Sub
我在开发过程中使用了一个 msgbox,以避免每次失败的替换尝试都必须重新导入文件。
任何帮助将不胜感激!

最佳答案

我建议更改正则表达式模式以使用捕获组和单词边界标记

\b([A,B,H,M,N,P,S,T,U,V,X,\+][A,B,H,M,N,P,S,T,U,V,X,\+])\s([0-9]{1,2})\b
然后,对于替换字符串:
$1$2

关于excel - 使用 VBA 正则表达式删除模式中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68674812/

相关文章:

vba - for循环删除行不起作用,需要多次运行宏

vba - Excel 未正确关闭 - 用户窗体挂起?

ms-access - 使用 VBA 更新 Access 2007 中的表单记录集

regex - 删除换行符后跟多个选项卡正则表达式

oracle - SQL regexp - 替换两个数字之间的点

oracle - 将驼峰式句子拆分为单词

excel - 如何使用 INDEX/MATCH 找到正确的矩阵

excel - Access中的VBA调用函数

java - 在 getCellFormula 中获取结果

vba - 获取 "Out of Stack Space error",不确定为什么/在我的代码中存在递归