Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1676to1680
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
Inhaltsverzeichnis

Spaltenvergleich per Zeile und Zelle kopieren

Spaltenvergleich per Zeile und Zelle kopieren
07.03.2019 20:40:52
Kiener
Guten Abend,
ich versuche jetzt schon seit Längerem erfolglos ein Makro zu kreieren
das folgendes erledigen soll;
in einer Tabelle mit ca 100 Zeilen und 7 Spalten soll festgestellt werden,
ob eine zweite Zeile mit den gleichen Werten in zB Spalte 3 und Spalte 5 vorhanden ist.
Ist dies der Fall, soll aus der zweiten Zeile der Wert aus Spalte 1 kopiert werden
und in die erste Zeile der ersten Spalte zum bestehenden Wert
(am besten mit einem / als Trennzeichen) hinzugefügt werden.
Ich hoffe auf Eure Hilfe und bedanke mich schon vorab für Eure Mühe
Grüße Oliver

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spaltenvergleich per Zeile und Zelle kopieren
07.03.2019 23:57:09
fcs
Hallo Oliver,
etwa wie folgt sollte es funktionieren.
LG
Franz
Sub Doppelte_Finden_Werte_uebernehmen()
Dim wks As Worksheet
Dim lngZei As Long, lngZei2 As Long
Dim varWert1, varWert2, strErgebnis As String
Dim arrData, arrDoppelt() As Boolean
Dim sTrenn As String
Dim bolDoppelt As Boolean
Set wks = ActiveSheet
sTrenn = ";"
With wks
lngZei = .UsedRange.Row + .UsedRange.Rows.Count - 1
arrData = .Range(.Cells(1, 1), .Cells(lngZei, 7))
ReDim arrDoppelt(LBound(arrData, 1) To UBound(arrData, 1))
For lngZei = LBound(arrData, 1) To UBound(arrData, 1)
If arrDoppelt(lngZei) = False Then
bolDoppelt = False
varWert1 = arrData(lngZei, 3)
varWert2 = arrData(lngZei, 5)
strErgebnis = arrData(lngZei, 1)
For lngZei2 = lngZei + 1 To UBound(arrData, 1)
If varWert1 = arrData(lngZei2, 3) And varWert2 = arrData(lngZei2, 5) Then
arrDoppelt(lngZei2) = True
strErgebnis = strErgebnis & sTrenn & arrData(lngZei2, 1)
bolDoppelt = True
.Cells(lngZei2, 8) = "doppelt"
End If
Next
If bolDoppelt = True Then
.Cells(lngZei, 1) = strErgebnis
End If
End If
Next
End With
End Sub

Anzeige
AW: Spaltenvergleich per Zeile und Zelle kopieren
08.03.2019 20:41:13
Kiener
Hallo Franz,
das sieht wirklich schon gut aus!
Habe jetzt das Problem das noch eine dritte Spalte in die Überprüfung mit eingebunden werden muss.
Es handelt sich jetzt um die Spalten 5, 7 + 8.
Ich habe versucht dein Makro umzuschreiben, bin aber kläglich gescheitert.
Hoffe du kannst mir noch einmal behilflich sein.
Danke und Grüße
Oliver
AW: Spaltenvergleich per Zeile und Zelle kopieren
09.03.2019 03:38:45
fcs
Hallo Oliver,
mit folgenden Anpassungen (ungetestet) sollte es funktionieren.
LG
Franz
Sub Doppelte_Finden_Werte_uebernehmen()
Dim wks As Worksheet
Dim lngZei As Long, lngZei2 As Long
Dim varWert1, varWert2, varWert3, strErgebnis As String
Dim arrData, arrDoppelt() As Boolean
Dim sTrenn As String
Dim bolDoppelt As Boolean, spaDop as long
Set wks = ActiveSheet
sTrenn = ";"
spaDop = 9 'Spalte I - Spalte zur markierung doppeter Einträge
With wks
lngZei = .UsedRange.Row + .UsedRange.Rows.Count - 1
arrData = .Range(.Cells(1, 1), .Cells(lngZei, 8))
ReDim arrDoppelt(LBound(arrData, 1) To UBound(arrData, 1))
For lngZei = LBound(arrData, 1) To UBound(arrData, 1)
If arrDoppelt(lngZei) = False Then
bolDoppelt = False
varWert1 = arrData(lngZei, 5)
varWert2 = arrData(lngZei, 7)
varWert3 = arrData(lngZei, 8)
strErgebnis = arrData(lngZei, 1)
For lngZei2 = lngZei + 1 To UBound(arrData, 1)
If varWert1 = arrData(lngZei2, 5) And varWert2 = arrData(lngZei2, 7) _
And varWert3 = arrData(lngZei2, 8) Then
arrDoppelt(lngZei2) = True
strErgebnis = strErgebnis & sTrenn & arrData(lngZei2, 1)
bolDoppelt = True
.Cells(lngZei2, spaDop) = "doppelt"
End If
Next
If bolDoppelt = True Then
.Cells(lngZei, 1) = strErgebnis
End If
End If
Next
End With
End Sub

Anzeige
AW: Spaltenvergleich per Zeile und Zelle kopieren
09.03.2019 17:22:52
Kiener
Hallo Franz,
das funktioniert wirklich sehr gut!
Will dich nicht nerven,
wäre es dir dennoch möglich das Makro so zu erweitern
das die zweite Zeile nach dem kopieren gelöscht wird?
Vielen Dank
Oliver
AW: Spaltenvergleich per Zeile und Zelle kopieren
09.03.2019 19:28:22
Kiener
Hallo Franz,
noch eine Sache wäre sensationell,
ist es möglich das die Zeilen in denen keine Daten vorhanden sind
ausgenommen werden.
Sorry für die vielen Fragen und nochmals Danke für deine Mühe
Grüße
Oliver
AW: Spaltenvergleich per Zeile und Zelle kopieren
09.03.2019 21:38:15
fcs
Hallo Oliver,
hier das Makro angepasst inkl. Kommentaren zum leichteren Verständnis.
LG
Franz
Sub Doppelte_Finden_Werte_uebernehmen()
Dim wks As Worksheet
Dim lngZei As Long, lngZei2 As Long
Dim varWert1, varWert2, varWert3, strErgebnis As String
Dim arrData, arrDoppelt() As Boolean
Dim sTrenn As String
Dim bolDoppelt As Boolean, spaDop As Long
Set wks = ActiveSheet
sTrenn = ";"
spaDop = 9 'Spalte I - leere Spalte zur Markierung doppelter Einträge
With wks
'letzte benutzte Zeile im Tabellenblatt
lngZei = .UsedRange.Row + .UsedRange.Rows.Count - 1
'Daten in Array einlesen zur Beschleunigung des Makros
arrData = .Range(.Cells(1, 1), .Cells(lngZei, 8))
'Array zum Merken doppelter Zeilen dimensionieren
ReDim arrDoppelt(LBound(arrData, 1) To UBound(arrData, 1))
For lngZei = LBound(arrData, 1) To UBound(arrData, 1)
If arrData(lngZei, 1)  "" Then 'Zeile ohne Wert in Spalte A überspringen
If arrDoppelt(lngZei) = False Then ' als doppelt markierte Zeile überspringen
bolDoppelt = False 'merker für doppelt zurücksetzen
'Vergleichswerte in Variablen merken
varWert1 = arrData(lngZei, 5)
varWert2 = arrData(lngZei, 7)
varWert3 = arrData(lngZei, 8)
strErgebnis = arrData(lngZei, 1) 'Wert in Spalte A als Ergebnis übernehmen
'Zeilen bis zum Ende der Liste mit Vergleichswerten vergleichen
For lngZei2 = lngZei + 1 To UBound(arrData, 1)
If varWert1 = arrData(lngZei2, 5) And varWert2 = arrData(lngZei2, 7) _
And varWert3 = arrData(lngZei2, 8) Then
arrDoppelt(lngZei2) = True 'Zeile als doppelt markieren
'Trennzeichen und Wert in Spalte A an das Ergebnis anfügen
strErgebnis = strErgebnis & sTrenn & arrData(lngZei2, 1)
bolDoppelt = True 'Merker für doppelt setzen
.Cells(lngZei2, spaDop) = "doppelt"
End If
Next
If bolDoppelt = True Then
.Cells(lngZei, 1) = strErgebnis
End If
End If
End If
Next
'Als doppelt markierte Zeilen löschen
With .Range(.Cells(1, spaDop), .Cells(UBound(arrData), spaDop))
If Application.WorksheetFunction.CountA(.Cells) > 0 Then
.SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow.Delete shift:= _
xlShiftUp
End If
End With
End With
End Sub

Anzeige
AW: Spaltenvergleich per Zeile und Zelle kopieren
10.03.2019 11:19:17
Kiener
Hallo Franz,
ich kann dir nicht genug danken,
für deine Geduld und für das perfekte Ergebnis.
Grüße
Oliver

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige