首页 > 解决方案 > 如何删除 VBA 中文本字符串末尾以数字开头的任何内容?

问题描述

所以目前我的 VBA 代码如下所示:

Sub Testing()

Dim K As Long
Dim LR As Long
LR = Cells(Rows.Count, 1).End(xlUp).Row


For K = 2 To LR
   Cells(K, 2).Value = StripAfter(Cells(K, 1), "_", 6)
Next K

End Sub


Function StripAfter(ByVal txt As String, ByVal delimiter As String, ByVal 
  occurrence As Long) As String
    Dim x As Variant
    x = Split(expression:=txt, delimiter:=delimiter, limit:=occurrence + 1)

    StripAfter = x(UBound(x))
End Function

我将此链接到一个按钮,该按钮将输出如下数据:(旁注:A列已粘贴,B列是运行VBA宏后的结果) 例子

有了这个输出,这正是公式要做的事情,太棒了!我的问题是,对于 B 列中的结果,我无法解决这个问题(我是 VBA 宏的新手,尽我所能学习),它们都以数字结尾,数字X之间有一个数字。我将如何调整我的代码以使其删除那部分文本?所以结果看起来像:

示例 2

正如您从我正在寻找的结果中看到的那样,与给出的结果相比,###X###最后取出了。我在 VBA 之外玩过,发现它可以工作,但它本质上是一个两步过程:

=RIGHT(SUBSTITUTE(A1,"_",CHAR(10),12),LEN(A1)-FIND(CHAR(10),SUBSTITUTE(A1,"_",CHAR(10),12),1)+1)

^^^ 这将从 A1 中获取字符串的最后一部分(第一张图片)

=LEFT(A20,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A20&"0123456789")) -1)

^^^(A20 是我从上面的公式中用来抓取 A1 中字符串的最后一部分的单元格)这将删除第一个数字之后的任何内容。这也完全符合我的要求,但我不知道在上面的 VBA 公式中从哪里开始实现它。

任何帮助将不胜感激!

标签: excelvbaexcel-formula

解决方案


我也遇到过这样的公式,所以我使用了正则表达式,在你的函数中添加了几行。它基本上是模式匹配。你的潜艇和以前一样。

Function StripAfter(ByVal txt As String, ByVal delimiter As String, ByVal occurrence As Long) As String

Dim x As Variant

x = Split(expression:=txt, delimiter:=delimiter, limit:=occurrence + 1)
StripAfter = x(UBound(x))

With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "\d+x\d+$"                                           'match 1+ numbers followed by x followed by 1+ numbers at the end of a string
    If .Test(StripAfter) Then StripAfter = .Replace(StripAfter, "") 'if pattern found replace with empty string
End With

End Function

推荐阅读