Zum Inhalt springen

Inhalt zweier Spalten miteinander vergleichen (VB)


Empfohlene BeitrÀge

Geschrieben

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 :)

Geschrieben

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

  • 3 Wochen spĂ€ter...
Geschrieben

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!

Geschrieben

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:

Geschrieben
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:

Geschrieben
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:

Geschrieben
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??? :)

Geschrieben

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

Geschrieben
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)

Geschrieben
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... ;)

Geschrieben
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!

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto fĂŒr unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...