Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
704to708
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
704to708
704to708
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

SpaltenVergleich mittels VBA

SpaltenVergleich mittels VBA
12.12.2005 15:46:56
Sebastian
Hallo,
ich habe folgende Probleme.....
Problem 1:.....und zwar muss ich über ein Makro zwei Spalten aus zwei verschieden Tabellen vergleichen. Die Zellen der beiden Spalten enthalten teilweise den gleichen Inhalt. Ich muss die Inhalte die in beiden Tabellen enthalten sind dann in eine neue Tabelle kopieren.
Problem 2:.....das Ganze müsste per Userform gesteuert werden können, also welche Spalte aus beiden Tabellen ausgelesen werden muss (da es sich nicht um Einheitstabllen handelt) und wohin es dann kopiert werden soll! Das ist denke ich das kleinere Problem, das größere wird wohl das Makro sein.
Habe mir schon Literatur besorgt und beschäftige mich mit dem Thema, wäre aber trotzdem über jede Hilfe dankbar!
Danke Sebastian

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SpaltenVergleich mittels VBA
12.12.2005 17:43:26
Peterchen
Hi Sebastian,
hier eine einfache Starthilfe, die Datei ist angehängt.
Die Prozedur 'gleiche_spalten' ist der Kern, dort wird jeder Wert mit jedem
verglichen, und eingetragen. Solltest du doppelte Werte haben werden diese
entsprechend oft eingetragen, das habe ich jetzt nicht abgefangen.

Sub Test ist zur Demonstartion, und mit GetRange ist schon mal eine Einfache
Auswahl da, die du dann natürlich schöner machen kannst. ;-))
Viel Erfolg Peterchen

Sub gleiche_spalten( _
ByRef sp1 As Range, _
ByRef sp2 As Range, _
ByRef spz As Range _
)
Dim zelle1 As Range
Dim zelle2 As Range
Dim ziel_zeile As Long
ziel_zeile = spz.Row
For Each zelle1 In sp1.Cells
If zelle1.Value = "" Then Exit For
For Each zelle2 In sp2.Cells
If zelle2.Value = "" Then Exit For
If zelle1.Value = zelle2.Value Then
spz.Parent.Cells(ziel_zeile, spz.Column).Value = zelle1.Value
ziel_zeile = ziel_zeile + 1
End If
Next
Next
End Sub


Sub test()
Dim sp1 As Range
Dim sp2 As Range
Dim spz As Range
Set sp1 = GetRange("Quelle 1", "Tabelle1", "A")
If sp1 Is Nothing Then Exit Sub
Set sp2 = GetRange("Quelle 2", "Tabelle2", "A")
If sp2 Is Nothing Then Exit Sub
Set spz = GetRange("Ziel", "Tabelle3", "A")
If spz Is Nothing Then Exit Sub
Call gleiche_spalten(sp1, sp2, spz)
End Sub


Function GetRange( _
ByVal titel As String, _
Optional ByVal tabelle As String = "", _
Optional ByVal spalte As String = "" _
) As Range
On Error Resume Next
Do
tabelle = InputBox(titel & " Tabelle:", titel, tabelle)
If tabelle <> "" Then _
spalte = InputBox(titel & "Spalte 1", titel, spalte)
If tabelle = "" Or spalte = "" Then
Set GetRange = Nothing
Exit Function
End If
Set GetRange = Worksheets(tabelle).Columns(spalte)
If Err.Number = 0 Then Exit Do
MsgBox "Fehler bei der Eingabe, bitte wiederholen."
Err.Clear
Loop
End Function

https://www.herber.de/bbs/user/29158.xls
Anzeige
AW: SpaltenVergleich mittels VBA
13.12.2005 08:58:35
Sebastian
Bestendank Peterchen!
Das hat mir enorm weitergeholfen. Ich werde es jetzt versuchen selber soweit zu modifizieren wie ich es brauche. Da nicht nur die doppelten, sondern alle Werte in die neue Tabelle eingetragen werden sollen und die doppelten nur einfach! Aber daran werde ich mich jetzt mal ausprobieren, sonst wird mir noch langweilig ;)! Falls dann noch fragen aufkommen sollten werde ich wieder etwas posten!
Nur noch eine kleine Frage: Wenn ich diese Funktion dann als Add In speichern will, muss ich dann das was du in Tabelle1 eingegeben hast in Diese Arbeitsmappe eingeben? Oder reicht es wenn ich deine Tabelle als .xla speicher?
Danke Sebastian
Anzeige
AW: SpaltenVergleich mittels VBA
13.12.2005 13:39:37
Sebastian
Hi nochmal...
..das Makro von peterchen funktioniert bestens. Allerdings nicht ganz nach meinen Bedürfnissen, habe selber schon versucht es zu modifizieren, bin allerdings nur gescheitert.
Hier erstmal der code von Peterchen:

Sub gleiche_spalten( _
ByRef sp1 As Range, _
ByRef sp2 As Range, _
ByRef spz As Range _
)
Dim zelle1 As Range
Dim zelle2 As Range
Dim ziel_zeile As Long
ziel_zeile = spz.Row
For Each zelle1 In sp1.Cells
If zelle1.Value = "" Then Exit For
For Each zelle2 In sp2.Cells
If zelle2.Value = "" Then Exit For
If zelle1.Value = zelle2.Value Then
spz.Parent.Cells(ziel_zeile, spz.Column).Value = zelle1.Value
ziel_zeile = ziel_zeile + 1
End If
Next
Next
End Sub


Sub test()
Dim sp1 As Range
Dim sp2 As Range
Dim spz As Range
Set sp1 = GetRange("Quelle 1", "Tabelle1", "A")
If sp1 Is Nothing Then Exit Sub
Set sp2 = GetRange("Quelle 2", "Tabelle2", "A")
If sp2 Is Nothing Then Exit Sub
Set spz = GetRange("Ziel", "Tabelle3", "A")
If spz Is Nothing Then Exit Sub
Call gleiche_spalten(sp1, sp2, spz)
End Sub


Function GetRange( _
ByVal titel As String, _
Optional ByVal tabelle As String = "", _
Optional ByVal spalte As String = "" _
) As Range
On Error Resume Next
Do
tabelle = InputBox(titel & " Tabelle:", titel, tabelle)
If tabelle <> "" Then _
spalte = InputBox(titel & "Spalte 1", titel, spalte)
If tabelle = "" Or spalte = "" Then
Set GetRange = Nothing
Exit Function
End If
Set GetRange = Worksheets(tabelle).Columns(spalte)
If Err.Number = 0 Then Exit Do
MsgBox "Fehler bei der Eingabe, bitte wiederholen."
Err.Clear
Loop
End Function

Da meine Werte in der Tabelle nicht beispielsweise bei A1 anfangen und meistens noch etwas darüber steht oder Leerzeilen vorhanden sind, wirkt das eigentliche Makro nicht mehr!
Gibt es irgendeine Möglichkeit, einen bestimmten Punkt der Spalte z.B. A5 einzugeben?
Und 2. wie kann man das Problem mit den Leerzeilen angehen, das trotz Leerzeile das Makro nicht auffhört zu vergleichen? Ist so etwas möglich?
Zum Schluss noch, der Vergleich sollte die Werte wie folgt einordnen: eine Spalte = nicht in Tabelle A, eine Spalte nicht in Tabelle B und die Letzte Spalte = in Beiden Tabellen!
Ich weis das ist ne Menge Arbeit, aber ich wäre echt über jede Hilfe dankbar!!
Dankeschön
Sebastian
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige