Sprawdź, czy ciąg zawiera inny ciąg


232

Chcę sprawdzić, czy ciąg zawiera znak „,” (przecinek). Czy mamy jakąś inną opcję niż czytanie char-by-char?


14
Czy INSTRdziała dla ciebie?
Stephen Quan

Odpowiedzi:


385

Użyj funkcji Instr

Dim pos As Integer

pos = InStr("find the comma, in the string", ",")

zwróci 15 w poz

Jeśli nie zostanie znalezione, zwróci 0

Jeśli chcesz znaleźć przecinek z formułą programu Excel, możesz użyć =FIND(",";A1)funkcji.

Zauważ, że jeśli chcesz użyć Instrdo znalezienia pozycji łańcucha bez rozróżniania wielkości liter, użyj trzeciego parametru Instr i nadaj mu const vbTextCompare(lub tylko 1 dla trudnych warunków).

Dim posOf_A As Integer

posOf_A = InStr(1, "find the comma, in the string", "A", vbTextCompare)

da ci wartość 14.

Zauważ, że w tym przypadku musisz określić pozycję początkową, jak podano w specyfikacji, którą połączyłem: Argument początkowy jest wymagany, jeśli podano porównanie.


4
Ale co jeśli znaleziony ciąg znajduje się w pozycji 0? Jak odróżnić „znaleziono w indeksie 0” od „nie znaleziono (0)”?
gEdringer

10
@gEdringer. Gdy ciąg, który należy znaleźć, znajduje się na początku, zwraca 1.
odnów


23

Istnieje również funkcja InStrRev, która wykonuje te same czynności, ale rozpoczyna wyszukiwanie od końca tekstu do początku.

Odpowiedź Per @ rene ...

Dim pos As Integer
pos = InStrRev("find the comma, in the string", ",")

... nadal zwróciłby 15 do pozycji pos, ale jeśli ciąg ma więcej niż jeden ciąg wyszukiwania, na przykład słowo „the”, to:

Dim pos As Integer
pos = InStrRev("find the comma, in the string", "the")

... zwróci 20 do pozycji zamiast 6.


17

Opierając się na odpowiedzi Rene, możesz również napisać funkcję, która zwróci PRAWDA, jeśli podciąg był obecny, lub FAŁSZ, jeśli nie był:

Public Function Contains(strBaseString As String, strSearchTerm As String) As Boolean
'Purpose: Returns TRUE if one string exists within another
On Error GoTo ErrorMessage
    Contains = InStr(strBaseString, strSearchTerm)
Exit Function
ErrorMessage:
MsgBox "The database has generated an error. Please contact the database administrator, quoting the following error message: '" & Err.Description & "'", vbCritical, "Database Error"
End
End Function

3
Jakiego rodzaju błędu bazy danych oczekujemy w tej funkcji? Pułapka na błędy i komunikat o błędzie wydają się całkowicie bezcelowe.
Roobie Nuby,

11
@RoobieNuby To tylko moja domyślna obsługa błędów. Włączam to we wszystkich moich funkcjach, ponieważ jeśli coś pójdzie nie tak, chcę, żeby personel do mnie zadzwonił, a nie sam próbował tego naprawić.
Sinister Beard
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.