MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 10.08.2018, 19:28   #1
noskule
Neuer Benutzer
Neuer Benutzer
Standard Excel 2013 - variable "überschreiben"

Hallo Zusammen
Ich hab den folgenden Code mit dem ich eine Referenznummer für einen Einzahlungsschein erstellen möchte.

Bei der Variable "Betrag" möchte ich (unabhängig der Eingabe) zuerst die Formatierung auf zwei Nachkommastellen ändern.

Dann möchte ich den Punkt entfernen um dann eine Prüfziffer berechnen zu können.

Beides funktioniert einzeln wenn ich einen "Betrag2" benutze. Wenn ich aber "Betrag" einfach zu überschreiben versuche (wie im Beispiel unten) erhalte ich nur den Wert den ich der Funktion übergeben habe.

Kann mir jemand sagen was ich hier falsch ist?

Gruss & vielen Dank
Beni


Code:

Function Referenznummer(ByVal EsrK As Integer, ByVal Betrag As Double)

    'auf zwei Kommastellen erweitern/reduzieren
    Betrag = Format(Betrag, "###0.00")
    'Punkt entfernen
    Betrag = onlynumbers(Betrag)

    Dim EsrKL As Integer
    Dim BetragL As Integer


    EsrKL = Len(CStr(EsrK))
    BetragL = Len(CStr(Betrag))

    Referenznummer = Betrag

End Function
noskule ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.08.2018, 19:39   #2
EarlFred
MOF Guru
MOF Guru
Standard

Eine Zahlenvariable füllt man nicht mit Text!

2 Nachkommsstellen bekommst Du mit Round(), den Dezimaltrenner „entfernst“ du, indem du die gerundete Zahl mit 100 multiplizierst.

__________________

Datum und Uhrzeit, Makrorekorder-Code entschlacken, {Matrixformeln}
Tutorials zu Pivottabellen: Kurzeinstieg; Dynamischer Datenbereich; Daten und Zeiten gruppieren
Für 6 meiner Beiträge haben sich die Hilfesuchenden mit einer Spende an Wikipedia, die Tafeln oder Hilfe für krebskranke Kinder eV bedankt (das entspricht 0,044% per 26.07.2018) - eine tolle Geste!
EarlFred ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.08.2018, 22:14   #3
noskule
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Round() ist hier nicht die richtige Funktion da sie ja die Zahl ändert was auf keinen Fall passieren darf. Mal 100 anstelle den Punkt entfernen probier ich mal wär sicher die schönere Lösung.

Das Zahlenformat das ich brauche und was so funktioniert ist:
123 -> 12300
123.4 -> 12340
123.45 -> 12345
123.456 -> 12345

Das Problem das ich aber hauptsächlich habe ist das ich versuche die Variable "Betrag" zu überschreiben und dies nicht funktioniert sondern der Ausgangswert bestehen bleibt ...

Meine Funktion funktioniert nur wenn ich sie so schreibe (Betrag, Betrag2, Betrag3):

Code:

Function Referenznummer(ByVal EsrK As Integer, ByVal Betrag As Double)

    'auf zwei Kommastellen erweitern/reduzieren
    Betrag2 = Format(Betrag, "###0.00")
    'Punkt entfernen
    Betrag3 = onlynumbers(Betrag2)

    Dim EsrKL As Integer
    Dim BetragL As Integer


    EsrKL = Len(CStr(EsrK))
    BetragL = Len(CStr(Betrag))

    Referenznummer = Betrag3

End Function

Geändert von noskule (10.08.2018 um 22:21 Uhr).
noskule ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.08.2018, 22:40   #4
ebs17
MOF Guru
MOF Guru
Standard

Sorry, Deine Funktion ist der blanke Murks.

- Bei einem Betrag geht man von einer Zahl aus. Der Datentyp Double unterstreicht das ganz dick.
- Die Format-Anweisung erzeugt Text. Das "passt so richtig" für eine Zahl.
- Interessant ist dann, dass der per Format eingefügte Punkt gleich wieder entfernt werden soll. Hoffentlich kann die unbekannte Funktion onlynumbers mit Text umgehen.
- Rückgabe der Funktion: Referenznummer = Betrag
Die letzte Zuweisung an Betrag davor erfolgt onlynumbers .
Das andere ist dann wieder Textverarbeitung für die Tribüne, aber unrelevant für eine Funktionsausgabe.

Ja, und wer mit Textverarbeitung (Links, Rechts, Länge & Co.) auf Zahlen losgeht, schält auch Orangen mit der Kneifzange. Mathematik hat man in der Grundschule irgendwie anders gelernt.

Mathe wäre so etwas:
Code:

?Fix(123.456 * 100)
 12345

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.08.2018, 07:36   #5
Storax
MOF Profi
MOF Profi
Standard

Abgesehen davon, dass die Funktion mehr als komisch ist, beschreib erst mal unabhängig von dem Code, was Du überhaupt vor hast. In der Funktion, die Deiner Ansicht nach funktioniert, ist z.B.das hier völlig überflüssig, denn es hat keinen Effekt mehr auf Betrag3, was Du als Ergebnis am Ende zurück gibst
Code:

    Dim EsrKL As Integer
    Dim BetragL As Integer


    EsrKL = Len(CStr(EsrK))
    BetragL = Len(CStr(Betrag))
Ansonsten ist meine Empfehlung Basics lernen

__________________

This isn't a code writing service, you need to do some research and have a go at writing some of your own code.
Be careful, content may contain traces of irony.
Storax ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.08.2018, 10:03   #6
EarlFred
MOF Guru
MOF Guru
Standard

nochmal:
Du kannst einer Variable vom Typ Double (Zahl!) keinen Text zuweisen (Format(....) erzeugt Text!)
Auch lässt sich der Variablentyp Double nicht auf 2 Nachkommastellen begrenzen.

Weiterhin erzeugt Format(Betrag, "###0.00") eine auf 2 Nachkommastellen gerundete Zahl - was Du ja nicht willst.


Probier mal:
Code:

Option Explicit

Sub test()
Dim Betrag As Double

MsgBox Format(200 + 2 / 3, "###0.00")

Betrag = Format(Betrag, "###0.00")

Betrag = 200 + 2 / 3
MsgBox Betrag

End Sub
Die erste MsgBox gibt nicht 200,66 aus, sondern 200,67.
Die zweite MsgBox zeigt, dass Betrag weiterhin die maximal mögliche Anzahl an Nachkommastellen enthält.

Wenn Du
- die Nachkommastellen nach der 2. Stelle abschneiden willst
- das Komma eliminieren willst
dann sähe meine Function so aus:

Code:

Option Explicit

Sub test()
Dim x As Long
x = Referenznummer(200 + 2 / 3)

MsgBox x
End Sub


Function Referenznummer(ByVal Betrag As Double) As Long

Referenznummer = Fix(Betrag * 100)

End Function

__________________

Datum und Uhrzeit, Makrorekorder-Code entschlacken, {Matrixformeln}
Tutorials zu Pivottabellen: Kurzeinstieg; Dynamischer Datenbereich; Daten und Zeiten gruppieren
Für 6 meiner Beiträge haben sich die Hilfesuchenden mit einer Spende an Wikipedia, die Tafeln oder Hilfe für krebskranke Kinder eV bedankt (das entspricht 0,044% per 26.07.2018) - eine tolle Geste!
EarlFred ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.08.2018, 10:08   #7
drambeldier
MOF Koryphäe
MOF Koryphäe
Standard

Moin,

eine Funktion gibt einen Funktionswert zurück und sonst gar nichts.

Abgegehen davon: Was ist von einem Namen "Referenznummer" zu halten, wenn diese Nummer beliebig oft entstehen kann?

__________________

Gruß
Ralf
drambeldier ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.