如果前一个字符是文本格式的数字,则删除两个字符之间的字符串中的文本

时间:2018-02-27 16:33:46

标签: excel vba

使用我已经尝试过的代码编辑问题 - 对于不发布它而道歉,但因为它不起作用我认为这只会使问题更加清晰。

我已经查看了类似问题的答案,但没有设法将脚本编辑为我需要的内容,因为我认为我的任务有点具体。

我有一个包含这种字符串的单元格:

"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

2 个答案:

答案 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

enter image description here

答案 1 :(得分:0)

使用正则表达式可以很容易地完成。

这是必需的正则表达式和解释。

(适用\ d + K)/ \ S +

(\d+K)/\S+

选项:区分大小写; ^ $不匹配的换行

$ 1

使用RegexBuddy

创建

以下是一些代码,显示了将其实现为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")

<强>截图

enter image description here