Zum Inhalt springen

Inhalt zweier Spalten miteinander vergleichen (VB)


Savanna

Empfohlene Beiträge

Hallo Leutz,

ich hoffe, ihr seid noch nicht alle im Urlaub und könnt mir noch helfen.

Ich habe zwei Spalten, mit unterschiedlich vielen Datensätzen, die eine beispielsweise 300 die andere 400.

Die Spalte eins beinhaltet Felder, in denen beispielsweise mal x mal y oder sogar z steht. Die andere Spalte beinhaltet Felder, in denen Axton, System und Zitrone drinsteht. Nun soll geprüft werden, ob und wo die Inhalte der ersten Spalte irgendwo in der zweiten Spalte enthalten sind. Wenn nun Datensätze der ersten Spalte in den Feldbezeichnungen der zweiten Spalte vorkommen, dann sollen diese Datensätze der zweiten Spalte in einer neuen Spalte 3 ausgegeben werden.

Mann, ist das schwer zu erklären.

Hoffe, es hat irgendwer verstanden!!!

Freue mich über jede Hilfe :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Savanna,

ich vermute jetzt einfach mal, Du redest über Excel, oder? ;)

Prinzipiell funktioniert das ganze unter VB mit einer geschachtelten Schleife. Kann Dir das ganze jetzt aber nur grob skizzieren, weil ich kein Office hier habe zum Testen:


maxA = Columns(1).End(xldown).row 

maxB = Columns(2).End(xldown).row

currow = 1


for i = 1 to maxA

   for j = 1 to maxB

     if instr(cells(1,i).value, cells(2,j).value) then

        cells(3,currow).value = cells(2,j).value

        currow = currow + 1

     endif

   next

next

maxA & maxB kennzeichnen die letzte Reihe in einer Spalte. So brauchst Du nicht durch alle 65000 theoretisch möglichen Zeilen bügeln.

Wie gesagt, es kann sein, dass der Code syntaktisch nicht ganz richtig ist, kann Dir aber evtl. am Donnerstag noch etwas mehr posten.

Sonst frag einfach! :D

CU,

Red Bull

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...

hallo,

danke erstmal für deine Antwort, es handelt sich nicht um Excel ( da hätt ich auch schon nen Lösungsansatz) sondern um Access.

Hab schon versucht, den Lösungsansatz von Excel auf Access anzupassen, aber das war vermutlich ne blöde Idee.

Jetzt dachte ich, dass ich die Feldinhalte der zweier Spalten in jeweils ein Array speicher und dann die zwei Arrays miteinander vergleiche. Wäre das was?

Hättest du nen Lösungsvorschlag für Access?

Danke im Voraus!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das passt glaube ich eher zu den Datenbanken, ich schiebs mal da rüber...

Ich habe zwei Spalten, mit unterschiedlich vielen Datensätzen, die eine beispielsweise 300 die andere 400.

Sind die beiden Spalten in verschiedenen Tabellen?? Vermutlich ja, sonst hättest du ja nicht unterschiedlich viele Datensätze... :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Wolle

Hier die gleiche Frage, ist das eine extra Tabelle??

Ich gehe mal davon aus, das es 3 Tabellen sind.... Dann könntest du z.B. 3 Recordsets machen. Mit den ersten 2 Recordsets machst du eine verschachtelte Schleife und vergleichst wie im Excelbeispiel mit der instr-Funktion die Felder. Falls du eine Übereinstimmung hast schreibst du mit dem 3. Recordset dann den Wert in die 3. Tabelle.

Ist zwar relativ langsam, aber bei so wenig Datensätzen sollte das gehen....

Es handelt sich hierbei nur um eine Tabelle mit zwei Spalten!!!

Ich habe jetzt die Inhalte der Spalten in einem Array abgespeichert und nun werd ich die Daten mit einander vergleichen.

Es muss hier eine Funktion geben, wo ich prüfen kann, ob der Inhalt der einzelnen Zeilen aus der einen Spalte in irgendeiner Zeile der anderen Spalte vorhanden ist.

Es soll also nicht geprüft werden, ob Zeile1 irgendwo in der andern Spalte vorhanden ist, sondern ob Ähnlichkeiten bestehen zwischen der einen Spalte und der andern.

Als Beispiel: In der ersten Spalte Zeile1 steht "Marienkäfer" und und der zweiten Spalte in Zeile 350 steht "Käfer".

Hierbei besteht doch eine Ähnlichkeit zwischen den einzelnen Zeilen der verschiedenen Spalten. Das soll nun ermittelt werden und wenn eine Ähnlichkeit besteht, dann soll das in einer dritten Spalte (ebenfalls in der selben Tabelle) ausgegeben werden.

Wir gehen beim Vergleichen immer von der ersten Spalte aus. Sprich wir schauen, ob der Inhalt der Spalte 1 irgendwo annäherungsweise in Spalte 2 auftaucht, wenn ja, dann soll das in der dritten Spalte ausgegeben werden.

:confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Savanna

Es muss hier eine Funktion geben, wo ich prüfen kann, ob der Inhalt der einzelnen Zeilen aus der einen Spalte in irgendeiner Zeile der anderen Spalte vorhanden ist.

Ja, das ist instr(). Ich hab allerdings die Syntax nicht im Kopf, müßte aber in der Hilfe drinstehen (die fackelt mir im Moment dauernd ab, sonst würde ich dir die Syntax posten). Instr vergleicht 2 Strings miteinander und wenn einer im anderen enthalten ist, gibt die Funktion die Stelle zurück an der der erste String steht.

Das ganze packst du dann in 2 verschachtelte Schleifen´, wie im Excelbeispiel oben, damit alle Kombinationen durchlaufen werden.

Ich hoffe, das hilft dir weiter....

Aber jetzt noch mal ne blöde Frage: An welche Stelle der 3. Spalte stellst du denn das Ergebnis. Du mußt dich doch auf irgendwas beziehen, bzw. dein Ergebnis mit einem Index in Bezug bringen?? :confused: Deswegen auch die Frage ob es verschiedene Tabellen sind. Du kannst doch nicht die 3 Spalten wahllos durcheinanderwürfeln.... :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Wolle

Ja, das ist instr(). Ich hab allerdings die Syntax nicht im Kopf, müßte aber in der Hilfe drinstehen (die fackelt mir im Moment dauernd ab, sonst würde ich dir die Syntax posten). Instr vergleicht 2 Strings miteinander und wenn einer im anderen enthalten ist, gibt die Funktion die Stelle zurück an der der erste String steht.

Das ganze packst du dann in 2 verschachtelte Schleifen´, wie im Excelbeispiel oben, damit alle Kombinationen durchlaufen werden.

Ich hoffe, das hilft dir weiter....

Aber jetzt noch mal ne blöde Frage: An welche Stelle der 3. Spalte stellst du denn das Ergebnis. Du mußt dich doch auf irgendwas beziehen, bzw. dein Ergebnis mit einem Index in Bezug bringen?? :confused: Deswegen auch die Frage ob es verschiedene Tabellen sind. Du kannst doch nicht die 3 Spalten wahllos durcheinanderwürfeln.... :confused:

instr...., so weit war ich auch, das Prob ist die Hilfe, ätzender kann sie unter Access 2000 wirklich nicht sein!!! in der Msdn, naja, da muss man echt suchen, bis man was findet.

ich weiß echt nicht, wie ich dir das erklären soll. viell. ist das mit der dritten spalte auch einfach nur ne blöde idee, ich hab das einfach nur deswegen so machen wollen, damit ich sehe, welcher datensatz denn nun nem anderen ähnelt u. da dacht ich, das wäre die einfachste lösung.

viell. würdest du es anders machen?? könnts mir ja was vorschlagen??? :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

So hab ich versucht das ganze zu meistern, aber da ist natürlich ein Fehler drin.

Aber wirklich weiter komm ich jetzt auch nicht, obwohl ich weiß, dass dort ein Fehler drin ist, bwz. mehrere. :confused:

Function Spaltenvergleich() As String

Dim arrText As String, sFeld3 As String, sFeld4 As String

Dim i%, j%

j = 1: i = 1

For i = 1 To 500

For j = 1 To 432

If arrText(0, i) = arrText(1, j) Then GoTo jumpa

Next j

jumpa:

If arrText(0, i) <> arrText(1, j) Then GoTo jumpb

sFeld3(i, 3) = "gleich mit Spalt2 Zeile " & j

sFeld4(j, 4) = "gleich mit Spalt1 Zeile " & i

jumpb:

Next i

End Function

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Savanna

instr...., so weit war ich auch, das Prob ist die Hilfe, ätzender kann sie unter Access 2000 wirklich nicht sein!!! in der Msdn, naja, da muss man echt suchen, bis man was findet.

Gib doch einfach mal instr im Code ein und drück F1, dann kommt man meistens an die richtige Stelle...

Original geschrieben von Savanna

ich hab das einfach nur deswegen so machen wollen, damit ich sehe, welcher datensatz denn nun nem anderen ähnelt u. da dacht ich, das wäre die einfachste lösung.

Das siehst du doch so auch nicht. Du vergleichst ja nicht nur die 2 Werte innerhalb eines Datensatzes, sondern jeden Wert mit jedem. In welche Zeile schreibst du den Gleichen Wert dann. In die passende Zeile der ersten Spalte, oder in die passende Zeile der 2. Spalte?? Spätestens wenn ein String in mehreren anderen vorkommt wirft es dir alles durcheinander.

Ich würde die in eine neue Tabelle machen, evt noch mit angeben, aus welchen Datensätzen der Wert stammt (z.B. mit dem Index aus deiner ersten Tabelle)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Savanna

So hab ich versucht das ganze zu meistern, aber da ist natürlich ein Fehler drin.

Du hast die Schleifen nicht richtig verschachtelt....

Das muß in etwa so aussehen:



for i =1 to 500

for j=1 to 432


if instr(arrText(0,i), arrText(1,j),1) <> 0 then


Schreibe Datensatz in Tabelle


end if

next j

next i

Ich hab gerade auf einem anderem Rechner eine funktionierende Hilfe gefunden.

instr(zuDurchsuchenderText, GesuchterText, 1)

Heist, du mußt in der Klammer erst den Text angeben, der durchsucht werden soll, dann mit Komma getrennt, der Text, der gesucht werden soll. Die 1 steht für einen Textvergleich. Das ganze gibt dir die Stelle im durchsuchten Text zurück, an der der gesuchte Text anfängt...

Ich hoffe das war halbwegs verstandlich formuliert... ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Wolle

instr(zuDurchsuchenderText, GesuchterText, 1)

Heist, du mußt in der Klammer erst den Text angeben, der durchsucht werden soll, dann mit Komma getrennt, der Text, der gesucht werden soll. Die 1 steht für einen Textvergleich. Das ganze gibt dir die Stelle im durchsuchten Text zurück, an der der gesuchte Text anfängt...

Ich hoffe das war halbwegs verstandlich formuliert... ;)

Ok, bin jetzt dabei, das umzusetzen.

Danke erstmal!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...