2016-06-07 9 views
-1

Angenommen, ich möchte eine Suchfunktion erstellen, die bestimmte Zeichenfolge sucht, sagen wir "Hund; Katze" und ich möchte es durch ein bestimmtes Array gehen und Spalte b in diesem Array zurückgeben in der Zeile, die teilweise dieser Zeichenfolge entspricht, zum Beispiel:Suche längere Zeichenfolge in einem Array von kürzeren Zeichenfolgen

Horse 5 
Cat 2 
Wolf 3 

Also in diesem Beispiel würde ich erwarten, "2" zu erhalten. Ist es möglich? Im Internet nach Antworten gesucht, aber nichts hilfreiches gefunden. Bitte beachten Sie, dass die Zeichenfolge, die ich suche, komplex sein kann, zum Beispiel - "Hund; Hai; Katze; Taube" ... Also muss es eine universelle Lösung sein.

Jede mögliche Hilfe geschätzt :)

+0

Was ist in welchen Zellen? –

+0

'suchte im Netz nach Antworten, konnte aber nichts hilfreiches finden 'wonach hast du gesucht? Dies ist mit einer Schleife und einem Array ziemlich einfach. – findwindow

+0

Nun, ich versuche, dies zu lösen, ohne VBA beteiligt. – Lev

Antwort

1

Mit Daten wie:

enter image description here

Setzen Sie die "long string" in etwa D1 und in E1 eingeben:

=VLOOKUP(LOOKUP(9.99999999999999E+307,SEARCH($A$1:$A$6,D1),$A$1:$A$6),A1:B6,2,FALSE) 

enter image description here

Hinweise:

  • die LOOKUP() returns "cat"
  • VLOOKUP() erhält die zugehörige Ziffer

Normalerweise verwenden wir SEARCH() oder FIND() oder MATCH() um zu sehen, ob eine große Zeichenfolge eine kleine Zeichenfolge enthält .................... in diesem Fall möchten wir finden, die kleine Zeichenfolge ist in der große Schnur!

+0

Absolut erstaunliche Lösung. Vielen Dank! – Lev

1

Sie könnten Ihr Array aufgeteilt jede Variable in einer separaten Zeile zur Liste dann eine Funktion SVERWEIS verwenden, um jeden Wert auf den Tisch zu vergleichen. (Die Tabelle hätte zuerst in alphabetischer Reihenfolge sortiert werden.)

Ihr Beispiel erweitern, wenn Sie das Array in Spalte C aufgeteilt, erhalten Sie folgende fomula in der ersten Zeile der Spalte D verwenden:

=VLOOKUP(C1,$A$1:$B$3,2,FALSE) 

Mit dem absoluten Verweis auf die Nachschlagetabelle können Sie die Formel in zusätzliche Zeilen kopieren. Das Ergebnis für Ihre vorgeschlagenen Werte sein:

Cat | 2 | dog | #N/A 
Horse | 5 | cat | 2 
Wolf | 3 | 
1

Versuchen Sie diese UDF heraus.

SearchFor ist, was Sie suchen. Dies ist eine Zeichenfolge mit Trennzeichen, z. B. "Katze; Hund; Pferd".

SearchIn ist der Zellbereich Sie suchen möchten.

Der letzte Parameter ist der Begrenzer, der die SearchFor Variable aufgeteilt wird.Im obigen Beispiel "Katze; Hund; Pferd" wäre das Trennzeichen ";".

Public Function FindString(SearchFor As String, _ 
          SearchIn As Range, _ 
          Delim As String) as String 

    Dim MyArray()  As String 
    Dim i    As Long 
    Dim FoundCounter As Long 
    Dim Position  As Long 

    MyArray = Split(SearchFor, Delim, , vbTextCompare) 

    FoundCounter = 0 
    For i = UBound(MyArray) To LBound(MyArray) Step -1 
     Do 
      If FoundCounter = 0 Then 
       Position = InStr(1, SearchIn.Value, MyArray(i), vbTextCompare) 
      Else 
       Position = InStr(Position + 1, SearchIn.Value, MyArray(i), vbTextCompare) 
      End If 

      If Position = 0 Then 
       Exit Do 
      Else 
       FoundCounter = FoundCounter + 1 
      End If 
     Loop 
     FindString = MyArray(i) & " " & FoundCounter & " " & FindString 
     FoundCounter = 0 
    Next i 

End Function 
1

Das funktioniert, wenn Sie immer sind einen einzigen numerischen Wert zurück:

=SUM(IF(ISERR(SEARCH(search_range,search_for,1)),"",values_range)) 

Für Ihre Beispieldaten ist search_range der Bereich Horse, Cat, Wolf zu halten; search_for hält "Hund; Katze"; und values_range ist der Bereich, der 5, 2, 3 enthält.

Hoffe, dass hilft

Verwandte Themen