von Simon23 » Di, 14.08.2007 19:56
Hallo Hans,
ich könnte die Flächen auch direkt eingeben, das wäre allerdings eine extrem lang und unübersichtliche Formel.
Ich fand es einfacher die Berechnungen aufzuteilen.
Die letzte Formel (Zelle D16) z.B. ist der folgende Code:
Code: Alles auswählen
=WENN(D29="ABCDEF";WENN(D26="ABCD";WENN(D23="AB";WENN(D20="A";"A";WENN(D20="B";"B";"Fehler"));WENN(D21="C";"C";WENN(D21="D";"D";"Fehler")));WENN(D24="E";"E";WENN(D24="F";"F";"Fehler")));WENN(D27="G";"G";WENN(D27="I";"I";"Fehler")))
und dieser setzt sich aus 7 weiteren Formel zusammen, welche sich wiederrum aus 16 Berechnungen ergeben.
Das alles in eine "Monsterformel" zu stecken habe ich mich nicht getraut und ich hätte mit Sicherheit auch einen Fehler gemacht.

- vorherige Berechnungen.jpg (127.38 KiB) 2142 mal betrachtet
Da habe ich dann lieber folgendes Makro geschrieben:
Code: Alles auswählen
REM Das Makro
sub Diagramm
oDoc = thisComponent 'Zugiff auf das Dokument
oSheet = oDoc.sheets(0) 'Erstes Tabellenblatt
oZelleERG = oSheet.getCellRangeByName("D16") 'Zelle Ergebnis welcher Fall
oSheet.getCellByPosition(1,2).value = 1 'Startwert für Y
oSheet.getCellByPosition(1,3).value = 0.502 'Startwert für N
'oZelleC.value = 0.5 'Startwert 0.5
i = 535
r = 0
x=1 'Startwert Y = 1
y=635 'Startwert N = 0,01
while r < 250
while oSheet.getCellByPosition(1,2).value >= oSheet.getCellByPosition(1,3).value
oSheet.getCellByPosition(x,y).string = oSheet.getCellByPosition(3,15).string 'Schreibe in Zelle Buchstabe aus Ergebnis
oSheet.getCellByPosition(1,2).value = oSheet.getCellByPosition(1,2).value - 0.002 'Verringere Y um 0.01
if oSheet.getCellByPosition(x,y).string = "A" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(250,250,100)
if oSheet.getCellByPosition(x,y).string = "B" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(250,100,250)
if oSheet.getCellByPosition(x,y).string = "E" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(100,250,100)
if oSheet.getCellByPosition(x,y).string = "G" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(100,100,250)
if oSheet.getCellByPosition(x,y).string = "I" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(100,100,100)
if oSheet.getCellByPosition(x,y).string = "F" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(250,100,100)
y = y + 1
wend
y = 635
r = r+1
x = x+1
oSheet.getCellByPosition(1,2).value = 1
oSheet.getCellByPosition(1,3).value = oSheet.getCellByPosition(1,3).value + 0.002
i = i-1
wend
end sub
Wenn Du eine bessere Lösung hast, ich bin für Kritik offen und dankbar.
Liebe Grüße
Simon
PS.: Nachdem mein Rechner über 3 h mit dem abgeänderten Makro gerechnet hat (also 4 Teilstücke der Tabelle erstellt hat), bin ich nun endlich mit der Qualität zufrieden
Ich würde das fertige Bild gerne in den Anhang packen, es ist allerdings unkomprimiert 24,8 MB groß. Deshalb füge ich das Jpeg bei, das immernoch eine gute Qualität bietet.

- Komplett -300dpi high.jpg (47 KiB) 2125 mal betrachtet
Hallo Hans,
ich könnte die Flächen auch direkt eingeben, das wäre allerdings eine extrem lang und unübersichtliche Formel.
Ich fand es einfacher die Berechnungen aufzuteilen.
Die letzte Formel (Zelle D16) z.B. ist der folgende Code:
[code]
=WENN(D29="ABCDEF";WENN(D26="ABCD";WENN(D23="AB";WENN(D20="A";"A";WENN(D20="B";"B";"Fehler"));WENN(D21="C";"C";WENN(D21="D";"D";"Fehler")));WENN(D24="E";"E";WENN(D24="F";"F";"Fehler")));WENN(D27="G";"G";WENN(D27="I";"I";"Fehler")))
[/code]
und dieser setzt sich aus 7 weiteren Formel zusammen, welche sich wiederrum aus 16 Berechnungen ergeben.
Das alles in eine "Monsterformel" zu stecken habe ich mich nicht getraut und ich hätte mit Sicherheit auch einen Fehler gemacht.
[attachment=1]vorherige Berechnungen.jpg[/attachment]
Da habe ich dann lieber folgendes Makro geschrieben:
[code]
REM Das Makro
sub Diagramm
oDoc = thisComponent 'Zugiff auf das Dokument
oSheet = oDoc.sheets(0) 'Erstes Tabellenblatt
oZelleERG = oSheet.getCellRangeByName("D16") 'Zelle Ergebnis welcher Fall
oSheet.getCellByPosition(1,2).value = 1 'Startwert für Y
oSheet.getCellByPosition(1,3).value = 0.502 'Startwert für N
'oZelleC.value = 0.5 'Startwert 0.5
i = 535
r = 0
x=1 'Startwert Y = 1
y=635 'Startwert N = 0,01
while r < 250
while oSheet.getCellByPosition(1,2).value >= oSheet.getCellByPosition(1,3).value
oSheet.getCellByPosition(x,y).string = oSheet.getCellByPosition(3,15).string 'Schreibe in Zelle Buchstabe aus Ergebnis
oSheet.getCellByPosition(1,2).value = oSheet.getCellByPosition(1,2).value - 0.002 'Verringere Y um 0.01
if oSheet.getCellByPosition(x,y).string = "A" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(250,250,100)
if oSheet.getCellByPosition(x,y).string = "B" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(250,100,250)
if oSheet.getCellByPosition(x,y).string = "E" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(100,250,100)
if oSheet.getCellByPosition(x,y).string = "G" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(100,100,250)
if oSheet.getCellByPosition(x,y).string = "I" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(100,100,100)
if oSheet.getCellByPosition(x,y).string = "F" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(250,100,100)
y = y + 1
wend
y = 635
r = r+1
x = x+1
oSheet.getCellByPosition(1,2).value = 1
oSheet.getCellByPosition(1,3).value = oSheet.getCellByPosition(1,3).value + 0.002
i = i-1
wend
end sub
[/code]
Wenn Du eine bessere Lösung hast, ich bin für Kritik offen und dankbar.
Liebe Grüße
Simon
PS.: Nachdem mein Rechner über 3 h mit dem abgeänderten Makro gerechnet hat (also 4 Teilstücke der Tabelle erstellt hat), bin ich nun endlich mit der Qualität zufrieden :D
Ich würde das fertige Bild gerne in den Anhang packen, es ist allerdings unkomprimiert 24,8 MB groß. Deshalb füge ich das Jpeg bei, das immernoch eine gute Qualität bietet.
[attachment=0]Komplett -300dpi high.jpg[/attachment]