У 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