【发布时间】:2021-10-10 22:45:49
【问题描述】:
我对 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,以避免每次失败的替换尝试都必须重新导入文件。
任何帮助将不胜感激!
【问题讨论】:
-
想详细说明问题是可以理解的。连同详细的描述,如果您能用几句话概括实际问题,那就更好了。参考以下链接:stackoverflow.com/help/how-to-ask
标签: excel vba regexp-replace