ich habe im Netz leider nichts passendes gefunden, wer kann mir halfen?
Wie kann ich in Excel über das Tabellenblatt oder eine in VBA erstellte
Funktion das Volumen eines liegenden Zylinders berechnen?
Gegeben sind: der Radius / Durchmesser in m, die Länge des Zylinders in m
und die Füllhöhe ebenfalls in m.
Danke im voraus für Eure Hilfe
Klaus
aus dem Netz:
Formeln zum Berechnen eines Zylinders:
Grundfläche = pi * Radius²
Volumen = Grundfläche * Höhe
Mantelfläche = Umfang * Höhe
Oberfläche = 2 * Grundfläche + Mantelfläche
Demzufolge ist das Volumen zu berechnen mit:
=PI()*Radius^2*Höhe
----
Gruß Boris
>-----Originalnachricht-----
>.
>
du hast schon gelesen, dass der Zylinder _liegt_ und nicht _steht_ ?
Grüße
Albrecht
"Boris" <borista...@t-online.de> schrieb im Newsbeitrag
news:038901c2b375$5db60270$d4f82ecf@TK2MSFTNGXA11...
dann entschuldige ich mich für meine Antwort und habe
demzufolge den Betreff geändert.
-------
Gruß Boris
>-----Originalnachricht-----
>.
>
> Wie kann ich in Excel über das Tabellenblatt oder eine in VBA erstellte
> Funktion das Volumen eines liegenden Zylinders berechnen?
> Gegeben sind: der Radius / Durchmesser in m, die Länge des Zylinders in m
> und die Füllhöhe ebenfalls in m.
Dazu muss natuerlich erstmal mathematisch klar sein, wie das
Volumen berechnet wird:
Gesamtvolumen: V
Fuellhoehe: H
Radius: R
Laenge: L
V(H)=L*A(H)
A(H) ist die betrachtete Grundflaeche, abhaengig von der Fuellhoehe.
Fallunterscheidung:
ist H<R, so gilt:
A(H)=1/2*Pi*R² - [(R-H)*sqr(R²-(R-H)²)-R²*arcsin((R-H)/R)]
ist H>R, so gilt:
A(H)=1/2*Pi*R² + [(H-R)*sqr(R²-(H-R)²)+R²*arcsin((H-R)/R)]
So, das muss in eine Formel mit WENN (bzw. if) gepackt werden
(wegen der Fallunterscheidung).
Der Arcussinus ist so nicht vorhanden, also muss eine abgeleitete
mathematische Funktion in Excel verwendet werden, es gilt:
Arkussinus(X) = Atn(X / Sqr(-X * X + 1))
Das Ganze unter der Annahme, dass fuer das Rohr gilt:
Aussendurchmesser=Innendurchmesser (also Wandstaerke Null).
Bei Gelegenheit packe ich das mal in eine Funktion.
Gruss
::Ingo::
PS: Formel ohne Gewaehr, da nur eben schnell skizziert.
> Fallunterscheidung:
>
> ist H<R, so gilt:
> A(H)=1/2*Pi*R² - [(R-H)*sqr(R²-(R-H)²)-R²*arcsin((R-H)/R)]
^
kleine Korrektur:
A(H)=1/2*Pi*R² - [(R-H)*sqr(R²-(R-H)²)+R²*arcsin((R-H)/R)]
> ist H>R, so gilt:
> A(H)=1/2*Pi*R² + [(H-R)*sqr(R²-(H-R)²)+R²*arcsin((H-R)/R)]
Gruss
::Ingo::
> Bei Gelegenheit packe ich das mal in eine Funktion.
So, die (korrigierte) Berechnungsvorschrift habe ich mal in
eine VBA-Funktion gesteckt, die man nun mit den drei
Parametern Fuellhoehe, Radius und Laenge in Excel aufrufen
kann.
Ich bin kein VBA-Experte, deswegen ist der Code eher Quick n Dirty.
Da koennen sich jetzt die Profis auslassen ;-)
Die Berechnung sollte so jedenfalls stimmen.
Gruss
::Ingo::
Code:
Function Vol_Zyl_liegend(Fuellhoehe As Double, Radius As Double, Laenge As Double)
Const pi As Double = 3.141592653
Dim H As Double
Dim R As Double
Dim L As Double
Dim Arg As Double
Dim Arcsin_Arg As Double
H = Fuellhoehe
R = Radius
L = Laenge
If R <= 0 Then
MsgBox "Ihr Radius ist kleiner Null"
Vol_Zyl_liegend = 0
Exit Function
End If
If L <= 0 Then
MsgBox "Ihre Laenge ist kleiner Null"
Vol_Zyl_liegend = 0
Exit Function
End If
If H <= 0 Then
MsgBox "Ihre Fuellhoehe ist kleiner Null"
Vol_Zyl_liegend = 0
Exit Function
ElseIf H > 2 * R Then
MsgBox "Ihre Fuellhoehe ist groesser als der Durchmesser"
Vol_Zyl_liegend = 0
Exit Function
ElseIf H = R Then
'Grundflaeche ist exakt der Halbkreis
Vol_Zyl_liegend = 1 / 2 * L * pi * R * R
ElseIf H = 2 * R Then
'Grundflaeche ist exakt der Vollkreis
Vol_Zyl_liegend = L * pi * R * R
ElseIf H < R Then
'ist H<R, so gilt:
'A(H) = 1 / 2 * Pi * R² - [(R-H)*sqr(R²-(R-H)²)+R²*arcsin((R-H)/R)]
'Festlegen Argument des Arcsin
Arg = (R - H) / R
'Zwischenberechnung Arcsin
Arcsin_Arg = Atn(Arg / Sqr(-Arg * Arg + 1))
'Volumenberechnung
Vol_Zyl_liegend = L * (1 / 2 * pi * R * R - _
((R - H) * Sqr(R * R - (R - H) * (R - H)) + R * R * Arcsin_Arg))
ElseIf H > R Then
'ist H>R, so gilt:
'A(H) = 1 / 2 * Pi * R² + [(H-R)*sqr(R²-(H-R)²)+R²*arcsin((H-R)/R)]
'Festlegen Argument des Arcsin
Arg = (H - R) / R
'Zwischenberechnung Arcsin
Arcsin_Arg = Atn(Arg / Sqr(-Arg * Arg + 1))
'Volumenberechnung
Vol_Zyl_liegend = L * (1 / 2 * pi * R * R + _
((H - R) * Sqr(R * R - (H - R) * (H - R)) + R * R * Arcsin_Arg))
End If
End Function
>
>Schon wieder ich selbst <IngoA...@gmx.de> schrieb:
>
Jetzt schreib ich mal dazwischen, damit Du nicht immer mit Dir selbst
reden musst ;-). Ich hab Deine Lösung nicht durchdacht, eine
Fallunterscheidung ist aber wohl nicht notwendig. Ich habe mir folge
Formel zurecht gelegt:
d-Durchmesser, l-Länge, h-Füllhöhe
=(d*d/4*ARCCOS(2*(d/2-h)/d)+WURZEL(d*d/4-(h-d/2)*(h-d/2))*(h-d/2))*l
Die kommt ohne aus. Ist aber schon lang her...
Gruß HW
"Hans Hofmann" <ha...@chefmail.de> schrieb
> Jetzt schreib ich mal dazwischen, damit Du nicht immer mit Dir selbst
> reden musst ;-). Ich hab Deine Lösung nicht durchdacht, eine
> Fallunterscheidung ist aber wohl nicht notwendig. Ich habe mir folge
> Formel zurecht gelegt:
>
> d-Durchmesser, l-Länge, h-Füllhöhe
> =(d*d/4*ARCCOS(2*(d/2-h)/d)+WURZEL(d*d/4-(h-d/2)*(h-d/2))*(h-d/2))*l
>
> Die kommt ohne aus. Ist aber schon lang her...
Stimmt, es geht auch ohne Fallunterscheidung, s.u.
Gruss
::Ingo::
Function Vol_Zyl_liegend(Fuellhoehe As Double, Radius As Double, Laenge As Double)
Const pi As Double = 3.141592653
Dim H As Double
Dim R As Double
Dim L As Double
Dim Arg As Double
Dim Arcsin_Arg As Double
H = Fuellhoehe
R = Radius
L = Laenge
If R <= 0 Then
MsgBox "Ihr Radius ist kleiner oder gleich Null"
Vol_Zyl_liegend = 0
Exit Function
End If
If L <= 0 Then
MsgBox "Ihre Laenge ist kleiner oder gleich Null"
Vol_Zyl_liegend = 0
Exit Function
End If
If H < 0 Then
MsgBox "Ihre Fuellhoehe ist kleiner Null"
Vol_Zyl_liegend = 0
Exit Function
ElseIf H = 0 Then
Vol_Zyl_liegend = 0
Exit Function
ElseIf H = R Then
'Grundflaeche ist exakt der Halbkreis
Vol_Zyl_liegend = 1 / 2 * L * pi * R * R
ElseIf H = 2 * R Then
'Grundflaeche ist exakt der Vollkreis
Vol_Zyl_liegend = L * pi * R * R
ElseIf H > 2 * R Then
MsgBox "Ihre Fuellhoehe ist groesser als der Durchmesser"
Vol_Zyl_liegend = 0
Exit Function
Else
Viele Grüße
Klaus
Hans Hofmann schrieb:
> Jetzt schreib ich mal dazwischen, damit Du nicht immer mit Dir selbst
> reden musst ;-). Ich hab Deine Lösung nicht durchdacht, eine
> Fallunterscheidung ist aber wohl nicht notwendig. Ich habe mir folge
> Formel zurecht gelegt:
>
> d-Durchmesser, l-Länge, h-Füllhöhe
> =(d*d/4*ARCCOS(2*(d/2-h)/d)+WURZEL(d*d/4-(h-d/2)*(h-d/2))*(h-d/2))*l
>
> Die kommt ohne aus. Ist aber schon lang her...
>
du hast vollkommen recht. Klaus möchte sich wohl eine Tabelle für seinen
Heizöltank aufbauen und in dieser schnell die Ölmenge ablesen.
Da ist es einfacher in einer Spalte die Füllhöhe in cm anzugeben und
in der Nachbarsoalte "einmal" die Formel runter zu kopieren. Schon
stimmts ein für alle Mal.
Mit der Funktion müßte er immer wieder neu rechnen.
So habe ich es jedenfalls für meinen Heizöltank gemacht, wo ich mit
einem Peilstab die Füllhöhe in cm ablesen kann. Neben dem Heizkessel
hängt die einmal ausgedruckte und eingeschweißte Tanktabelle.
(Es hat natürlich einen kleinen Schönheitsfehler, da die Tankböden
nicht plan sondern gewölbt sind. und dadurch die tatsächliche Menge
geringfügig höher ausfällt - mein "Sicherheitsfaktor, ha, ha)
tschüss, Josef
Gruss Peter
Ich glaube dass Boris seine Entschuldigung ironisch gemeint hat ;-)
"Albrecht Koch" <alb...@gmx.de> schrieb im Newsbeitrag
news:av5330$bma6q$1...@ID-37166.news.dfncis.de...
Peter Haserodt schrieb:
>
> dann leg dich hin und gucks von da an.
> Also ein liegender Zylinder ist genau das gleiche wie ein stehender. Nur um
> 90° gedreht.
Naja ein Zylinder der liegt wird halt nicht von vorne nach hinten voll,
sondern auch von unten nach oben.
Er besteht also nicht aus quasi gestapelten Kreisflächen, sondern die
Füllhöhe ertspricht hier der Höhe des Kreisabschnittes. Also muss diese
Fläche berechent werden und mit der (in diesem Fall) Länge des Zylinders
multipliziert.
> Kann das denn so schwer sein ???
Ganz so einfach 'liegt' es hier nicht ;-)
--
Mit freundlichen Grüssen
Thomas Ramel
- MVP für Microsoft-Excel -
Ingo hat die Funktion deklariert.
Dazu noch einige Fragen:
1- Was muss ich in VBA noch ergänzen, um das Programm lauffähig zu machen
und über einen Button zu
starten?
2- Wie kann ich mehrere Ergebnisse in Abhängigkeit von der Füllhöhe
ausgeben?
Ich nehmen an, durch relativen Zellbezug und Schleife. Dabei soll die
Füllhöhe in Intervallen steigen. Aus den Ergebnissen könnte man dann als
f(h) ein ansehnliches Diagramm erstellen.
Danke und viele Grüße, Zeki
Ingo Albers <IngoA...@gmx.de> schrieb in im Newsbeitrag:
av6lae$6vr$1...@nets3.rz.RWTH-Aachen.DE...
Zeki Aslan schrieb:
>
> 1- Was muss ich in VBA noch ergänzen, um das Programm lauffähig zu machen
> und über einen Button zu
> starten?
Kopiere die Funktion in ein Modul der Arbeitsmappe.
Nun kannst Du sie in Excel über den Funktionsassistenten in der Rubrik
'Benutzerdefiniert' anwählen und genauso einsetzen wie eine 'normale'
Excel-Funktion.
Eine Funktion wird nict wie eine Sub über einen Button gestartet, sondern
(in der Regel) in einer Zelle als Formel eingesetzt.
> 2- Wie kann ich mehrere Ergebnisse in Abhängigkeit von der Füllhöhe
> ausgeben?
Erstelle eine Liste (als Spalte) mit den gewünschten Füllhöhen und benutze
in den Nebenzellen die Funktion; so erzeugtst Du eine Quelle mit Daten für
ein Diagramm.
wow, schon wieder was dazugelernt.
vielen dank, zeki
Zeki Aslan schrieb:
> servus thomas,
>
> wow, schon wieder was dazugelernt.
>
> vielen dank, zeki
Aber gerne doch!
Danke für die Rückmeldung.