Doppelte Einträge markieren

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

Moderator: Moderatoren

Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Doppelte Einträge markieren

Beitrag von Jörg »

Hallo Fachleute,
leider finde ich den Beitrag von F3K nicht wieder, in dem ich das Beispiel gefunden habe. Deshalb neues Thema.
Ich hätte es gern so, dass doppelte Einträge in den Spalten C bis M nur dann markiert werden, wenn Name und Vorname identisch sind.
Doppelte_Eintraege.ods
(22.04 KiB) 254-mal heruntergeladen
Vielen Dank
Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Doppelte Einträge markieren

Beitrag von Jörg »

Hallo,

@ Moderatoren
Ich würde dieses Thema gern nach Calc verschieben.
Im Grunde geht es ja um "bedingte Formatierung". Diese per Makro zu tun, kann ich mir ja später mal ansehen.

Ich hänge die Datei geändert nochmal dran, damit deutlich wird was ich erreichen möchte.

Die Formel
z.Bsp. für Spalte A ist glaube ich eine Möglichkeit.

Code: Alles auswählen

=ZÄHLENWENN(A1:A600;A1)>1
oder für mehr als zwei

Code: Alles auswählen

=ZÄHLENWENN(A1:A600;A1)>=2
Wie es über mehrere Spalten geht, denke so: A1:C600;A1 (Name einer möglichen Vorlage->C600:A1)
Aber, die sucht mir bsp.weise alle Müllers und markiert mir je nach Vorlage einen davon oder zwei(?)

Mein Anliegen ist, alle Müllers mit gleichem Vornamen zu markieren und anschließend alle gleichen Datumsangaben in den Zeilen dahinter.

Danke für Eure Hinweise
Gruß Jörg
Doppelte_Eintraege_1.ods
(22.23 KiB) 202-mal heruntergeladen
Gruß Jörg

Win 10 Pro AOO 4.1.15
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Doppelte Einträge markieren

Beitrag von mikeleb »

Hallo,

hier eine Lösungsvariante per bedingter Formatierung.
Dateianhänge
Doppelte_Eintraege_1.ods
(67.39 KiB) 940-mal heruntergeladen
Gruß,
mikeleb
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Doppelte Einträge markieren

Beitrag von Jörg »

Hallo mikeleb,
einfach genial. :D
Vielen, vielen Dank.
Schönes Wochenende !!

Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Doppelte Einträge markieren

Beitrag von Jörg »

Hallo mikeleb,

beim Übertragen ins Orginaldokument ist mir folgendes aufgefallen.

1. Den Zellbereich in Deiner Formel (A2:A38;B2:B38) habe ich auch auf leere Zellen erweitert. Im Dateianhang bis 45.
Nun werden diese Zellen eingefärbt, obwohl sie leer sind. Das läßt sich wie von Dir gelernt abfangen.
1. Bedingung

Code: Alles auswählen

ODER(ISTLEER($A2);ISTLEER($B2))
2. Die Leerzellen im Bereich C2:M45 kommen ohne die o.g. Bedingung aus. Warum ist das so?
3. Folgende Frage bezieht sich auf mein Orginaldokument. Auch die Spalten C:M.
In diesem Bereich haben alle Zellen das Zahlenformat Datum TT.MM.JJ. In den "leeren" Zellen steht 30.12.99 (entspricht 0)
Weil ich unter Einstellungen Nullwerte ausblenden gewählt habe, erscheinen diese Zellen natürlich leer.
Weil sie aber nicht leer sind, werden sie mitformatiert.
Möglicherweise ist das ein Kopierproblem ?
Ich übertrage die Datumsangaben per Makro in die Tabelle. Der Code dazu:

Code: Alles auswählen

sub Alle_Daten
odoc = ThisComponent
        osheet = odoc.sheets(2)
 Dim Datum as String
  Dim Kasse as String
    Datum = oSheet.getCellRangeByName("C14").STRING
    Kasse = oSheet.getCellRangeByName("E12").STRING
    
   if Datum = "" then
msgbox("Behandlungsdaten fehlen!",0,"Gesamtliste")
exit sub
else
if Kasse = "privat" then
msgbox ("Nur Kassenpatienten",0, "Gesamtliste")
exit sub
end if
end if
        orange = osheet.getCellRangeByName("H39:Z39")
        orangeAddress = orange.getrangeaddress
        odata()= orange.getdataarray
        oZielSheet = oDoc.sheets(13)
        c = oZielSheet.getCellRangeByName("A1:A5000").queryEmptyCells
        oZielCell = c(0).getcellbyposition(0,0)
        oZielCellAddress = oZielCell.getcelladdress
        X1=oZielCellAddress.column
        Y1=oZielCellAddress.row
        X2=oZielCellAddress.column+(orangeAddress.EndColumn-orangeAddress.StartColumn)
        Y2=oZielCellAddress.Row+(orangeAddress.EndRow-orangeAddress.StartRow)
        oZielrange=oZielSheet.getCellRangeByPosition(X1,Y1,X2,Y2)
        oZielrange.setdataarray(odata())
rem-----------------------------------------------------------------------------------------
 oCellRange = osheet.getCellRangeByName("C14:C21")           
     ocellRange.clearContents(com.sun.star.sheet.CellFlags.DATETIME)        
end sub    
Möglicherweise muß im Code was geändert werden ?

Würde mich über weitere Hilfe sehr freuen.

Gruß Jörg
Doppelte_Eintraege_2.ods
(23.64 KiB) 95-mal heruntergeladen
Gruß Jörg

Win 10 Pro AOO 4.1.15
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Doppelte Einträge markieren

Beitrag von mikeleb »

Hallo,

zu 1.) Die Färbung leere Zellen lässt sich durch folgende Erweiterung der Bedingung vermeiden:

Code: Alles auswählen

SUMMENPRODUKT($A$2:$A$45=$A2;$B$2:$B$45=$B2)*NICHT(ODER(ISTLEER($A2);ISTLEER($B2)))>1
zu 2.) Die Bedingung hier lautet:

Code: Alles auswählen

SUMMENPRODUKT(($A$2:$A$45=$A2)*($B$2:$B$45=$B2)*($C$2:$M$45=C2)*ISTZAHL(C2)*(C2>0))>1
Durch die Bedingung ISTZAHL(C2) werden Zellen ohne Zahl übergangen und durch den neuen Zusatz C2>0 werden nun auch Nullwerte übergangen.
(Übergangen, weil durch die Bedingung das ganze Summenprodukt Null wird und damit nicht mehr >1 werden kann.)

zu 3.) Ein Kopierfehler sicher nicht. Nullwerte werden als Nullwerte kopiert. Verhindern kannst du das nur, wenn in den Quelldaten keine Nullwerte auftauchen oder du ergänzt folgende Codezeilen

Code: Alles auswählen

        for i=lbound(odata(0)) to ubound(odata(0))
        	if odata(0)(i)=0 then odata(0)(i)=""
        next

nach

Code: Alles auswählen

odata()= orange.getdataarray
Dateianhänge
Doppelte_Eintraege_3.ods
(66.82 KiB) 92-mal heruntergeladen
Gruß,
mikeleb
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Doppelte Einträge markieren

Beitrag von Jörg »

Hallo,
jetzt ist alles chic.
Habe auch den Codeabschnitt ins Makro eingefügt. Klappt auch bestens.

Danke nochmal und schönes WE
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Doppelte Einträge markieren

Beitrag von Jörg »

Hallo,
mit Hilfe von Dannenhöfer versuche ich in Spalte C die bedingte Formatierung (Einträge älter als 3 Monate) per Makro einzufügen.
Die Formatierung manuell eingegeben funktioniert. Nur das Makro nicht :(

Code: Alles auswählen

Sub alte_eintraege

Dim oCell as Object
Dim oConditionalForm as Object
oCell = ThisComponent.Sheets(0).getCellRangeByName("RezDat")
'$Tabelle1.$C$2:$C$45
oConditionalForm = oCell.ConditionalFormat
Dim oCondition(3) as New com.sun.star.beans.PropertyValue
oCondition(0).Name = "Operator"
oCondition(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition(1).Name = "Formula1"
oCondition(1).Value = "=Bed1"
'ODER(ISTLEER(C2))
oCondition(2).Name = "StyleName"
oCondition(2).Value = "Standard"
oConditionalForm.addNew( oCondition() )
oCondition(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition(1).Name = "Formula2"
oCondition(1).Value = "=Bed2"
'C2<DATUM(JAHR(HEUTE());MONAT(HEUTE())-3;TAG(HEUTE()))
oCondition(2).Name = "StyleName"
oCondition(2).Value = "=RezDat"
'Vorlage RezDat
oConditionalForm.addNew( oCondition() )
oCell.ConditionalFormat = oConditionalForm
End Sub
Gruß Jörg
Doppelte_Eintraege_4.ods
(23.95 KiB) 69-mal heruntergeladen
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Doppelte Einträge markieren

Beitrag von Jörg »

Hallo, hab noch etwas gestöbert.

Code: Alles auswählen

' 2008-01-29

oBlatt = ThisComponent.Sheets.getByName( "Tabelle1" )
oBereich = oBlatt.getCellRangeByName("RezDat" )

' Objekt der gesetzten Bedingungen für diesen Bereich
oBedingungen = oBereich.getPropertyValue( "ConditionalFormat" )

' neue Variable
Dim oBedingung(3) as New com.sun.star.beans.PropertyValue

oBedingung(0).Name = "Operator"
oBedingung(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA

oBedingung(1).Name = "Formula1"
oBedingung(1).Value = "Bed1"

oBedingung(2).Name = "StyleName"
oBedingung(2).Value = "Standard"


' hinzu
oBedingungen.addNew( oBedingung )


oBedingung(0).Name = "Operator"
oBedingung(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA

oBedingung(1).Name = "Formula1"
oBedingung(1).Value = "Bed2"

oBedingung(2).Name = "StyleName"
oBedingung(2).Value = "RezDat"

' hinzu
oBedingungen.addNew( oBedingung )
' anwenden
oBereich.setPropertyValue( "ConditionalFormat", oBedingungen )

End Sub
Funkt, aber wo ist der Unterschied?
Hatte auch die = bei "=Bed1" rausgenommen.
Na ja.
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Doppelte Einträge markieren

Beitrag von Jörg »

Hinzufügen und wieder entfernen "Bedingte Formatierung"
Doppelte_Eintraege_4.ods
(23.58 KiB) 75-mal heruntergeladen
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Doppelte Einträge markieren

Beitrag von Jörg »

Sorry, irgendwas ging schief. :oops:
Neuer Versuch.
Doppelte_Eintraege_4.ods
(23.44 KiB) 178-mal heruntergeladen
Gruß Jörg

Win 10 Pro AOO 4.1.15
Antworten