Discussion:
Excel-Funktion Kürzen für VBA gesucht
(zu alt für eine Antwort)
Michael Boeckenhauer
2004-04-15 08:33:31 UTC
Permalink
Hallo,

ich suche eine Funktion für VBA, die der Excel Funktion
Kürzen gleicht und eine festgelegte Anzahl Dezimalstellen
abschneidet.

Vielen Dank.
Michael
Robert Gelbmann
2004-04-15 09:03:07 UTC
Permalink
Hi Michael!
Post by Michael Boeckenhauer
ich suche eine Funktion für VBA, die der Excel Funktion
Kürzen gleicht und eine festgelegte Anzahl Dezimalstellen
abschneidet.
Nun, wenn ich mich nicht irre, gibt es zwischen den Tabellenfunktionen
KÜRZEN und ABRUNDEN keinen Unterschied, oder habe ich etwas übersehen?

Dies hat den Vorteil, dass letztere von VBA für Excel aus aufrufbar
ist:

'---snip---
dblWert = 1234.567
intAnzahlStellen = 2
MsgBox Application.WorksheetFunction.RoundDown(dblWert,
intAnzahlStellen)
'---snip---


Zudem gibt es in VBA die Funktionen Fix (entspricht der KÜRZEN- bzw.
ABRUNDEN-Funktion) und Int (weist im Vergleich zu Fix einen Unterschied
bei der Behandlung von negativen Zahlen auf.)

Beide "kürzen" jedoch immer nur auf ganze Zahlen. Dementsprechend ist
ein kleiner Kunstgriff notwendig, wenn du diese Funktionen einsetzen
willst. Dazu wird - bildlich gesprochen - einfach kurzfristig das Komma
verschoben:

'---snip---
dblWert = 1234.567
intAnzahlStellen = 2
MsgBox Fix(dblWert * 10 ^ intAnzahlStellen) / 10 ^ intAnzahlStellen
MsgBox Int(dblWert * 10 ^ intAnzahlStellen) / 10 ^ intAnzahlStellen
'---snip---
--
In der Hoffnung, damit behilflich gewesen zu sein, verbleibe ich mit
einem leisen

Servus aus Wien,
-Robert Gelbmann-

---
Excel-FAQ's: http://www.roehrenbacher.at/erc/faq/
Michael Boeckenhauer
2004-04-15 09:30:21 UTC
Permalink
-----Originalnachricht-----
Hi Michael!
schrieb ...
Post by Michael Boeckenhauer
ich suche eine Funktion für VBA, die der Excel Funktion
Kürzen gleicht und eine festgelegte Anzahl
Dezimalstellen
Post by Michael Boeckenhauer
abschneidet.
Nun, wenn ich mich nicht irre, gibt es zwischen den
Tabellenfunktionen
KÜRZEN und ABRUNDEN keinen Unterschied, oder habe ich
etwas übersehen?
Dies hat den Vorteil, dass letztere von VBA für Excel aus
aufrufbar
'---snip---
dblWert = 1234.567
intAnzahlStellen = 2
MsgBox Application.WorksheetFunction.RoundDown
(dblWert,
intAnzahlStellen)
'---snip---
Zudem gibt es in VBA die Funktionen Fix (entspricht der
KÜRZEN- bzw.
ABRUNDEN-Funktion) und Int (weist im Vergleich zu Fix
einen Unterschied
bei der Behandlung von negativen Zahlen auf.)
Beide "kürzen" jedoch immer nur auf ganze Zahlen.
Dementsprechend ist
ein kleiner Kunstgriff notwendig, wenn du diese
Funktionen einsetzen
willst. Dazu wird - bildlich gesprochen - einfach
kurzfristig das Komma
'---snip---
dblWert = 1234.567
intAnzahlStellen = 2
MsgBox Fix(dblWert * 10 ^ intAnzahlStellen) / 10 ^
intAnzahlStellen
MsgBox Int(dblWert * 10 ^ intAnzahlStellen) / 10 ^
intAnzahlStellen
'---snip---
--
In der Hoffnung, damit behilflich gewesen zu sein,
verbleibe ich mit
einem leisen
Servus aus Wien,
-Robert Gelbmann-
---
Excel-FAQ's: http://www.roehrenbacher.at/erc/faq/
.
Hallo Robert,
vielen Dank. Ich denke damit komme ich weiter.

Gruß aus Rostock

Michael
Robert Gelbmann
2004-04-15 12:04:00 UTC
Permalink
Hi Michael!
Post by Michael Boeckenhauer
vielen Dank. Ich denke damit komme ich weiter.
Danke auch für die Rückmeldung!
Freut einem immer wieder ...
--
Servus aus Wien,
-Robert Gelbmann-

---
Excel-FAQ's: http://www.roehrenbacher.at/erc/faq/
Melanie Breden
2004-04-15 09:24:13 UTC
Permalink
Hallo Michael Boeckenhauer,

Michael Boeckenhauer schrieb:
ich suche eine Funktion für VBA, die der Excel Funktion
Post by Michael Boeckenhauer
Kürzen gleicht und eine festgelegte Anzahl Dezimalstellen
abschneidet.
du könntest auch eine benutzerdefinierte Funktion kreieren:

Function Kürzen(dblValue As Double, intDec As Integer) As Double
' Wenn Zahl eine Ganzzahl ist, oder
' weniger Nachkommastellen als gefordert hat
' beende Funktion
If Int(dblValue) = dblValue Or _
VBA.Len(VBA.Right(CStr(dblValue), VBA.Len(CStr(dblValue)) - _
InStr(CStr(dblValue), ","))) < intDec Then
Kürzen = dblValue
Exit Function
Else
Kürzen = CDbl(VBA.Left(CStr(dblValue), _
InStr(CStr(dblValue), ",") + intDec))
End If
End Function

Sub TestKürzen()
Debug.Print Kürzen(Range("A1").Value, 3)
Debug.Print Kürzen(12345.6789, 3)
End Sub
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Loading...