VBA字符串的特定部分

3
我有一个包含字符串的Excel列,像这样:ABC-1234-GLK-1234-10TH8E10-2171-D 我需要将值GL-1234赋给一个变量(即第2个短划线和第4个短划线之间的子字符串)。我尝试了: x=Mid(string, 10, 8) 但问题在于并非所有字符串的长度都相同,然而我想要的子字符串是在第2个和第4个短划线之间的唯一恒定部分。 有什么想法吗?

4
你可以使用 InStr 函数来查找横杠的位置。 - Jacob
谢谢!!!这正是我所需要的!:) 附:我是VBA新手 - Maggie11
可能是重复的问题:如何获取字符串的特定部分 - puzzlepiece87
3个回答

9

将字符串拆分并提取所需内容:

Dim dataSplit() As String
Dim dataString As String

dataSplit = Split(Sheet1.Range("C14").Value2, "-")

dataString = dataSplit(2) & "-" & dataSplit(3)

+1 高效的方法。为了完整性,应该在 Split 上进行 uBound 测试,以确保所需的部分存在。 - brettdj

1
您可以尝试以下方法,虽然我认为这不是最优雅或最简单的解决方案:
x = ""
p1 = InStr(1, string, "-")
If p1 <> 0 Then
    p2 = InStr(1 + p1, string, "-")
    If p2 <> 0 Then
        p3 = InStr(1 + p2, string, "-")
        If p3 <> 0 Then
            p4 = InStr(1 + p3, string, "-")
            If p4 <> 0 Then
                x = Mid(string, p2 + 1, p4 - p2 - 1)
            End If
        End If
    End If
End If

1
一个更通用的解决方案(即不依赖于找到一定数量的破折号)会更好。 - Toby Allen
1
这个问题涉及到获取一个子字符串,该子字符串特定地位于第二个和第四个破折号之间。如果您不依赖于至少有4个破折号,您将如何获取它? - neelsg

0

这将返回第二个破折号和第四个破折号,B1是字符串:ABC-1234-GLK-1234

=MID(B1,FIND("-",B1,FIND("-",B1)+1),FIND("-",B1,FIND("-",B1,FIND("-",B1,FIND("-",B1)+1)+1)+1) - FIND("-",B1,FIND("-",B1)+1))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接