Zeile vergleichen und löschen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

hooligan
Beiträge: 4
Registriert: Sa, 02.01.2010 21:06

Zeile vergleichen und löschen

Beitrag von hooligan »

Hallo,

ich hab schon im Calc Forum gefragt und dort wurde gemeint ich sollte mich hier mal melden, da es ist Makros einfacher gehen würde.
Ich probiere mal mich kurz und bündig zu halten.
zeilevergleichen.ods
(9.65 KiB) 59-mal heruntergeladen
Ich habe 2x4 Spalten mit fast den gleichen Informationen. Die einzige Information die anders ist, ist die Laufzeit die entweder niedriger oder höher ist.
Nun hätte ich gerne, das die 1. Zeile des linken Blockes "eingelesen" wird und der der selbe Spieler im rechten Block gesucht wird und das ermittelt wird, welche Laufzeit die geringere ist. Nun soll der Spieler mit der höheren Laufzeit aus der Spalte gelöscht werden in der er langsamer ist, sodass nur noch der schnellste Weg angezeigt wird.
Beispiel anhand der Datei : Spieler A wird im linken und rechten Block gesucht und verglichen. Spieler A wird aus dem linken Block gelöscht weil er 2 Minuten langsamer ist als aus dem rechten Block. Spieler A soll jetzt nur noch im rechten Block wiederzufinden sein.

EDIT : Meistens sind die einzelnen Spieler versetzt, sodass sie nicht immer in der gleichen Spalte stehen, falls das wissenswert ist.

Vielen Dank im vorraus
Gruß Patrick
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Zeile vergleichen und löschen

Beitrag von Charly »

Hallo Hooligan!

Wenn ich deine ganzen Angaben lese, soll die Änderung in der Ausgangstabelle erfolgen und nicht wie in deinem Muster unterhalb der Ursprungsdaten. Ich habe mal dazu ein Makro geschrieben.

Gruß
Charly
Dateianhänge
zeilevergleichen.ods
(9.8 KiB) 52-mal heruntergeladen
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Zeile vergleichen und löschen

Beitrag von DPunch »

In diesem Bereich

Code: Alles auswählen

If Wert2 < Wert1 then
Bereich = Blatt.getCellRangeByPosition(0,I,3,I).getRangeAddress()
else
muss allerdings noch die Laufvariable für die linke Seite der Spieler runtergesetzt werden, also

Code: Alles auswählen

If Wert2 < Wert1 then
Bereich = Blatt.getCellRangeByPosition(0,I,3,I).getRangeAddress()
I = I - 1
else
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Zeile vergleichen und löschen

Beitrag von Charly »

Hallo!

Ich habe in meinem Makro noch einen Fehler entdeckt. Wenn ich auf der linken Seite einen Eintrag lösche muss ich den Zeilenschalter um 1 zurücksetzen, da sonst der nächste Spieler nicht überprüft wird, sondern erst der übernächste.
Auf der linken Seite ist dies nicht nötig, da das Makro immer alle Zeilen überprüft.
Hier der berichtigte Code:

Code: Alles auswählen

Sub Zeilenvergleichen()

Dok = ThisComponent
Controller = Dok.CurrentController
Blatt = Controller.ActiveSheet

'letzte Zeile suchen
Cursor = Blatt.createCursor()
Cursor.goToEndOfUsedArea(false)
Ende = Cursor.getRangeAddress().Endrow

For I = 2 To Ende

Spieler1 = Blatt.getCellByPosition(0,I).string

For I1 = 2 To Ende
Spieler2 = Blatt.getCellByPosition(5,I1).string

If Spieler1 = Spieler2 then
Wert1 = Blatt.getCellByPosition(1,I).string
Wert2 = Blatt.getCellByPosition(6,I1).string
If Wert2 < Wert1 then
Bereich = Blatt.getCellRangeByPosition(0,I,3,I).getRangeAddress()
Blatt.removeRange(Bereich,com.sun.star.sheet.CellDeleteMode.UP)
I = I-1
exit for
else
Bereich = Blatt.getCellRangeByPosition(5,I1,8,I1).getRangeAddress
Blatt.removeRange(Bereich,com.sun.star.sheet.CellDeleteMode.UP)
exit for
end if
end if
next
next
End Sub
Gruß
Charly
hooligan
Beiträge: 4
Registriert: Sa, 02.01.2010 21:06

Re: Zeile vergleichen und löschen

Beitrag von hooligan »

Genau das hab ich gesucht. Vielen vielen Dank für die Lösung. Läuft perfekt ohne Schwierigkeiten.
Antworten