Seite 1 von 1

Ist so ein Makro in Calc möglich?

Verfasst: Mi, 24.01.2024 16:49
von idefix2
Ich grüble schon eine Weile herum, ob ich die folgende Aufgabe in Calc mit einem Makro lösen kann:
Ich würde gerne automatisch von allen Zeilen, die mehrfach identisch vorkommen, alle Zeilen außer der ersten löschen. Mir fällt leider kein brauchbarer Ansatz ein.

Re: Ist so ein Makro in Calc möglich?

Verfasst: Mi, 24.01.2024 17:11
von Karolus
Hallo
Da ist kein Makrogewurstel nötig!
→Daten→Filter→StandardFilter→→[x]ohne Duplikate tuts auch.

Re: Ist so ein Makro in Calc möglich?

Verfasst: Mi, 24.01.2024 18:02
von idefix2
Ah, danke für die Antwort - ich hätte die Aufgabe doch gleich richtig im Detail beschreiben sollen...
Es ist leider insofern komplizierter, als die erste Spalte der Tabelle beim Erkennen der Duplikate nicht berücksichtigt werden soll, d.h. Zeilen, die sich nur in der ersten Spalte unterscheiden, sollen als identisch betrachtet werden und nur die oberste von diesen Zeilen soll erhalten bleiben. Den Wert in Spalte 1 in der obersten Zeile brauche ich leider auch, sodass ich die Spalte nicht einfach herauslöschen kann.

Re: Ist so ein Makro in Calc möglich?

Verfasst: Mi, 24.01.2024 19:14
von Karolus
Es ist leider insofern komplizierter, als die erste Spalte der Tabelle beim Erkennen der Duplikate nicht berücksichtigt werden soll, d.h. Zeilen, die sich nur in der ersten Spalte unterscheiden, sollen als identisch betrachtet werden und nur die oberste von diesen Zeilen soll erhalten bleiben.
Was denn nun?

Re: Ist so ein Makro in Calc möglich?

Verfasst: Mi, 24.01.2024 22:11
von idefix2
Karolus hat geschrieben: Mi, 24.01.2024 19:14 Was denn nun?
War das jetzt von mir unklar formuliert?
Die erste Spalte soll beim Erkennen von Duplikaten nicht berücksichtigt werden, d.h. wenn sich zwei Zeilen nur in der ersten Spalte und sonst nicht unterscheiden, sollen die Zeilen als identisch betrachtet und die weiter unten liegende Zeile gelöscht werden.

In der ersten Spalte steht das Datum, wenn an zwei verschiedenen Tagen die gleichen Werte erfasst wurden, und sich die Zeilen nur im Datum in Spalte 1 unterscheiden, sollen von diesen Zeilen alle außer der ältesten, die zuoberst steht, aus der Tabelle entfernt werden.

Re: Wie kann man Spalte A ausschliessen von »Filtern→ohne Duplikate«

Verfasst: Do, 25.01.2024 08:40
von Karolus
Hallo

Selektiere explizit Spalte B bis Spalte ?, und filtere darauf.

Re: Ist so ein Makro in Calc möglich?

Verfasst: Do, 25.01.2024 23:43
von Hiker
idefix2 hat geschrieben: Mi, 24.01.2024 16:49 .... Mir fällt leider kein brauchbarer Ansatz ein.
Du berechnest einfach einen Hash-Code über die Relevanten felder und wendest dann den Vorschlag von Karolus an: Filtern ohne Duplikate.

Re: Ist so ein Makro in Calc möglich?

Verfasst: Fr, 26.01.2024 17:28
von little fingers
Hallo
hilft dieses Makro?
Hier wird nur der doppelte Eintrag, z.B. in der Spalte F gelöscht aber nicht die Zeile.

Code: Alles auswählen

	Sub doppelte_loeschen

	ozeile=ThisComponent.CurrentController.ActiveSheet.Columns(5) 'Spalte F
	oleer=ozeile.queryemptycells
	oletzter=oleer(oleer.count-1)
	erg = oletzter.rangeaddress.startrow-1
	
	With ThisComponent.CurrentController.ActiveSheet
		For i = 0 To erg
			k = .getCellByPosition(5, i).String
			For j = i+1 To erg
				If .getCellByPosition(5, j).String = k Then
					For jj = 0 To 5
						.getCellByPosition(jj, j).String = ""
					Next jj
				End If
			Next j
		Next i
			
'msgbox ("doppelte Einträge wurden gelöscht")
	End With
End Sub
Gruss Ingo

Re: Wie kann man Spalte A ausschliessen von »Filtern→ohne Duplikate«

Verfasst: Mo, 29.01.2024 12:45
von idefix2
Karolus hat geschrieben: Do, 25.01.2024 08:40 Hallo

Selektiere explizit Spalte B bis Spalte ?, und filtere darauf.
Ah, danke - mir war nicht klar, dass man beim Filtern Spalten ausschließen kann. Ganz klar ist mir noch immer nicht, wie das genau funktioniert und was das genau macht, aber ich denke, mit etwas herumprobieren werde ich draufkommen :)

Re: Ist so ein Makro in Calc möglich?

Verfasst: Mo, 29.01.2024 12:49
von idefix2
little fingers hat geschrieben: Fr, 26.01.2024 17:28 Hallo
hilft dieses Makro?
Hier wird nur der doppelte Eintrag, z.B. in der Spalte F gelöscht aber nicht die Zeile.

Code: Alles auswählen

	Sub doppelte_loeschen

	ozeile=ThisComponent.CurrentController.ActiveSheet.Columns(5) 'Spalte F
	oleer=ozeile.queryemptycells
	oletzter=oleer(oleer.count-1)
	erg = oletzter.rangeaddress.startrow-1
	
	With ThisComponent.CurrentController.ActiveSheet
		For i = 0 To erg
			k = .getCellByPosition(5, i).String
			For j = i+1 To erg
				If .getCellByPosition(5, j).String = k Then
					For jj = 0 To 5
						.getCellByPosition(jj, j).String = ""
					Next jj
				End If
			Next j
		Next i
			
'msgbox ("doppelte Einträge wurden gelöscht")
	End With
End Sub
Gruss Ingo
Danke! Nachdem das Filterwerkzeug anscheinend mächtiger ist, als ich dachte, werde ich das wahrscheinlich ohne Makro lösen können. Trotzdem ist das Makro, das du hier gepostet hast, sehr hilfreich und eine super Vorlage für andere Sachen, die ich brauche.