Wie zu Runden auf eine bestimmte Anzahl von signifikanten zahlen mit Excel VBA?
Edit: Dieser Teil ist gelöst!
So, ich habe ein paar Berechnungen in einem Programm, das ich mache, und die zahlen werden immer so lang, dass ich bin immer overflow-Fehler. Es ist aufgrund von Dingen wie dem teilen einer 50-stelligen Zahl durch eine weitere 50-stellige Zahl. Ich brauche einen Weg, um Runde spezifischen zahlen auf eine bestimmte Anzahl von signifikanten stellen.
Hier einige weitere Informationen. Zunächst alle, alle die zahlen, die ich wird die Rundung immer kleiner als 1. Die zahlen erhalten kann, so klein wie der 1E-50. Ich kümmert sich nur um die ersten 10 oder so signifikante Ziffern. Ich brauche nur einen Weg, um es Runden auf rund zehn sig Feigen, bevor er auf die nächste Berechnung, um zu verhindern, dass overflow-Fehler. Das, und eine Anzahl gehen zu 50 Figuren ist sehr sinnlos.
Ich dachte vielleicht Durchlaufen der Nummer, Ziffer für Ziffer? Das Programm könnte hinzufügen 1 zu einem Zähler, wenn die Anzahl gleich null ist, und dann brechen aus der Schleife, sobald es trifft alles andere als null. Dann ist der nächste Schritt könnte das abschneiden der Zahl, die Zähler plus jedoch viele signifikante Ziffern, die ich möchte.
Also für .000001234567812345678 zum Beispiel. Würde es wieder 5 Nullen. Wenn ich wollte, zehn wichtige Fakten, die ich tun würde, fünf + zehn = 15. Das Programm würde dann nur die ersten 15 Ziffern nach dem Dezimalkomma, so würde die Zahl abgeschnitten werden .000001234567812.
Andere Idee könnte sein, mit Hilfe des log. Dann wird die Kraft die neue Nummer ausgelöst werden würde, wäre die Anzahl der Nullen vor den signifikanten stellen.
Was ich nicht weiß ist, zunächst, wie man durch eine Zahl Ziffer für Ziffer, und überprüfen, ob jede Zahl ist eine null. Ich weiß auch nicht, wie Sie abschneiden einer Zahl zu einer bestimmten Menge von stellen.
Jede Hilfe wäre sehr geschätzt werden!
Edit: Das Teil ist nicht gelöst.
Ich würde mich schlecht fühlen, dass ein weiterer post so bald, also werde ich die Frage hier. Wenn es nicht beantwortet in 20 Minuten oder so, vielleicht mache ich einem anderen Beitrag. Warum das nicht funktioniert?
Sub Rounding()
Tracker = 0
For i = 1 To 10
Tracker = Tracker + 1
Cells(1, Tracker) = Rnd
Cells(1, Tracker) = Application.Evaluate("=Round(Cells(1, Tracker), 4 - (Int(Log(Cells(1,Tracker))) + 1))")
Next
Columns("A:J").EntireColumn.AutoFit
End Sub
Bekomme ich immer einen Fehler #NAME?, in jeder einzelnen Zelle. Dies sollte Runde jede Zahl auf vier signifikante stellen.
- Darauf hinzuweisen, dass Excel nur mit 15 stellen Genauigkeit: 50-stellige zahlen dargestellt werden können "richtig". Siehe Jerry ' s die Antwort hier: excelforum.com/excel-general/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Ihr Wert in A2, dann versuchen Sie entweder diese:
oder
Entnommen hier.
Range("A4") = Application.Worksheetfunction.Round(A2,3-(Int(Log(A2))+1))
und es hat nicht funktioniert. Ich erhalte "Ungültiger Prozeduraufruf oder ungültiges argument".Range("A2")
stattA2
.Range("A4") = Application.Evaluate("=Round(A2,3-(Int(Log(A2))+1))")
- und es funktionierte! Es macht um die Letzte Nummer, aber ich kann nur hinzufügen, eine zusätzliche Ziffer, und es sollte keine Rolle spielen. Danke!!!Warum würden Sie wollen, um die Schleife, wenn es bereits eine Funktion, die dir das gibt was du willst?
Cells(1, Tracker) = Application.Evaluate("=Round(Cells(1, Tracker), 4 - (Int(Log(Cells(1,Tracker))) + 1))")
zuCells(1, Tracker) = Application.Evaluate("=Round(Cells(1," & Tracker & "), 4 - (Int(Log(Cells(1," & Tracker & "))) + 1))")
Tracker ist eine variable und kein string 😉=ROUND(Cells(1,1), 4 - (INT(LOG(Cells(1,1))) + 1))
. Wenn ich auf die Fehlermeldung es sagt, "Diese Formel enthält unbekannte Texte".Application.Evaluate("=Round(" & Cells(1, Tracker) & ", 4 - (Int(Log(" & Cells(1, Tracker) & ")) + 1))")
Wird das nicht funktionieren, wenn 3-(Int(Log(Range("A2"))/log(10#))+1)) negativ ist (d.h. wenn es mehr signifikante zahlen vor dem Komma, als die Sie wünschen, um die Runde Zahl zu). Eine alternative ist
Fand ich heraus, dass in excel-Arbeitsblatt, kann man verwenden:
=RUNDEN(A2, 3-(INT(LOG(A2))+1))
aber in VBA, der code wird:
=Round(Range("A2"), 3-(Int(Log(Range("A2"))/log(10#))+1))