使用 VBA 正则表达式删除模式中的 space
Using VBA Regex To Remove a space within a pattern
我是 VBA 的新手,我正在处理来自化学仪器的数据,该仪器输出的值不是统一分隔的并且包含特殊字符。我正在尝试将这些值导入 excel 并解决了除一个问题之外的几乎所有问题。当我将这些值导入 excel 时,它们是逐行读取的。读入的每一行都包含在 A 列中它自己的单元格中。可以有 50 到大约 1000 列数据,以及上面的相关标识符和元数据。下面是前 5 行数据的 copy/paste。
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 光伏 296082 33844178 13.82% 2.700%
5 15.384 2453 2466 2500 VV 219908 14461812 5.91% 1.154%
我遇到的问题是,有时会有多个峰值组成一个值,并记录为 2 个字母 a space 和一到两个数字 (0-9),而峰值只有一个峰的类型只有两个字母。例如,请查看第 1 行中的“PV 4”。我正在尝试使用正则表达式循环遍历 A 列,从第 18 行开始到第 1000 行左右结束,以查找字母和相关数字,并删除间隙 space 以便他的单元格如下所示:
1 7.724 1190 1231 1292 PV4 724391 121434659 49.60% 9.688%
一旦处于那种形式,我就可以使用 space 分隔符来分隔单元格,而无需对具有多个峰类型的单元格进行移码。
这是我到目前为止编写的代码,但我不确定如何继续:
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
然后,对于替换字符串:
我是 VBA 的新手,我正在处理来自化学仪器的数据,该仪器输出的值不是统一分隔的并且包含特殊字符。我正在尝试将这些值导入 excel 并解决了除一个问题之外的几乎所有问题。当我将这些值导入 excel 时,它们是逐行读取的。读入的每一行都包含在 A 列中它自己的单元格中。可以有 50 到大约 1000 列数据,以及上面的相关标识符和元数据。下面是前 5 行数据的 copy/paste。
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 光伏 296082 33844178 13.82% 2.700%
5 15.384 2453 2466 2500 VV 219908 14461812 5.91% 1.154%
我遇到的问题是,有时会有多个峰值组成一个值,并记录为 2 个字母 a space 和一到两个数字 (0-9),而峰值只有一个峰的类型只有两个字母。例如,请查看第 1 行中的“PV 4”。我正在尝试使用正则表达式循环遍历 A 列,从第 18 行开始到第 1000 行左右结束,以查找字母和相关数字,并删除间隙 space 以便他的单元格如下所示:
1 7.724 1190 1231 1292 PV4 724391 121434659 49.60% 9.688%
一旦处于那种形式,我就可以使用 space 分隔符来分隔单元格,而无需对具有多个峰类型的单元格进行移码。
这是我到目前为止编写的代码,但我不确定如何继续:
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
然后,对于替换字符串: