У VBA, який найпростіший спосіб перевірити, чи рядок починається з підрядка? Java має startsWith
. Чи існує еквівалент VBA?
Відповіді:
Є кілька способів зробити це:
Ви можете використовувати InStr
вбудовану функцію, щоб перевірити, чи містить рядок підрядок. InStr
або поверне індекс першого збігу, або 0. Тож ви можете перевірити, чи рядок починається з підрядка, виконавши наступне:
If InStr(1, "Hello World", "Hello W") = 1 Then
MsgBox "Yep, this string begins with Hello W!"
End If
Якщо InStr
повертається 1
, тоді рядок ("Hello World") починається з підрядка ("Hello W").
Ви також можете використовувати like
оператор порівняння разом із деякими основними збігами шаблонів:
If "Hello World" Like "Hello W*" Then
MsgBox "Yep, this string begins with Hello W!"
End If
У цьому ми використовуємо зірочку (*), щоб перевірити, чи рядок починається з нашої підрядка.
InStr
робить роботу, але це не схоже , щоб бути Like
в VBScript (див stackoverflow.com/a/30301238/61508 )
Судячи з декларації та опису startsWith
функції Java , "найпростішим способом" реалізації її у VBA буде Left
:
Public Function startsWith(str As String, prefix As String) As Boolean
startsWith = Left(str, Len(prefix)) = prefix
End Function
Або, якщо ви хочете мати доступний параметр зміщення, за допомогою Mid
:
Public Function startsWith(str As String, prefix As String, Optional toffset As Integer = 0) As Boolean
startsWith = Mid(str, toffset + 1, Len(prefix)) = prefix
End Function
Right()
замість нього: Right(str, Len(prefix)) = prefix
:-)
Найкращі методи вже наведені, але чому б не подивитися на пару інших методів для розваги? Попередження: це більш дорогі методи, але вони служать за інших обставин.
Дорогий метод регулярного виразу та селектор атрибутів css починається з оператора ^
Option Explicit
Public Sub test()
Debug.Print StartWithSubString("ab", "abc,d")
End Sub
Регулярний вираз:
Public Function StartWithSubString(ByVal substring As String, ByVal testString As String) As Boolean
'required reference Microsoft VBScript Regular Expressions
Dim re As VBScript_RegExp_55.RegExp
Set re = New VBScript_RegExp_55.RegExp
re.Pattern = "^" & substring
StartWithSubString = re.test(testString)
End Function
Селектор атрибутів CSS з початком з оператора
Public Function StartWithSubString(ByVal substring As String, ByVal testString As String) As Boolean
'required reference Microsoft HTML Object Library
Dim html As MSHTML.HTMLDocument
Set html = New MSHTML.HTMLDocument
html.body.innerHTML = "<div test=""" & testString & """></div>"
StartWithSubString = html.querySelectorAll("[test^=" & substring & "]").Length > 0
End Function