Excel: Note mittels VBA runden?
die Aufgabe lautet: "...berechnete Noten sollen nach der 1. Nachkommastelle "abgeschnitten" werden werden". Dies soll mittels einer VBA-Funktion "NOTERUNDEN" realisiert werden.
Kennt jmd zufällig einen fertigen Quelltext dafür ?
3 Antworten
Das hier:
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
habe ich hier gefunden.
Die Funktion "KÜRZEN" gibt es aber auch direkt in Excel.
Du müsstest in dem Code halt nur dreimal das "Kürzen" durch "NOTERUNDEN" ersetzen.
Public Function NOTERUNDEN(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
NOTERUNDEN = dblValue
Exit Function
Else
NOTERUNDEN = CDbl(VBA.Left(CStr(dblValue), _
InStr(CStr(dblValue), ",") + intDec))
End If
End Function
Sub test()
Debug.Print NOTERUNDEN(1.294, 1)
End Sub
Wenn ich test ausführe liefert es mir 1,2 als Ergebnis. So solle es doch sein, oder?
ich weiss nicht ob das was bei der Programmierung ausmacht, aber gerundet werden sollen gewisse Werte innerhalb einer Tabellenspalte mittels vba. also das runden soll sich auf eine Tabelle in einer Arbeitsmappe beziehen.
Du hattet geschrieben:
Dies soll mittels einer VBA- Funktion "NOTERUNDEN" realisiert werden.
Also ist eine Funktion! gefordert. Wie man DIE einbindet solltest Du eigentlich wissen, wenn Du so eine Aufgabe bekommst. Sonst versuche mal das im Netzt zu finden, oder stelle dazu eine neue Frage. Da gibt es hier Experten, die sich damit wahrscheinlich besser auskennen als ich. Ich habe das schon ewig nicht mehr gebraucht.
So wie ich Dich jetzt verstehe, brauchst Du aber eher ein Ereignismakro?!
Also keine Funktion, sondern willst z.B. erreichen, dass, sobald Du einen Wert im Bereich B1:B100 eingibst, dieser auf eine Nachkommastelle gekürzt wird?
Das ist ganz etwas anderes.
dein letzter Punkt trifft es genau! naja wir wurden eher ins kalte Wasser geschmissen und ohne genaue Vorkenntnisse wird das eben von uns erwartet.
danke für mühe!
Also so ein Ereignismakro kriege ich wohl noch selber hin:
Mache einen Rechtsklick auf den Tabellenreiter (Ganz unten, da wo z.B. "Tabelle 1" steht) und dann "Code anzeigen". In dem großen Fenster fügst Du diesen Code ein:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then 'Range("A1:A100") ANPASSEN
If InStr(Target, ",") = 0 Then Exit Sub
On Error GoTo ErrorHandler
Application.EnableEvents = False
Target.Value = Left(Target, InStr(Target, ",") + 1) * 1
End If
ErrorHandler: Application.EnableEvents = True
End Sub
Teste mal ausführlich.
Also ein 2,56 oder eine 2,52 soll jeweils zu einer 2,5000 werden.
Dafür braucht es kein VBA.
=AUFRUNDEN((DeineNote-0,05);1)
Der Minus Anteil sorgt dass das Aufrunden NIE versehentlich die 1ste Dezmalstelle erhöht.
Dies geht natürlich auch mit VBA
Dim Ergebnis as Double
Ergebnis = Worksheetfunctions.RoundUp( (DeineNote-0,05),1)
Ich würd's noch einfacher machen:
Public Function NoteRunden(Note As Double) As Double
NoteRunden = Int(Note * 10) / 10
End Function
Das funktioniert schon mal gut für Zahlen mit 2 Nachkommastellen (z.B. 2,45 zu 2,4).
Aber wenn ich eine 1,7 stehen habe, gibt der mir eine 1,6 wieder.
Weiß du wie man das fixen kann?
reicht denn copy paste ? ich habs nämlich so gemacht, komme aber nicht auf das gewünschte Ergebnis