Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Einen Wert in einem Feld suchen, der mehrere Einträge hat

Begonnen von nat_123, Dezember 27, 2016, 13:47:03

⏪ vorheriges - nächstes ⏩

nat_123

Hallo,

ich importiere eine Excel Tabelle in Access. Ich suche in der Spalte B nach einem Suchbegriff der sich in Spalte H befindet. Jedoch stehen getrennt mit Semikolon in der Spalte H mehrere Begriffe.  :o Wie könnte es in VBA umgesetzt werden?

in Spalte B steht bespielsweise: Haus
in Spalte H : Haus; Garten; Auto;

Ich habe es mir so überlegt:

Sub Begriff_finden ()

dim suchbegriff as string

dim gefundenerbegriff as string  'Steht in Spalte H


if Suchbegriff in Spalte B  = gefundenerbegriff in Spalte H then

....

else

....

end if



Danke

Joss

Hallo nat_123,

als erste Bedingung brauchst du ein Formular mit deiner Tabelle (Abfrage?) als Datenquelle.
Dann musst du dich entscheiden, ob du das Formular nach dem Suchbegriff filtern willst, oder ob du zu dem Datensatz mit dem Suchbegriff springen (=Fokus setzen) willst?

Gruß
Josef

nat_123

Hallo,

danke für deiner Rückmeldung.
Also ein Formular für die Quelldaten habe ich schon.

Mir geht es nur darum, wie ich nach einem Suchbegriff suchen kann, wenn im "gesuchten" Feld mehrere Werte abgetrennt mit Semikolon drinstehen.

Im Prinzip bräuchte ich doch ein VBA Algorithmus der jeden Begriff der mit Semikolon abgetrennt wird durchgeht und mit meinem Suchbegriff abgleicht, aber wie mache ich es mit VBA?

DF6GL

Hallo,

ich verstehe Deine Frage nicht...

Interpretativ:
Willst Du diejenigen Datensätze anzeigen, bei denen der Wert (Text) aus FeldB in FeldH enthalten ist?

Als Abfrage (SQL-String):

Select * from tblTabelle where FeldH Like '*' & FeldB & '*'

Joss

Hallo nat_123,

Zitatein VBA Algorithmus der jeden Begriff der mit Semikolon abgetrennt wird durchgeht

Grundsätzlicher Ablauf:
Mit der split-Funktion kannst du alle Werte in ein Array einlesen.
Dann das Array mit einer for-each-Schleife durchlaufen, und jeden Wert mit dem Suchbegriff vergleichen.

Gruß
Josef

ebs17

VBA:
If Instr(1, "Haus; Garten; Auto;", "Haus") > 0 Then MsgBox "vorhanden"
Haus finden finde ich schlecht formuliert, weil der Begriff in der Spalte schon vorhanden ist. Man würde also die andere Spalte eher testen, ob darin der Begriff vorkommt.

Wenn man von Tabellen redet, wäre die Abfragelösung lt. Vorschlag von Franz sinnvoller.

Zitat
ich importiere eine Excel Tabelle in Access
Bei einer ordentlichen DB-Tabelle sollten soche Wortlisten gar nicht erst vorkommen (=> atomare Inhalte speichern).
Bei einem wohlgesetztem (programmierten) Import würde dann sofort eine Umformung der Struktur erfolgen und dabei das genannte Split vorteilhaft einzusetzen sein.
Mit freundlichem Glück Auf!

Eberhard

Joss

Hallo nat_123,

mir ist noch was einfacheres eingefallen.

Dim FeldinSpalteH As String
Dim Suchbegriff As String

FeldinSpalteH = "Haus; Garten; Auto;"
Suchbegriff = "Haus"

If FeldinSpalteH Like "*" & Suchbegriff & "*" Then
   MsgBox "gefunden"
Else
   MsgBox "nicht gefunden"
End If


Gruß
Josef

crystal

Hallo,

es gibt einige Punkte, die unklar sind.
1. Kann in Spalte H auch z. B "Baumhaus" vorkommen?
2. Wie, wann und warum möchtest du erfahren, dass ein Wert in Spalte B in Spalte H vorkommt - willst du das für jeden Datensatz der Tabelle wissen?
3. Was soll geschehen, wenn du einen "Treffer" hast? Ja/Nein in einem neuen Feld speichern oder welche Aktion?
4. Bezieht sich dein Wunsch "statisch" auf eine Tabelle, oder willst du z. B. aus der Tabelle alle Datensätze selektieren, in denen "Haus" sowohl in Spalte B als auch in H vorkommt?
5. Oder willst du Datensätze selektieren, in deren Spalte H ein Wert vorkommt, der in Spalte B existiert?

Alles etwas verwirrent und unklar. Bitte erkläre genauer, was du erreichen möchtest.

lg
crystal

PS: Was ebs17 sagen will, verstehe ich auch nicht, abgesehen vom zweiten Teil.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

nat_123

Vielen Dank für die zahlreichen Rückmeldungen.

@DF6GL
Deiner Lösung mit dem LIKE Operator muss ich mal ausprobieren, da ziemlich genau das ist, was ich suche.

@Joss
Wie genau funktioniert dieser Split-Funktion mit dem Array, kannst du mir da ein Beispielcode geben?

Danke

@crystal
Nein, also ich suche gezielt nach "Haus
2. Ja, ich will es für jeden Datensatz in der Tabelle wissen
3. Wenn ich den Treffer finde, dann soll er mir nur die anzeigen, wo er keine Übereinstimmungen gefunden hat
4. Ich nehme alle Werte von Spalte B und vergleiche sie mit Spalte H

Danke

DF6GL

Hallo,


ziemlich verworren:

Zitat1. ich suche gezielt nach "Haus"
2. Ja, ich will es für jeden Datensatz in der Tabelle wissen
3. Wenn ich den Treffer finde, dann soll er mir nur die anzeigen, wo er keine Übereinstimmungen gefunden hat
4. Ich nehme alle Werte von Spalte B und vergleiche sie mit Spalte H

Kannst Du mal ein authentisches Beispiel einiger Daten(sätze) geben und sagen, was Du wann und in welcher Form erwartest?


crystal

Hallo,

1. wenn du gezielt nach "Haus" suchen möchtest, findet ...like "*Haus*" auch Baumhaus, Haustür, Behausung usw.
Dann bleibt nichts anderes übrig, als mit Split ein Array der einzelnen Werte zu erzeugen und diese dann einzeln mit dem Suchwert zu vergleichen. Findest du einen Treffer, kannst du ja ein True in einem Extra-Tabellenfeld speichern (zu 2.).
Split ist gut in der Hilfe beschrieben.
3. deine Antwort ist ein Widerspruch in sich.
4. du meinst vermutlich "ich nehme den jeweils einen Wert von B und vergleiche ihn mit H und tue das für alle Datensätze"

Ansonsten: siehe Antwort von DF6GL.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Joss

Hallo nat_123,

ZitatWie genau funktioniert dieser Split-Funktion mit dem Array, kannst du mir da ein Beispielcode geben?
Ich möchte diese Frage erst mal nicht beantworten, da sie nur Verwirrung bringen würde, und möchte mich der Antwort und der Frage von Franz anschließen.

Besonders dieser Satz ist für mich verwirrend:
ZitatWenn ich den Treffer finde, dann soll er mir nur die anzeigen, wo er keine Übereinstimmungen gefunden hat
Willst du die Treffer finden, oder die Nicht-Treffer (=keine Übereinstimmungen)?

Deine anderen Sätze würden eher auf eine Filterlösung hindeuten.
Daher auch meine Frage in der Antwort#1: Datensatz suchen oder Datensätze filtern?

Gruß
Josef