Excel: Note mittels VBA runden?

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.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
Mert6798 
Fragesteller
 04.06.2020, 17:13

Danke! Ich probier es gleich aus.

1
Mert6798 
Fragesteller
 04.06.2020, 19:05

reicht denn copy paste ? ich habs nämlich so gemacht, komme aber nicht auf das gewünschte Ergebnis

1
Oubyi, UserMod Light  04.06.2020, 19:28
@Mert6798
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?

1
Mert6798 
Fragesteller
 04.06.2020, 20:26
@Oubyi, UserMod Light

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.

1
Oubyi, UserMod Light  04.06.2020, 21:14
@Mert6798

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.

1
Mert6798 
Fragesteller
 04.06.2020, 21:42
@Oubyi, UserMod Light

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!

1
Oubyi, UserMod Light  04.06.2020, 22:24
@Mert6798

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.

1

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)

Mert6798 
Fragesteller
 04.06.2020, 17:13

ich werde es gleich mal ausprobieren, vielen Dank !

2

Ich würd's noch einfacher machen:

Public Function NoteRunden(Note As Double) As Double
NoteRunden = Int(Note * 10) / 10
End Function
Okan40  13.06.2021, 20:21

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?

0