如何删除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宏后的结果)

如何删除VBA文本字符串末尾以数字开头的所有内容?

有了这个输出,公式就是要做的,这真是太好了!我的问题是,对于B列中的结果,我无法全神贯注(我是VBA宏的新手,将尽我所能学习),它们的结果都以数字X结尾在数字之间。我将如何调整代码以使其删除该部分文本?因此结果将如下所示:

如何删除VBA文本字符串末尾以数字开头的所有内容?

从我正在寻找的结果与给定的结果中可以看到,###X###最后被取出。我在VBA之外玩过,发现它可以工作,但实际上是一个两步过程:

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

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

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

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

任何帮助将不胜感激!

qianyining19900907 回答:如何删除VBA文本字符串末尾以数字开头的所有内容?

我也喜欢用这样的公式,所以我使用了正则表达式,在函数中增加了几行。基本上是模式匹配。您的订阅和以前一样。

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
,

您也可以尝试:

Option Explicit

Sub test()

    Dim LastRow As Long,i As Long,Chr As Long
    Dim str As String,NewStr As String

    With ThisWorkbook.Worksheets("Sheet1")

        LastRow = .Cells(.Rows.Count,"A").End(xlUp).Row

        For i = 2 To LastRow

            str = .Range("A" & i).Value

            For Chr = 1 To Len(str)

                If Not IsNumeric(Mid(str,Chr,1)) Then
                    NewStr = NewStr & Mid(str,1)
                End If

            Next Chr

            .Range("B" & i).Value = NewStr
            NewStr = ""

        Next i

    End With

End Sub
本文链接:https://www.f2er.com/3164757.html

大家都在问