Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

VBA - Zellbereiche in verschiedenen Tabellen vergleichen





Frage

hallo, ich denke nur mit VBA gibt es fuer mein problem eine loesung, mit excel-formel habe ich keine loesung gefunden deshalb meine anfrage. für folgendes Problem wird eine Lösung gesucht: Tabelle 1 beinhaltet eine Ziffernfolge in verschiedenen Spalten und einen dazugehörigen NAmen. in Tab. 2 gibt es jeweils dieselben Ziffernfolgen wie in Tab. 1, jedoch in einer anderen Zeile und keine Namenszuordnung In Tab. 2 sollen dieselben Namen bei gleicher Ziffernfolge in der dazugehörigen Zeile erzeugt werden wie in Tab 1, wie? habe ich dies verstaendich ausgedrueckt? beispiel tabelle 1 spalte 1 spalte 2 spalte 3 spalte 4 1 2 3 mueller 2 3 1 schulz 3 2 1 krause tabelle 2 spalte 1 spalte 2 spalte 3 spalte 4 3 2 1 NAME? 1 2 3 NAME? 2 3 1 NAME? aber das mit einigen mehr datensaetzen. danke fuer jeden hinweis. joott

Antwort 1 von fürLau

Hallo

Kein VBA-HighLight - aber sollte gehen:

Option Explicit

Private Sub CommandButton1_Click()
Dim zeile As Long, Suchzeile As Long
For zeile = 1 To Worksheets("Tabelle2").Range("A65536").End(xlUp).Row
For Suchzeile = 1 To Worksheets("Tabelle1").Range("A65536").End(xlUp).Row
If Worksheets("Tabelle1").Cells(Suchzeile, 1) = _ Worksheets("Tabelle2").Cells(zeile, 1) Then
If Worksheets("Tabelle1").Cells(Suchzeile, 2) = _ Worksheets("Tabelle2").Cells(zeile, 2) Then
If Worksheets("Tabelle1").Cells(Suchzeile, 3) = _ Worksheets("Tabelle2").Cells(zeile, 3) Then
Worksheets("Tabelle2").Cells(zeile, 4) = _ Worksheets("Tabelle1").Cells(Suchzeile, 4)
End If
End If
End If
Next Suchzeile
Next zeile
End Sub


Wenn Du damit nicht klarkommst melde Dich nochmal, und wenn doch, dann auch!

Gruß

Antwort 2 von joott

ich bin absoluter vba-newbie, hatte ich wohl vergessen zu erwaehnen.
wie und wo fuege ich dieses script in das arbeitsblatt ein?
oder gibt es dazu ein gutes tutorial.
voerst vielen dank!
joott

Antwort 3 von fürLau

Hi,;-)
Guckst Du www.excelbeispiele.de unter Anleitungen Nr.4 , da werden Sie geholfen.
Gruß

Antwort 4 von joott

http://www.joott.de/excel.jpg

syntax error beim kompilieren.
irgendwas falsch kopiert?

danke fuer die anleitung!
joott

Antwort 5 von fürLau

Lösch´ mal die [h1]_[/h1]-Zeichen hinter den [h1]=[/h1]-Zeichen raus.

Antwort 6 von CaroS

Hallo joott,

und hier aus Spaß noch eine Formel-Lösung, vielleicht willst Du ja doch noch nicht gleich 100-prozentig auf die VBA-Seite überlaufen. Kostet Dich je eine Hilfsspalte in Tabelle 1 und Tabelle 2, aber die kannst Du ja verbergen (Spaltenbreite = 0).

Wenn Deine Daten so sind wie im Beispiel (Spalten 1 - 4), dann ist es ziemlich einfach, ansonsten musst Du für den SVWERWEIS selber noch mal anpassen, siehe unten.

1. Füge in beiden Tabellen eine leere (Hilfs-)Spalte vor der Namenspalte ein:
Spalte 4 markieren, Menü einfügen -- Spalten.

2. Schreibe in beiden Tabellen in Zelle D1 die Formel =A1 & B1 & C1
und kopiere die Formel in dieser Hilfsspalte so weit runter wie nötig.

3. Schreibe in Tab. 2 in Zelle E1 die Formel =SVERWEIS(D1; Tabelle1!D:E; 2; FALSCH)
Dabei bitte auf die korrekte Angabe der Matrix (von Hilfsspalte bis Namenspalte) und des Names von Tabelle 1 sowie auf den richtigen Spaltenindex achten! Die Größe der Matrix kann natürlich entsprechend begrenzt werden, statt D:E z. B. D1:E245.
Nun noch Hilfsspalten verbergen, fertig!

Gruß,
CaroS

Antwort 7 von joott

2 fürLau
ohne _ funktioniert das skript. danke!
wie kann ich das skript fuer mehr zeilen anpassen?
also wenn die tabelle z.bsp. 400 zeilen haette muesste
ich doch dann 400 zeilen vergleich eingeben? oder?
habe da mal in der schulzeit was von durchzaehlen oder
einer absprungzeile gehoert, oder so was,
das skript laeuft bis es eine leere zeile findet oder von bis.


2 CaroS
diesen ansatz hatte ich auch, bin mir aber nicht sicher ob die ziffernfolge in der hilfsspalte immer eindeutig ist, da ich noch nicht die genauen spaltenformatierungen (1 oder 2 oder 3 stellig) kenne.

vielen dank fuer die schnelle + gute hilfe
auch fuer die "newbie" fragen.

2 CaroS
ich denke bei VBA fehlt mir doch einiges
excel intern geht es ja so albwegs ;-)

eine gute woche!
joott

Antwort 8 von CaroS

Hallo joott,

eine gute und eine schlechte Nachricht. Zuerst die gute:

Stellvertretend für den "Kollegen" kann ich Dir versichern, dass das Makro unabhängig von der jeweiligen Anzahl der in Spalte A gerade gefüllten Zellen immer von A1 bis zur letzten gefüllten Zelle in Spalte A arbeitet, und zwar dank der Zeile:
For zeile = 1 To Worksheets("Tabelle2").Range("A65536").End(xlUp).Row


Auch leere Zellen zwischendurch stören da erstmal nicht, zumindest nicht den Arbeitseifer des Makros. (Ob bei vorhandenem Namen und (teilweise) leeren Zelle(n) vor dem Namen immer das "richtige" Ergebnis eintritt, ist Interpretationssache und hängt vor allem von Deinen Vorstellungen ab.)

Die schlechte, aber nicht überraschende Nachricht ist, dass natürlich kein noch so gutes Programm (Makro oder Formel) in der Lage ist, Fehler in den Daten zu beheben. Bestenfalls kann ein gutes Programm sinnvoll darauf reagieren.

Wenn aber die Kombination aus Zelle 1 (Spalte A) - Zelle 2 (Spalte B) - Zelle 3 (Spalte C) in Tabelle 1 nicht eindeutig ist, dann liefern Makro und - imho - auch der SVERWEIS den Namen, der bei der untersten Kombination steht. Das Makro könnte durch Einfügen eines Exit For vor dem ersten
End If
ganz einfach "umgedreht" werden, so dass es nicht nur effektiver arbeitet, sondern auch nach der ersten gefundenen Übereinstimmung aufhört nach weiteren zu suchen und den Namen liefert, der bei der obersten Kombination steht.

...
If Worksheets("Tabelle1").Cells(Suchzeile, 3) = _ Worksheets("Tabelle2").Cells(zeile, 3) Then 
Worksheets("Tabelle2").Cells(zeile, 4) = _ Worksheets("Tabelle1").Cells(Suchzeile, 4) 
Exit For
End If 
...


Damit dürften erstmal alle offenen Fragen beantwortet sein.

Gruß,
CaroS