online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon maszstab vom 19.03.2022, 19:24 Options

Lösung

In Excel Runden über ein Makro mit Abfrage der Stellen

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


Antwort schreiben

Antwort 1 von Beverly vom 22.03.2022, 15:14 Options

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

Antwort 2 von maszstab vom 22.03.2022, 17:07 Options

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.

Antwort 3 von Beverly vom 22.03.2022, 18:19 Options

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

Antwort 4 von maszstab vom 22.03.2022, 18:46 Options

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

Antwort 5 von Beverly vom 22.03.2022, 21:25 OptionsLösung

Lösung
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

Antwort 6 von maszstab vom 23.03.2022, 18:47 Options

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

Antwort 7 von Beverly vom 24.03.2022, 17:15 Options

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

Ähnliche Themen

Excel - Sortierung leere Zellen an den Anfang stellen
andreas_3  09.10.2008 - 29 Hits - 3 Antworten

Excel Makro das Schriftfarbe nach Abfrage ändert ?
Wuschl32  28.10.2008 - 27 Hits - 8 Antworten

Abfrage über Excel
Mellli  07.09.2009 - 128 Hits - 3 Antworten

Kann man in Excel auch kaufmännisch auf 5-er runden (5, 15, 25)
maaxcologne  29.09.2009 - 365 Hits - 3 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026