5er Rundung

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Itep
Beiträge: 5
Registriert: Fr, 31.03.2006 15:04

5er Rundung

Beitrag von Itep »

Hallo

ich wage meine ersten Schritte mit OpenOffice :) und hätte da mal ne Frage.

Ich habe mir in Excel eine Funktion erstellt, die es mir erlaubt, Geldbeträge auf 5 Rappen (komme aus der Schweiz :) ) zu runden. Diese Funktion konnte ich dann über den Funktionsassistenten bei den benutzerdefinierten Funktionen aufrufen.
Wie müsste ich es nun in OpenOffice anstellen, um die gleiche Funktion zu erstellen. Ich habe zwar ein Makro aufgezeichnet, mit dem ich beinahe das gleiche erreiche. Ich kann dieses Makro aber nicht bei den Funktionen finden.

Die Excel Funktion sieht folgendermassen aus:

Function Rund5(Value)
Rund5 = Application.Round(Value / 5, 2) * 5
End Function

Das Makro in OpenOffice sieht so aus:

Function Rund5
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "StringName"
args1(0).Value = "=RUNDEN(Netto1/5;2)*5"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())


End Function

Das Problem hier ist, dass ich es nicht bei den Funktionen finde und dass ich mich nicht auf einen beliebigen Zellwert berufen kann.
Netto1 wäre hier ein Zellname.

Bin für Hilfe dankbar! :D

Gruss

Itep
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo

=RUNDEN(deineZellemitderZahl/5;2)*5

edit
einfacher gehts noch mit:

=VRUNDEN(deineZellemitderZahl;0,05)

Gruß Karo
Zuletzt geändert von Karolus am Fr, 31.03.2006 20:11, insgesamt 1-mal geändert.
Eddy
********
Beiträge: 2781
Registriert: So, 02.10.2005 10:14

Beitrag von Eddy »

Hallo Itep,

ich hätte da mal eine Antwort.

Die in OO vorhandene Funktion RUNDEN hilft Dir nicht?

=RUNDEN(A1;-1) würde dazu führen, dass in der Zelle, in der sie steht, der Wert aus A1 so wie Du es wünscht, angezeigt wird.

Mit gerundeten Grüßen

Eddy
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo Eddy

Die Schweizer runden auf 5 Rappen , aber doch nicht gleich auf 10 Franken :D

Gruß Karo
Itep
Beiträge: 5
Registriert: Fr, 31.03.2006 15:04

Beitrag von Itep »

Karolus hat geschrieben:Hallo

=RUNDEN(deineZellemitderZahl/5;2)*5

Gruß Karo
Diese Formel ist natürlich richtig, wobei ich für den Ausdruck "deineZellemitderZahl" gerne eine Variable hätte, wie in der Excelformel mit "Value". Die Absicht dabei ist die Funktion "=Runden(Zahl/5;2)*5" als "fixfertige" Funktion über den Funktionsassistenten abrufen zu können.
Damit ich diese Funktion auch verschachteln kann, wie etwa in:
=RUNDEN(SUMME(A1:A10)/5;2)*5
Eddy hat geschrieben:...

=RUNDEN(A1;-1)
Bei dieser Funktion erhalte ich den Wert 0. Sobald ich das -Zeichen schreibe, erscheint der Wert 0.

Danke für eure Antworten! :D

Ich arbeite weiter daran. Das bisher beste Resultat erhalte ich, wenn ich die Zelle, welche ich berechnen will, mit einem Namen belege, wie z.Bsp. Netto1. Dann kann ich das Makro immer wieder anwenden, Vorraussetzung: man muss die Zellen immer mit dem gleichen Namen belegen. Das bedeutet aber, dass ich nur eine Zelle pro Tabelle so benennen kann. Also nicht wirklich befriedigend... :wink:

Gruss Itep

Edit: :lol: Alles klar betreffs der Formel von Eddy, habe einen Wert von 2.23 berechnet, daher 0!
Itep
Beiträge: 5
Registriert: Fr, 31.03.2006 15:04

Beitrag von Itep »

Karolus hat geschrieben:Hallo

=RUNDEN(deineZellemitderZahl/5;2)*5

edit
einfacher gehts noch mit:

=VRUNDEN(deineZellemitderZahl;0,05)

Gruß Karo
In Excel, habe ich gehört, sei die Funktion VRunden nicht so zuverlässig, sie gehört auch nicht mehr zur Standardinstallation. Ist sie in OpenOffice zuverlässiger? Sie wäre tatsächlich eine ziemlich gute Lösung.

Gruss Itep
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo Itep

Zur Zuverlässigkeit von VRUNDEN kann ich dir nichts sagen , bei den letzten ca 7 Tests
hats funktioniert.

Aber ich hab mal ein Makro aufgezeichnet das per suchen und ersetzen die jeweils in der gerade aktiven Zelle stehende Formel zu

=VRUNDEN(formel;0,05)
verwandelt. Funktioniert einwandfrei , wenn du das Makro auf eine Tastenkombi legst die du dann beim verlassen der Zelle statt enter drückst:

Hier ist der Code


sub rund5
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "By"
args1(0).Value = 1
args1(1).Name = "Sel"
args1(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "By"
args2(0).Value = 1
args2(1).Name = "Sel"
args2(1).Value = true

dispatcher.executeDispatch(document, ".uno:GoUp", "", 0, args2())



rem ----------------------------------------------------------------------
dim args4(17) as new com.sun.star.beans.PropertyValue
args4(0).Name = "SearchItem.StyleFamily"
args4(0).Value = 2
args4(1).Name = "SearchItem.CellType"
args4(1).Value = 0
args4(2).Name = "SearchItem.RowDirection"
args4(2).Value = true
args4(3).Name = "SearchItem.AllTables"
args4(3).Value = false
args4(4).Name = "SearchItem.Backward"
args4(4).Value = false
args4(5).Name = "SearchItem.Pattern"
args4(5).Value = false
args4(6).Name = "SearchItem.Content"
args4(6).Value = false
args4(7).Name = "SearchItem.AsianOptions"
args4(7).Value = false
args4(8).Name = "SearchItem.AlgorithmType"
args4(8).Value = 1
args4(9).Name = "SearchItem.SearchFlags"
args4(9).Value = 71680
args4(10).Name = "SearchItem.SearchString"
args4(10).Value = "^="
args4(11).Name = "SearchItem.ReplaceString"
args4(11).Value = "=VRUNDEN("
args4(12).Name = "SearchItem.Locale"
args4(12).Value = 255
args4(13).Name = "SearchItem.ChangedChars"
args4(13).Value = 2
args4(14).Name = "SearchItem.DeletedChars"
args4(14).Value = 2
args4(15).Name = "SearchItem.InsertedChars"
args4(15).Value = 2
args4(16).Name = "SearchItem.TransliterateFlags"
args4(16).Value = 1024
args4(17).Name = "SearchItem.Command"
args4(17).Value = 3

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(17) as new com.sun.star.beans.PropertyValue
args5(0).Name = "SearchItem.StyleFamily"
args5(0).Value = 2
args5(1).Name = "SearchItem.CellType"
args5(1).Value = 0
args5(2).Name = "SearchItem.RowDirection"
args5(2).Value = true
args5(3).Name = "SearchItem.AllTables"
args5(3).Value = false
args5(4).Name = "SearchItem.Backward"
args5(4).Value = false
args5(5).Name = "SearchItem.Pattern"
args5(5).Value = false
args5(6).Name = "SearchItem.Content"
args5(6).Value = false
args5(7).Name = "SearchItem.AsianOptions"
args5(7).Value = false
args5(8).Name = "SearchItem.AlgorithmType"
args5(8).Value = 1
args5(9).Name = "SearchItem.SearchFlags"
args5(9).Value = 71680
args5(10).Name = "SearchItem.SearchString"
args5(10).Value = "\)$"
args5(11).Name = "SearchItem.ReplaceString"
args5(11).Value = ";0,05)"
args5(12).Name = "SearchItem.Locale"
args5(12).Value = 255
args5(13).Name = "SearchItem.ChangedChars"
args5(13).Value = 2
args5(14).Name = "SearchItem.DeletedChars"
args5(14).Value = 2
args5(15).Name = "SearchItem.InsertedChars"
args5(15).Value = 2
args5(16).Name = "SearchItem.TransliterateFlags"
args5(16).Value = 1280
args5(17).Name = "SearchItem.Command"
args5(17).Value = 3

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args5())

dim args6(1) as new com.sun.star.beans.PropertyValue
args6(0).Name = "By"
args6(0).Value = 1
args6(1).Name = "Sel"
args6(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args6())



end sub


Gruß Karo
Itep
Beiträge: 5
Registriert: Fr, 31.03.2006 15:04

Beitrag von Itep »

Hallo Karolus

Funktioniert sehr gut, herzlichen Dank! :D

Bei der Formel "=VRUNDEN(formel;0,05)" gibt es für die Schweiz einen kleinen Unterschied! Bei uns ist das Dezimalzeichen ein Punkt. Das hat schon zu viel Verwirrung geführt... :wink:

Gruss

Itep
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo Itep
Bei der Formel "=VRUNDEN(formel;0,05)" gibt es für die Schweiz einen kleinen Unterschied! Bei uns ist das Dezimalzeichen ein Punkt. Das hat schon zu viel Verwirrung geführt... Wink
Ja stimmt, eigentlich weiss ich das , hab aber nicht soweit mitgedacht, dann musst du an der entsprechenden Stelle im Makro das Komma durch einen Punkt ersetzen- aber das hast du sicher bereits getan.

Gruß Karo
Itep
Beiträge: 5
Registriert: Fr, 31.03.2006 15:04

Beitrag von Itep »

Hallo Karolus

Ja klar, hab's bald bemerkt, als ich zuerst einen Fehler in der Formel erhielt. :wink:
Da ich dieses Problem schon des öfteren hatte, bin ich ein wenig vorbereitet. :wink:
Hab's inzwischen auch schon auf die Funktion "Runden" angepasst. :D
Nochmals Danke für die schnelle Hilfe!

Gruss

Itep
Antworten