Ist so ein Makro in Calc möglich?

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

idefix2
**
Beiträge: 42
Registriert: Fr, 10.02.2017 14:25

Ist so ein Makro in Calc möglich?

Beitrag 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.
Karolus
********
Beiträge: 7442
Registriert: Mo, 02.01.2006 19:48

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

Beitrag von Karolus »

Hallo
Da ist kein Makrogewurstel nötig!
→Daten→Filter→StandardFilter→→[x]ohne Duplikate tuts auch.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
idefix2
**
Beiträge: 42
Registriert: Fr, 10.02.2017 14:25

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

Beitrag 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.
Karolus
********
Beiträge: 7442
Registriert: Mo, 02.01.2006 19:48

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

Beitrag 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?
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
idefix2
**
Beiträge: 42
Registriert: Fr, 10.02.2017 14:25

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

Beitrag 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.
Karolus
********
Beiträge: 7442
Registriert: Mo, 02.01.2006 19:48

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

Beitrag von Karolus »

Hallo

Selektiere explizit Spalte B bis Spalte ?, und filtere darauf.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Hiker
******
Beiträge: 591
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

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

Beitrag 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.
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
little fingers
***
Beiträge: 74
Registriert: Fr, 12.05.2017 15:31

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

Beitrag 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
idefix2
**
Beiträge: 42
Registriert: Fr, 10.02.2017 14:25

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

Beitrag 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 :)
idefix2
**
Beiträge: 42
Registriert: Fr, 10.02.2017 14:25

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

Beitrag 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.
Antworten