4.9k Aufrufe
Gefragt in Tabellenkalkulation von
Ich befürchte, das ist etwas für ambitionierte Bastler:

In einer bestehenden Excel Tabelle möchte ich beliebige Zellen mit Hilfe eines Makros unterschiedlich (stark) runden können.

Die Formeln kenne ich. Das ist aber in der Regel recht umständlich diese einzubauen.

Fantastisch wäre ein Makro, dass mich dann mit einer InputBox nach der Anzahl der Stellen fragt (und ggf. noch mit einen Hinweis darauf gibt, dass negative Zahlen VOR-Komma runden und positive NACH-Komma).

Wäre es zuviel verlangt, wenn ich dann noch AUF- oder AB-runden auswählen könnte, um manuell etwas steuern zu können?

Jetzt schonmal VIELEN DANK

7 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

am günstigsten wäre, wenn du ein UserForm verwendest und dort 2 OptionsButton hast, wo man entweder Auf- oder Abrunden auswählen kann (bei OptionsButtons ist immer nur 1 auswählbar, der andere wird automatisch abgewählt). Außerdem benötigst du noch eine TextBox, in der du die Anzahl Stellen eingibst. Und in Abhängigkeit von dem gewählten OptionsButton wird dann entweder auf- oder abgerundet.

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin,
grundsätzlich habe ich das soweit verstanden.
Leider hapert es bei der Umsetzung etwas.
Die Erstellung von Makros beschränkt sich bei mir bisher leider auf das Aufzeichnen.
Solltest Du heute Nachmittag ein wenig zu viel Zeit haben ...

DANKE im Voraus

Steht dann danach eigentlich die Rundungsformel in der Zelle, so, dass ich das Runden auch wieder herausnehmen kann?
Ggf. muss ich ja nachträglich die ursprüngliche Formel ändern oder das Runden wieder rückgängig machen können.
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

du willst also die RUNDEN()-Formel selbst in der Zelle ändern? Da sehe ich allerdings keine Möglichkeit. Bei ganz einfachen Formeln wie =RUNDEN(A1/A2;3) wäre das kein Problem, auch bei einer Formel von dieser Art =RUNDEN(SVERWEIS(E1;A1:B20;2;0)/SVERWEIS(H1;I1:J10;2;0);3) wäre das noch machbar, aber wenn die Formel z.B. aus mehreren Teilformeln zusammengesetzt oder der RUNDEN-Teil irgendwo innerhalb einer komplizierten Formel steht , sehe ich da überhaupt keine Möglichkeit mehr, da man nicht mehr ermitteln kann, welcher Formelteil zur RUNDEN-Formel selbst gehört. Und was das Zurückändern betrifft, müsstest du schon die Ausgangsformel per Code irgendwo im Tabellenblatt abspeichern, denn wie soll Excel sonst feststellen, was vorher in der Zelle stand.

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin,

eine allzu komplizierte Formel habe ich nun nicht. Beispiele:
=Summe(A1:A12;A14;A16) oder =A1*B1
Die Ergebnisse möchte ich dann mit einem beliebig wählbaren Faktor Runden (und wenn möglich, halt auch wieder rückgängig machen). Das Rückgängig könnte man, meiner laienhaften Idee nach, ja auch über erneutes Runden mit einem Faktor größer oder gleich Null bewerkstelligen.
Ich muss die ursprüngliche Formel halt ggf. nachträglich ergänzen können, weil ich z. B. zusätzlich die Zelle A18 mit addieren möchte.
Die Runden-Formel müsste also per Makro quasi um die alte Formel herum formuliert werden.
Geht sowas überhaupt??

DANKE
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

erstelle ein UserForm und gib ihm den Namen frmRunden. Erstelle darauf 4 OptionsButton und benenne sie opbRunden, opbAufrunden, opbAbrunden, opbRunden sowie eine TextBox mit Namen tbFaktor und einen CommandButton mit Namen cmbUebernehmen.

Mache dann einen Doppelklick auf das UserForm und kopiere den folgenden Code in das rechte (obere) Codefenster:
Private Sub cmbUebernehmen_Click()
Dim strFormel As String
Dim coElement As Control
If Selection.Count > 1 Then
MsgBox "Bitte nur 1 Zelle auswählen"
Else
If ActiveCell.HasFormula Then
strFormel = ActiveCell.FormulaLocal
If opbLoeschen Then
If InStr(ActiveCell.FormulaLocal, "AUFRUNDEN(") > 0 Then
strFormel = Mid(strFormel, 12)
strFormel = Mid(strFormel, 1, InStrRev(strFormel, ";") - 1)
ActiveCell.FormulaLocal = "=" & strFormel
ElseIf InStr(ActiveCell.FormulaLocal, "ABRUNDEN(") > 0 Then
strFormel = Mid(strFormel, 11)
strFormel = Mid(strFormel, 1, InStrRev(strFormel, ";") - 1)
ActiveCell.FormulaLocal = "=" & strFormel
ElseIf InStr(ActiveCell.FormulaLocal, "RUNDEN(") > 0 Then
strFormel = Mid(strFormel, 9)
strFormel = Mid(strFormel, 1, InStrRev(strFormel, ";") - 1)
ActiveCell.FormulaLocal = "=" & strFormel
End If
Else
If IsNumeric(tbFaktor) Then
If InStr(ActiveCell.FormulaLocal, "AUFRUNDEN(") > 0 Then
strFormel = Mid(strFormel, 12)
strFormel = Mid(strFormel, 1, InStrRev(strFormel, ";") - 1)
ActiveCell.FormulaLocal = "=" & strFormel
ElseIf InStr(ActiveCell.FormulaLocal, "ABRUNDEN(") > 0 Then
strFormel = Mid(strFormel, 11)
strFormel = Mid(strFormel, 1, InStrRev(strFormel, ";") - 1)
ActiveCell.FormulaLocal = "=" & strFormel
ElseIf InStr(ActiveCell.FormulaLocal, "RUNDEN(") > 0 Then
strFormel = Mid(strFormel, 9)
strFormel = Mid(strFormel, 1, InStrRev(strFormel, ";") - 1)
ActiveCell.FormulaLocal = "=" & strFormel
End If
If opbAufrunden Then
ActiveCell.FormulaLocal = "=AUFRUNDEN(" & Application.Substitute(ActiveCell.FormulaLocal, "=", "") & ";" & CInt(tbFaktor) & ")"
ElseIf opbAbrunden Then
ActiveCell.FormulaLocal = "=ABRUNDEN(" & Application.Substitute(ActiveCell.FormulaLocal, "=", "") & ";" & CInt(tbFaktor) & ")"
Else
ActiveCell.FormulaLocal = "=RUNDEN(" & Application.Substitute(ActiveCell.FormulaLocal, "=", "") & ";" & CInt(tbFaktor) & ")"
End If
Else
MsgBox "Bitte eine Zahl eingeben"
End If
End If
End If
End If
End Sub


Erstelle außerdem ein allgemeines Modul und kopiere dort diesen Code:

Sub Starten()
If ActiveCell.HasFormula Then
frmRunden.Show
Else
MsgBox "Diese Zelle enthält keine Formel"
End If
End Sub

Dieses Makro kannst du einer Tastenkombination zuweisen oder du erstellst einen Schalter im Tabellenblatt und weist ihm den Code zu.

Wenn du das UserForm startest, kannst du einen der 4 OptionsButton auswählen und die in der Zelle vorhandene Formel wird entsprechend geändert. Der OptionsButton opbLoeschen bewirkt, dass alle Formeln zurückgesetzt werden, d.h. sie werden ohne Rundungsfunktion in die Zelle geschrieben. Das betrifft natürlich auch Formeln, die du von Hand mit einer der Rundungsfunktionen erstellt hast.

Bis später,
Karin
0 Punkte
Beantwortet von
Darf ich Dich einen "Schatz" nennen?

Nach ein wenig Mühe habe ich es dann doch geschafft.
(es sind nur 3 OptionsButtons erforderlich)

VIELEN DANK
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

wenn du nur Aufrunden und Abrunden sowie Löschen hast und kein Runden (=kaufmännisches Runden), dann sind tatsächlich nur 3 OptionsButton erforderlich.

Bis später,
Karin
...