Anzeige
Archiv - Navigation
1476to1480
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

duplikat Zelle löschen aber 1 Zelle speichern

duplikat Zelle löschen aber 1 Zelle speichern
29.02.2016 16:16:15
Nino

Hallo liebe Gemeinde!
Ich habe eine größere Tabelle welche sich monatlich erweitert! Nun möchte ich gerne wenn "Spalte G" sowie "Spalte I" den gleichen Wert beinhaltet, das jeweilige Duplikat löschen und nur die oberste Zeile stehen lassen!
Soweit habe ich das schon hin bekommen da ich zur Erleichterung einfach wenn in "Spalte G" ein Wert doppelt ist den händisch gelöscht habe und dann über ein Makro die Zeile habe löschen lassen! Dafür ist die Datenmenge allerdings weit aus zu hoch!!
Mein großes Problem ist allerdings das wenn ich die Duplikate in "Spalte I" lösche ich die Werte aus Spalte P in der übrig gebliebenen Zeile in "Spalte S" aufliste ohne lästige Dezimalstellen!
In der beigefügten Excel Datei habe ich mal versucht mein Problem ersichtlich zu machen!
https://www.herber.de/bbs/user/103973.xlsx
Hoffe dies ist nachzuvollziehen und der ein oder andere hat eine gute Idee!!
Vielen, Vielen Dank schon einmal für die Bemühungen! Vielleicht hat so mein freier Tag ein Ziel gehabt!
Danke

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nachgefragt ...
29.02.2016 16:28:11
... neopa C
Hallo Nino,
... das könnte man auch mittels Formeln lösen wenn es nicht viele zig tausende Datensätze sind bzw. Du unbedingt eine VBA-Lösung möchtest?
Das Ergebnis soll in einem zweiten Tabellenblatt erstellt werden? Es ist immer die jeweils erste Zeile eines identischen Datensatzes bzgl. der Werte in Spalte G und I Du übernehmen willst.
Gruß Werner
.. , - ...

AW: duplikat Zelle löschen aber 1 Zelle speichern
29.02.2016 16:53:24
Steve
Hallo Nino,
etwa so?:
Sub Test()
Dim wks As Worksheet
Dim sFirstAddress As String, rZelle As Range
Dim i As Long
Set wks = Sheets("Tabelle2")
For i = wks.Cells(wks.Rows.Count, "G").End(xlUp).Row To 2 Step -1
If wks.Cells(i, "G") <> "" Then
With wks.Range("G:G") 'Suchbereich
Set rZelle = .Find(What:=wks.Cells(i, "G"), LookAt:=xlWhole)
If Not rZelle Is Nothing Then
sFirstAddress = rZelle.Address
Do
If rZelle.Offset(0, 2) = wks.Cells(i, "G").Offset(0, 2) And _
rZelle.Row <> i Then
If wks.Cells(rZelle.Row, "S") = "" Then
wks.Cells(rZelle.Row, "S") = Round(wks.Cells(rZelle.Row, "P"), 0) &  _
_
"; " & Round(wks.Cells(i, "P"), 0)
Else
wks.Cells(rZelle.Row, "S") = wks.Cells(rZelle.Row, "S") & _
"; " & Round(wks.Cells(i, "P"), 0)
End If
wks.Rows(i).Delete
Exit Do
End If
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFirstAddress
End If
End With
End If
Next i
End Sub
lg Steve

Anzeige
Beschreibung und BspDatei passen zwar ...
29.02.2016 19:37:53
Luc:-?
…nicht ganz zusammen, Nino,
aber sicher meinst du das so:
AW: Beschreibung und BspDatei passen zwar ...
29.02.2016 20:06:30
Nino
Männers (Luc:-?; neopa C; Steve) wie soll ich sagen!
Ihr macht mich fertig! Das ist einfach grandios! So schnell und dann noch erklärt! Hammer! Bezüglich Recherche muss ich Dir recht geben! Aber ich war da wirklich den ganzen Tag dran und irgendwann sieht man leider den Wald vor lauter Bäumen nicht mehr!
Vielen, vielen Dank für die geballte Kompetenz Männers! Werde das mal ausprobieren und mich später nochmal melden!

Ach so, noch was, ...
29.02.2016 23:12:50
Luc:-?
…Nino,
das LöschPgm sollte zuallererst in Spalte S die Fmln durch ihre Ergebnisse ersetzen, damit sich die Fmln beim Löschen nicht falsch aktualisieren.
Luc :-?

Anzeige
oT: zu Deinem PS ...
01.03.2016 14:14:59
... neopa C
Hallo Luc,
... Deine Feststellungen sind aus meiner Sicht nur teilweise zutreffend. Das Formeln, die als Zellformeln den spez. Formelabschluss benötigen, diesen zur Definition als benannte Formeln nicht benötigen, auch nicht dann, wenn diese danach so als Zellformel eingesetzt werden, ist mir sehr wohl bekannt. Du hast noch vergessen, dass Ersteres auch auf Formeln innerhalb der bedingten Formatierung zutrifft.
Das der Eine oder Andere auch schon mal eine einfache Formel wie z.B. =MIN(A1:A7) oder =MIN({5;3;7}) schon als Matrixfunktionalitätsformel bezeichnet hat, ist mir auch schon mal "untergekommen".
Wir waren uns allerdings mE schon mal zumindest annähernd einig, welche Formeln einer Matrixfunktion(alität)sformel zuzuordnen sind und welche nicht.
Ohne dies jetzt hier nochmal auf- und auszurollen, entnehme ich Deinen hiesigen Aussagen, dass dem nicht mehr so ist. Schade. Zur Zeit fehlt es mir jedoch an der nötigen Ruhe und Zeit, um die Diskussion neu aufzulegen und oder zu vertiefen.
Gruß Werner
.. , - ...

Anzeige
Nee, nee, ich hatte das nur als deine Meinung ...
01.03.2016 15:51:26
Luc:-?
…akzeptiert, Werner,
und ja, wir müssen das nicht wieder aufrollen. Dies sollte nur ein Hinweis auf ein weiteres Bsp für meine Ansicht sein, dass Xl idR alles berechnet bzw berechnen kann, ihm in einer ZellFml aber mitunter „gesagt“ wdn muss, was tatsächlich verwendet wdn soll, weil Xl ja noch eine andere Automatik, nämlich das Variieren skalarer FktsArgumente über ein angegebenes Intervall (als ZellBereich bzw Datenfeld) hat, die in solchen Fällen Priorität besitzt (aber nur im TabBlatt!)*. Die MatrixFmlForm setzt dies dann quasi außer Kraft. Mitunter ist darüber hinaus aber noch mehr erforderlich, wie zB die Auswahl von mindestens 2 Zellen (duale, quasi-1-zellige MxFmln).
Ich gehe davon aus, dass du mit einer derartigen Einschränkung deiner Definition auf ZellFmln leben kannst. Das scheint mir auch das Grundprinzip von Xl zu sein, wobei einige Fktt, pgm-abhängig, darüber hinaus gehen.
* Das erklärt auch, warum die MxFmlForm nur im TabBlatt erforderlich und auch nur da möglich ist.
Gruß, Luc :-?

Anzeige
AW: ich kann auch so leben ;-) ...
01.03.2016 16:06:32
... neopa C
Hallo Luc,
... aber eine Einschränkung meiner Definition auf direkte Zellformeln akzeptiere ich natürlich, da es bisher meine Hauptzielrichtung war und ist.
Gruß Werner
.. , - ...

AW: duplikat Zelle löschen aber 1 Zelle speichern
29.02.2016 20:48:28
Nino
Männers (Luc:-?; neopa C; Steve) wie soll ich sagen!
Ihr macht mich fertig! Das ist einfach grandios! So schnell und dann noch erklärt! Hammer! Bezüglich Recherche muss ich Dir recht geben! Aber ich war da wirklich den ganzen Tag dran und irgendwann sieht man leider den Wald vor lauter Bäumen nicht mehr!
Vielen, vielen Dank für die geballte Kompetenz Männers! Werde das mal ausprobieren und mich später nochmal melden!
So... habe es jetzt an dem Laptop meiner Freundin versucht! Das Makro sagt mir immer Fehler beim kompilieren: Syntaxfehler
Userbild
und bei der Lösung von Luc weiss ich nicht genau wo ich das
TSListe:=VJoin(WENN((G$2:G$17=G2)*(I$2:I$17=I2);GANZZAHL(P$2:P$17);"");"; ";-1)
einfügen soll!
https://www.herber.de/bbs/user/103979.xlsx
Ich möchte eure Zeit wirklich nicht verschwenden hier, wenn Ihr es dennoch morgen früh lesen solltet und Muße habt wäre dies super!
Vielen, Vielen Dank schon einmal im Vorraus!Ich bin heute nach dem Tag leider alles andere als Aufnahmefähig! Wäre super wenn Ihr mir noch einen Tip geben könntet dazu damit ich mir das morgen noch einmal in Ruhe zu Gemüte ziehen kann!
Danke ! Ihr seit Grandios!

Anzeige
Zu deinen Fragen, ...
29.02.2016 23:44:43
Luc:-?
…Nino:
1. Der SyntaxFehler wird von der roten Zeile hervorgerufen. Hier fehlt das Round zwischen Zuweisungs-'=' und 1.Klammer '(' danach. Allerdings rundet die vbFkt Round symmetrisch auf/ab, während ich aus deinem Bsp entnehme, dass du die Dezimalen einfach abschneiden willst. Das wären dann die vbFktt Int oder Fix, wobei das Argument2⇒0 entfällt (Unterschied nur bei Behandlung negativer Zahlen).
2. TSListe ist ein definierter Name des Blattes oder der Mappe, der über das entsprechende Menü (Reiter Formeln) angelegt wdn muss. Die Bezugszeile, in der standardmäßig ein Zellverweis steht, ist stattdessen mit der gezeigten Fml zu füllen.
Achtung! Meinen Hinweis in der oberen AW im LöschPgm nicht vergessen!
Die UDF VJoin hast du in der aktuellen Version schon gefunden?
Morrn, Luc :-?

Anzeige
AW: duplikat Zelle löschen aber 1 Zelle speichern
29.02.2016 23:50:08
Daniel
Hi
im Prinzip kannst du das relativ einfach lösen, auch ohne Makro.
1. sortiere die Tabelle nach Spalte G und I, so dass alle Duplikate, die zusammengefasst werden müssen, direkt untereinander stehen.
2. in Spalte S machst du die Zusammenfassung mit folgender Formel, für jede Duplikatfolge steht das gesamtergebnis ganz oben:
=Ganzzahl(P2)&Wenn(Und(G2=G3;I2=I3);"; "&S3;"")
3. kopiere die Spalte S und füge sie an gleicher Stelle als Wert ein
4. Wende auf die Ganze Tabelle die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN mit den Spalten G und I als Kriterium an. Für jede Duplikatfolge bleibt die oberste Zeile stehen und die enthält die zusammengefassten Werte.
das geht natürlich auch als Makro und sieht dann so aus:
Sub zusammenfassen()
With ActiveSheet.Cells(1, 1).CurrentRegion
.Sort key1:=.Cells(1, 7), order1:=xlAscending, _
key2:=.Cells(1, 9), order2:=xlAscending, Header:=xlYes
With Range(.Cells(2, 19), .Cells(.Rows.Count, 19))
.FormulaR1C1 = "=Int(RC16)&IF(And(RC7=R[1]C7,RC9=R[1]C9),""; ""&R[1]C,"""")"
.Formula = .Value
End With
.RemoveDuplicates Array(7, 9), xlYes
End With
End Sub

das Makro enthält nichts anderes als die o.g. Schritte in Makroform
1. Sortieren
2. Formel einfügen
3. Formel durch Wert ersetzen
4. Duplikate entfernen.
Gruß Daniel

Anzeige
AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 08:51:17
Nino
Hi Daniel,
das funktioniert super mit dem Makro! Versuche mir heute morgen auch die Umsetzungen von den anderen nachzuvollziehen!
Das einzig kleine Problem bei deinem Makro ist, wenn ich es noch einmal betätige das er mir die Auflistung dann löscht!
Nach erste betätigen alles super!
Userbild
Nach dem nochmaligen betätigen ist dann die Auflistung weg!
Userbild
Ist es möglich die Zahl auf zu runden?
Gruß Nino und Vielen Dank!

Anzeige
AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 08:57:39
Daniel
Hi
Es gibt ja auch keinen Grund, das Makro ein zweites mal laufen zu lassen.
Du kannst dur ja noch eine Sicherheitsabfrage am Anfang einbauen, welche das Makro stoppt, wen S2 nicht leer ist.
If Range("S2").value <> "" then Exit Sub
Gruß Daniel

AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 08:20:17
Steve
Hallo Nino,
das Makro funktioniert, der Syntaxfehler ist nur durch den Browser reingekommen. Dieser hat einen zusätzlichen Zeilenumbruch reingebracht, was für VBA zu einem unverständlichen Befehl führt. Einfach die Leerzeile zwischen den zwei roten Zeilen löschen, sodass es aussieht wie bei der "Else"-Zeile darunter. Aufpassen dass nicht eventuell zwei Unterstriche am Ende der Zeile stehen.
lg Steve

Anzeige
AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 08:45:04
Nino
Hallo Steve,
Sauber, funktioniert! Habe allerdings jetzt einen Laufzeitfehler'9': Index außerhalb des gültigen Bereichs
Userbild
Gruß Nino

AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 08:49:01
Daniel
Prüf mal deinen Tabellenblattnamen.
Gruß Daniel

AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 09:00:29
Nino
Hab ich, alles "Tabelle3"
Userbild

AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 09:21:16
Nino
Hallo Daniel,
habe die Sperre eingebaut und es funktioniert! Wenn ich jetzt allerdings die Werte wöchentlich um Werte erweitere werde diese zusätzlichen nicht mehr sortiert!
Makro mit eingebauter Abfrage
Userbild
Tabelle mit erweiterten werten:
Userbild
Danke Nino

AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 09:40:56
Daniel
Hi
das hinzufügen neuer Werte ist eine neue Anforderung die du so nicht beschrieben hast.
wenn neue Daten hinzukommen, kann es dann vorkommen, dass neue Werte mit bereits bestehenden zusammen gefasst werden müssen?
kannst du mal so ne Liste zuschicken?
und bitte überlegen, ob du noch weiter Erweiterungen der Aufgabenstellung vor hast.
Gruß Daniel

AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 10:04:00
Nino
Hi Daniel,
alle neuen können zwar mit alten Werten gemischt werden bezogen auf Spalte "G" aber es handelt sich dann immer um neue Projekte sprich neue abschnitte Spalte "I" Die Werte würden dann quasi erst gemischt nachdem man Spalte "G" wieder nummerisch sortiert!
Die neuen Werte sollen quasi Anfang des Monats in die bestehende Liste eingespielt werden und komprimiert werden mit Hilfe deines super Makros.
Anschließend dann händisch (nummerisch) sortiert werden (der Ordnung halber)da es sich um SAP Ausspielungen handelt!
https://www.herber.de/bbs/user/103992.xls
Gruß Nino

AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 10:24:20
Daniel
Hi
du kannst einfach die Aktion nur mit den neu hinzugefügten Daten ausführen.
diese müssen unten stehen und in Spalte S leer sein:
Sub zusammenfassen()
With ActiveSheet.Cells(1, 1).CurrentRegion
With .Columns(19).SpecialCells(xlCellTypeBlanks)
.EntireRow.Sort key1:=.Cells(1, 7), order1:=xlAscending, _
key2:=.Cells(1, 9), order2:=xlAscending, Header:=xlNo
.FormulaR1C1 = "=Int(RC16)&IF(And(RC7=R[1]C7,RC9=R[1]C9),""; ""&R[1]C,"""")"
.Formula = .Value
.EntireRow.RemoveDuplicates Array(7, 9), xlYes
End With
End With
End Sub
Gruß Daniel

AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 11:25:40
Nino
Hi Daniel! Hatte mir das auch so gedacht im nachhinein! Das ich alle neuen sortiere und die dann in die Original Tabelle rein beame!
Wenn ich allerdings das neue Makro nehme sortiert er mir die neuen richtig ein! allerdings auch nur beim ersten mal beim zweiten mal kommt dann dieser Fehler im Makro
Userbild
Werde es dann wohl auf dem Weg machen wie du es dir gedacht hast und immer nur das neue Sortieren, dieses dann in die aktuelle laufende Liste anfügen!
Vielen Dank für Deine/Eure Hilfe! Ihre habt mir wirklich sehr geholfen! Ich werde mich ausführlich damit beschäftigen so das ich Euch in Zukunft nicht mit so leichten Sachen die Zeit raube! Nur noch mit anspruchsvollen Problemen :-)!
Danke und Gruß
Nino

AW: duplikat Zelle löschen aber 1 Zelle speichern
01.03.2016 11:51:36
Daniel
Hi
warum lässt du die Makros immer zwei mal laufen?
lass dass doch einfach sein, das ist ja nicht notwendig.
wenn das Makro über alle Datenzeilen gelaufen ist und keine neuen, noch nicht zusammengefassten Datensätze hinzugefügt wurden, dann gibt es in Spalte S keine leeren Zellen und das .SpecialCells(xlcelltypeblanks) läuft auf einen Fehler weil es keine Zellen finden kann.
Dann ist ein zweiter Makrodurchlauf aber auch nicht notwendig.
wenn du dir nicht merken kannst, ob du die Datei schon bearbeitet hast oder nicht, kannst du dir ja noch ne Sicherheitsabfrage ähnlich wie beim ersten mal einbauen:
Sub zusammenfassen()
With ActiveSheet.Cells(1, 1).CurrentRegion
If Worksheetfunction.CountBlank(.columns(19)) = 0 then Exit Sub
With .Columns(19).SpecialCells(xlCellTypeBlanks)

Gruß Daniel

Die Probleme hättest du dir mit meiner Variante...
01.03.2016 13:38:34
Luc:-?
…und einem simplen LöschPgm sparen können, Nino… :->
Luc :-?

Allerdings müsste dann die Fml noch auf die ...
01.03.2016 13:49:13
Luc:-?
…ersatzweise Hinzunahme von vorhandenen Werten in Spalte S erweitert wdn.
Luc :-?

AW: DANKE
01.03.2016 16:36:50
Nino
Hi zusammen!
Danke, so läuft es1 Das Problem mit dem mehrfachen durchlaufen ist das mehrere Personen Zugriff haben was solche Sachen immer kompliziert macht! Habe da einen eleganten Weg gesucht um nicht mehrere Tabellen pflegen zu müssen! Des weiteren will ich nicht alles sperren etc.! So ist es eine elegante Lösung Jungs!
Habt besten Dank für Eure Geduld und Mühe!
Besten Dank!!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige