Excel VBA函数,根据字符串中特定字符的位置返回字符串的左侧
我试图创建一个用户定义的函数,它返回字符串中最后一个连字符左边的所有内容。所有字符串的格式如下:Excel VBA函数,根据字符串中特定字符的位置返回字符串的左侧,excel,vba,Excel,Vba,我试图创建一个用户定义的函数,它返回字符串中最后一个连字符左边的所有内容。所有字符串的格式如下: CT2986-400427-15 J84705-202001-12 TF230068-003 DS2112-000038-11 这是我当前的代码,但它一直显示一个#值!单元格中出现错误。有什么想法吗 Function PartNOSUFFIX(PartNo As String) As String PartNOSUFFIX = Left(PartNo, InStr(8, PartNo, &qu
- CT2986-400427-15
- J84705-202001-12
- TF230068-003
- DS2112-000038-11
Function PartNOSUFFIX(PartNo As String) As String
PartNOSUFFIX = Left(PartNo, InStr(8, PartNo, "-") - 1)
End Function
提前谢谢 您想改用
Instrrev
,它是Instr
,但相反。这样,它将始终找到最后一个连字符并返回其位置
因此,请尝试:
Function PartNOSUFFIX(PartNo As String) As String
PartNOSUFFIX = Left(PartNo, InStrRev(PartNo, "-") - 1)
End Function
你会得到一个#值!如果单元格为空或没有连字符,则出错。如果您想说明这一点,您可以使用以下内容:
Function PartNOSUFFIX(PartNo As String) As String
If PartNo = "" Or InStr(PartNo, "-") = 0 Then
PartNOSUFFIX = ""
Else
PartNOSUFFIX = Left(PartNo, InStrRev(PartNo, "-") - 1)
End If
End Function
我只是让它返回空白,如果它看到的单元格是空白的或没有连字符。当然,你可以把它改成你想说的任何话。你想用
Instrrev
代替,它是Instr
,但反过来。这样,它将始终找到最后一个连字符并返回其位置
因此,请尝试:
Function PartNOSUFFIX(PartNo As String) As String
PartNOSUFFIX = Left(PartNo, InStrRev(PartNo, "-") - 1)
End Function
你会得到一个#值!如果单元格为空或没有连字符,则出错。如果您想说明这一点,您可以使用以下内容:
Function PartNOSUFFIX(PartNo As String) As String
If PartNo = "" Or InStr(PartNo, "-") = 0 Then
PartNOSUFFIX = ""
Else
PartNOSUFFIX = Left(PartNo, InStrRev(PartNo, "-") - 1)
End If
End Function
我只是让它返回空白,如果它看到的单元格是空白的或没有连字符。当然,你可以把它改成你想说的任何内容。有点复杂,但很有趣,试试看
Function PartNOSUFFIX(PartNo As String) As String
PartNOSUFFIX = Replace(PartNo, "-" & Split(PartNo, "-")(UBound(Split(PartNo, "-"))), "")
End Function
有点复杂但很有趣,试试看
Function PartNOSUFFIX(PartNo As String) As String
PartNOSUFFIX = Replace(PartNo, "-" & Split(PartNo, "-")(UBound(Split(PartNo, "-"))), "")
End Function
您可以使用
StrReverse()
和Split()
轻松完成此任务:
Function PartNOSUFFIX(PartNo As String) As String
PartNOSUFFIX = StrReverse(Split(StrReverse(PartNo), "-", 1)(0))
End Function
或者,您可以使用正则表达式:
Function PartNOSUFFIX(PartNo As String) As String
With CreateObject("vbscript.regexp")
.Pattern = "(.*)-.*"
PartNOSUFFIX = .Replace(PartNo, "$1")
End With
End Function
-在捕获组中捕获0+(贪婪)字符,而不是换行符,最多李>(.*)
-文字连字符-
-还是0+(贪婪)字符,而不是换行符*
注意即使没有连字符,这两个选项也可以使用。您可以使用
StrReverse()
和Split()
轻松完成此操作:
Function PartNOSUFFIX(PartNo As String) As String
PartNOSUFFIX = StrReverse(Split(StrReverse(PartNo), "-", 1)(0))
End Function
或者,您可以使用正则表达式:
Function PartNOSUFFIX(PartNo As String) As String
With CreateObject("vbscript.regexp")
.Pattern = "(.*)-.*"
PartNOSUFFIX = .Replace(PartNo, "$1")
End With
End Function
-在捕获组中捕获0+(贪婪)字符,而不是换行符,最多李>(.*)
-文字连字符-
-还是0+(贪婪)字符,而不是换行符*
注意即使没有连字符,这两个选项也可以使用。不错,可能值得向经验不足的用户解释棘手的逻辑:-)不错,可能值得向经验不足的用户解释棘手的逻辑:-)