Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1552to1556
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

generische Suche in Array

generische Suche in Array
30.04.2017 10:50:31
Werner
Hallo Forum,
ich verarbeite in einem VBA-Macro eine externe Liste mit verschiedenen Begriffen. Die werden zuerst in einen Array eingelesen und später mit
ArrayP = 1 + Application.Match(Nr1, TBNummer, 0)
nach einer möglichen Übereinstimmung ausgewertet.
Nun möchte ich mein Verfahren erweitern, und Gruppen-Begriffe zulassen. Die werden aber nicht in dem oben erwähnten Array bereitgestellt. Statt dem vollen Namen wird dort nur der Anfang eines Begriffs definiert. Z. B. MUSTER statt MUSTER1 und MUSTER2. Ein "*" für generisch würde mich bei dem Eintrag nicht stören; es sind aber nur generische Eintrage, auch ohne den "*". Soweit die Vorgabe.
Wenn nun die Suche im ersten Array erfolglos war, möchte ich wissen, ob ein passender Gruppeneintrag für meinen vorliegenden Begriff vorhanden ist. Wenn ich also nach "MUSTER4711" suche, möchte ich gerne den passenden Gruppeneintrag "MUSTER" finden und die dort definierten Daten verwenden. Natürlich könnte ich einen weiteren Array auch selber durchsuchen. Aber gibt es eine bessere Möglichkeit?
Wie immer: Gruße aus dem Schwabenland
Werner

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: generische Suche in Array
30.04.2017 19:07:48
GraFri
Hallo Werrner
VBielleicht hilft dir folgendes weiter:
Option Explicit
' Suchstring muss exakt ein Element des Array's sein
Function IsInArray_1(stringToBeFound As String, arr As Variant) As Boolean
IsInArray_1 = Not IsError(Application.Match(stringToBeFound, arr, 0))
End Function
' Suchstring muss Teil eines Elements des Array's sein
Function IsInArray_2(stringToBeFound As String, arr As Variant) As Boolean
IsInArray_2 = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
Sub Test()
Dim Array_1 As Variant
Array_1 = Array("pedro paul", "pedro maria", "maria", "jose", "jesus", "pepe", "pepe", "jose")
MsgBox IsInArray_1("paul", Array_1)           ' falsch
MsgBox IsInArray_1("pedro paul", Array_1)     ' richtig
MsgBox IsInArray_2("paul", Array_1)           ' richtig
MsgBox IsInArray_2("pedro paul", Array_1)     ' richtig
End Sub
mfg, GraFri
Anzeige
AW: generische Suche in Array
01.05.2017 09:04:22
Werner
Hallo GraFri,
vielen Dank für Deinen Beitrag. Ich habe es probiert und einen weiteren Aufruf eingefügt:
MsgBox IsInArray_2("jes", Array_1) ' richtig
Ich wollte testen, ob auch Teilstrings gefunden werden.
Mit Deiner Lösung erkenne ich zwar, dass es die von mir gesuchte Zeichenfolge gibt. Ich möchte aber wissen, an welcher Position im Array das steckt. Der Array macht in meinem Fall doch nur Sinn, wenn ich in einem zweiten Array an gleicher Position Informationen bereitstelle, die zu der gesuchten Zeichenfolge gehören; z. B. ein Gruppenname.
War kann das Restproblem lösen?
Werner
Anzeige
AW: generische Suche in Array
03.05.2017 13:14:07
Jürgen
Hallo Werner,
wozu ein zweites Array mit mehr Informationen?
Verwende doch ein mehrdimensionales Array, in das du in der zweiten oder n-ten Dimension
(bis zu 32 möglich laut https://msdn.microsoft.com/de-de/library/02e7z943.aspx)
die Zusatzinformationen unterbringst!
Sub Mehrdimensionales_Array()
Dim arrName(1 To 10, 1 To 10) As Variant
arrName(1, 1) = "pedro paul"
arrName(1, 2) = "They lived in Rom."
arrName(1, 3) = "18.8.10"
arrName(2, 1) = "pedro maria"
arrName(2, 2) = "What is ..."
MsgBox arrName(2, 1) & " - " & arrname(2,2)
End Sub

Das mehrdimensionale Array ist zwar etwas aufwändiger beim Befüllen, aber die Suche nach einer Zeilennummer für ein zweites Array ist sicher nicht einfacher.
Über eine geschachtelte For-Schleife würde ich die Werte aus einer Tabelle abrufen.
Sub Mehrdimensionales_Array()
Dim arrName(1 To 10, 1 To 10) As Variant
Dim i As Long, J As Long
For i = LBound(arrName, 1) To UBound(arrName, 1)
For J = LBound(arrName, 2) To UBound(arrName, 2)
arrName(i, J) = ActiveSheet.Range(Cells(i, J)).Value
Next J
Next i
MsgBox arrName(2, 1)
End Sub
Ich hoffe dies kann dir bei deinen Anforderungen weiterhelfen.
Gruß
Jürgen
Anzeige
AW: generische Suche in Array
03.05.2017 13:27:05
Jürgen
Entschuldige,
ist natürlich nicht die Lösung!
Deshalb wieder offen!
Gruß
Jürgen
AW: generische Suche in Array
03.05.2017 15:11:24
Werner
Hallo Jürgen,
auch wenn Deine Antwort (wie Du selber erkannt hast), nicht die Lösung ist, ist es doch in gewisser Art eine Verbesserung meiner bisherigen Denk- und Arbeitsweise. Ich werde mich mit diesem Thema beschäftigen.
Gruß
Werner
AW: generische Suche in Array
07.05.2017 10:22:42
Werner
Hallo Forum,
nachdem sich bisher niemand mit einem brauchbaren Vorschlag gemeldet hat, in einem Array generisch einen Eintrag zu finden (und dabei auch die Position des Arrays zu erhalten), habe ich die Abarbeitung mittels einer DO-Loop gelöst. Die generische Suche hätte auch noch ein anderes Problem aufgeworfen: wie lange muss mein generischer Suchbegriff sein? Beispiel: welcher generische Begriff ist für "Beispiel" richtig: BEI oder BEISP?
Und was passiert, wenn der gesuchte Begriff nicht mit dem Anfang des gespeicherten Wertes identisch ist. Wenn die gesuchte Zeichenfolge irgendwo innerhalb des gespeicherten Wertes vorkommt, ist die Antwort "Wahr".
Mein Speicher mit den generischen Einträgen hat derzeit ca. 50 Begriffe. Ich vergleiche nun jeden dieser Begriffe in der gespeicherten Länge mit dem Begriff, für den ich einen generischen Eintrag suche. Und diesen Speicher sortiere ich nun zuerst absteigend. Damit sind längere generische Begriffe weiter oben, und in meinem Beispiel oben würde ich "BEISP" und nicht "BEI" finden
Allen, die mir geantwortet haben, oder sich über eine mögliche Lösung Gedanken gemacht haben, herzlichen Dank.
Ich habe meine Problem gelöst.
Gruß
Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige