使用我已经尝试过的代码编辑问题 - 对于不发布它而道歉,但因为它不起作用我认为这只会使问题更加清晰。
我已经查看了类似问题的答案,但没有设法将脚本编辑为我需要的内容,因为我认为我的任务有点具体。
我有一个包含这种字符串的单元格:
"BAA 100 UVT 2645-2733 AAA DAYUQK/FOUR-FIVE 540K/340K CALOWB MIWOH FDX"
使用VBA excel,我想从上面的字符串中删除“/ 340k”,或者更确切地说,如果“K /”之前的字符是数字,则删除“K /”之后和下一个空格之前的所有字符(即“DAYUQK / FOUR”中的第一个“K /”应该被忽略)。
我已尝试编辑以下在线发现的脚本:
Public Function DELBRC(ByVal str As String) As String
While InStr(str, "K/") > 0 And InStr(str, " ") > InStr(str, "/")
str = Left(str, InStr(str, "K/") - 1) & Mid(str, InStr(str, " "))
Wend
DELBRC = Trim(str)
End Function
我认为它不起作用,因为在“K /”之前我的字符串中已经有空格。我没有尝试使用条件IsNumeric,因为我似乎无法识别str变量中“K /”之前的字符。
我也尝试使用基于正则表达式的解决方案,但它没有用,我没有保留我尝试过的所有不同脚本。
如果有人可以帮助我,我将不胜感激。请放心,我已经浏览了网页并在半天前尝试了许多来自类似问题的脚本,然后在这里提出问题。
谢谢。
Noemie
答案 0 :(得分:1)
这个循环通过“单词”尝试将它们分开到K/
。然后检查该分割的第一个值是否为数字,并且分割结果是两个字符串。如果是这样,它将用""
替换生成的第二个字符串并返回结果。
Public Function delbrc(str As String) As String
Dim strarr() As String
strarr = Split(Application.Trim(str))
Dim str2 As Variant
For Each str2 In strarr
Dim str2arr() As String
str2arr = Split(str2, "K/")
If UBound(str2arr) > 0 And IsNumeric(str2arr(0)) Then
delbrc = Replace(str, "/" & str2arr(1), "")
Exit Function
End If
delbrc = str
Next str2
End Function
答案 1 :(得分:0)
使用正则表达式可以很容易地完成。
这是必需的正则表达式和解释。
(适用\ d + K)/ \ S + 强>
(\d+K)/\S+
选项:区分大小写; ^ $不匹配的换行
(\d+K)
/
\S+
$ 1
创建以下是一些代码,显示了将其实现为UDF的一种方法
在下面的例子中,我使用了早期绑定。如果您不想设置引用,可以将其更改为后期绑定。
Option Explicit
'Set Reference to Microsoft VBScript Regular Expressions 5.5
Function ReSub(S, SrchFor As String, ReplWith As String, _
Optional myGlobal As Boolean = True, _
Optional myIgnoreCase As Boolean = False, _
Optional myMultiline As Boolean = False) As Variant
Dim objRegExp As RegExp
Dim t(), I As Long
Set objRegExp = New RegExp
objRegExp.Pattern = SrchFor
objRegExp.IgnoreCase = myIgnoreCase
objRegExp.Global = myGlobal
objRegExp.Multiline = myMultiline
If Not IsArray(S) Then
ReSub = objRegExp.Replace(S, ReplWith)
Else
ReDim t(1 To S.Count)
For I = 1 To S.Count
t(I) = objRegExp.Replace(S(I), ReplWith)
Next I
ReSub = t
End If
End Function
示例公式
=ReSub(A1,"(\d+K)/\S+","$1")
<强>截图强>