oracle截取某两个字符之间的字符串_VBA实用小程序45: 提取两个字符串之间的文本...

学习Excel技术,关注微信公众号:

excelperfect

本文继续学习wellsr.com中提供VBA程序。经常研究优秀的VBA程序代码,理解其中的编程方法和技巧,往往能够取得事半功倍的效果。

下面的用户自定义函数SuperMid函数能够在一段文本中提取两个字符、分隔符、单词等之间的子文本(字符串)。其中,分隔符可以相同,也可以不同。

SuperMid函数的代码如下:

'提取字符串中在两个子字符串str1和str2之间的字符串

'如果指定参数reverse为True,则从字符串结尾开始查找

'并提取最后满足条件的子字符串

Public Function SuperMid(ByVal strMain As String, _

        str1 As String, str2 As String, _

        Optional reverse As Boolean) As String

    Dim i As Integer, j As Integer, temp AsVariant

    On Error GoTo errhandler:

    If reverse = True Then

        i = InStrRev(strMain, str1)

        j = InStrRev(strMain, str2)

        If Abs(j - i) < Len(str1) Then

            j = InStrRev(strMain, str2, i)

        End If

        If i = j Then '尝试查找字符串的第2部分

            j = InStrRev(strMain, str2, i - 1)

        End If

    Else

        i = InStr(1, strMain, str1)

        j = InStr(1, strMain, str2)

        If Abs(j - i) < Len(str1) Then

            j = InStr(i + Len(str1), strMain,str2)

        End If

        If i = j Then '尝试查找字符串的第2部分

            j = InStr(i + 1, strMain, str2)

        End If

    End If

    If i = 0 And j = 0 Then GoTo errhandler:

    '仅让其变得任意大

    If j = 0 Then j = Len(strMain) + Len(str2)

    If i = 0 Then i = Len(strMain) + Len(str1)

    If i > j And j <> 0 Then '交换顺序

        temp = j

        j = i

        i = temp

        temp = str2

        str2 = str1

        str1 = temp

    End If

    i = i + Len(str1)

    SuperMid = Mid(strMain, i, j - i)

    Exit Function

errhandler:

    MsgBox "提取字符串错误. 请核查你的输入" & vbNewLine _

        & vbNewLine & "中止", , "字符串没有找到"

End Function

在工作表中使用

如下图1所示,可以像内置的工作表函数一样使用superMid函数。

cc1b238825c0f01a97568d53b6e3c86c.png

图1

在VBA代码中使用

提取两个单词之间的字符串

Sub ExtractSubstring()

    Dim str1 As String, str2 As String

    str1 = "USER: myusername ADDRESS:unknown"

    str2 = SuperMid(str1, "USER:","ADDRESS:")

    Debug.Print str2 '结果为; myusername

End Sub

提取两个分隔符之间的字符串

Sub ExtractSubstring2()

    Dim str1 As String, str2 As String

    str1 = "abc-123-xyz-000"

    str2 = SuperMid(str1, "-","-")

    Debug.Print str2 '结果为123

End Sub

提取开始两个“-”之间的字符串。

提取两个字符串之间最后出现的字符串

Sub ExtractSubstring3()

    Dim str1 As String, str2 As String

    str1 = "abc-123-xyz-000"

    str2 = SuperMid(str1, "-","-", True)

    Debug.Print str2 '结果为xyz

End Sub

提取最后两个“-”之间的字符,此时将第4个参数值设置为True。

提取某个单词之后的所有文本

Sub ExtractSubstring4()

    Dim str1 As String, str2 As String

    str1 = "How now brown cow"

    str2 = SuperMid(str1, "now","anyrandomstring")

    Debug.Print str2 '结果为brown cow

End Sub

从路径中提取文件名

Sub ExtractFileName()

    Dim str1 As String, str2 As String

    str1 = "C:\Users\完美Excel\excelperfect.txt"

    str2 = SuperMid(str1, "\",".txt", True)

    Debug.Print str2 '结果为excelperfect

End Sub

8af04c5f4367a3c435c4eb9f9ebcfccb.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值