(C) 2009 - 2021 by Mourad Louha · Alle Rechte vorbehalten

Vor einiger Zeit gab es im Forum „Office-Lösung“ eine sehr interessante Diskussion, wie in Excel der Wert von 80 ^ 200 ausgerechnet werden könnte. Mit Excel Bordmitteln ist dies leider so ohne weiteres nicht möglich, denn Excel schneidet Berechnungsergebnisse ab der 15. Stelle ab bzw. rundet diese auf oder ab. Auch eine Implementierung per VBA unter Verwendung der Standarddatentypen „Long“, „Single“ oder „Double“ ist nur bedingt möglich, denn der Wertebereich von Variablen dieser Typen ist begrenzt.

Heinz Schweigert, User des Forums, hatte damals im Thread vorgeschlagen, ob denn nicht meine experimentelle VBA-Anwendung „Karatsuba Algorithmus in VBA“ zur Berechnung von 80 ^ 200 verwendet werden könnte. Diese Anwendung bildet große Zahlen als „String“ ab und umgeht somit die Beschränkungen der anderen Datentypen. Nachteil ist jedoch, dass dann die Grundrechenarten zum Addieren und Subtrahieren selbst implementiert werden müssen.

Mein Code in dieser Anwendung war jedoch speziell zur Multiplikation von Zahlen mit sich selbst entwickelt worden, weshalb der Code noch entsprechend angepasst werden musste. Heinz hatte dies freundlicherweise zum Teil übernommen und eine angepasste Version dem Forum zur Verfügung gestellt, welche sehr schnell 80 ^ 200 ausrechnen konnte.

Dieser Artikel läutet eine Artikelserie ein, in welchen ich pro Artikel eine VBA Funktion für die Grundrechenarten mit großen Zahlen vorstellen werde. Anschließend wird ein Add-In erstellt werden, das die Funktionen komfortabel als Formel zur Verfügung stellt und dann auch zum Download bereit stehen wird. Schließlich plane ich das Add-In um weitere komplexere Rechenarten zu erweitern; wobei dies nur im Rahmen der mir zu Verfügung stehenden Zeit geschehen kann.

So nebenbei, Ziel des Add-Ins ist es nicht, gigantische Zahlen auszurechnen oder irgendwelche Rekorde zu brechen; dafür gibt es spezialisierte Programme. Das Ziel des Add-Ins ist es eher, über hinreichend schnelle Routinen im Alltag den Umgang mit großen Zahlen erleichtern.

Addition von großen Zahlen in Excel

Den Anfang macht heute eine Funktion zum Addieren von großen Zahlen. An dieser Stelle nochmal ein Danke schön an Heinz Schweigert für seine Ideen zur Verbesserung des Originalcodes.

VBA Large Numbers

Read more


Im ersten Artikel dieser Reihe hatte ich eine VBA Funktion vorgestellt, um große Zahlen in Excel addieren zu können. Prinzip hierbei ist, die in Strings abgelegten Zahlen blockweise zu addieren und anschließend die Blöcke wieder zusammenzufügen.

Dieser Artikel stellt nun eine VBA Funktion vor, um eine Subtraktion großer Zahlen durchzuführen; auch hier werden wir die Zahlen in Blöcke aufteilen, jedoch aber zusätzlich einen kleinen Trick anwenden.

Subtraktion von großen Zahlen in Excel

Im folgenden Bild sind die zwei Ausgangszahlen X und Y zu sehen. Die hier vorgestellte Funktion wird allerdings nur dann korrekt ablaufen, wenn beide Zahlen positiv sind und zudem X größer Y ist. Für spätere Berechnungen ist dies ausreichend, denn eine Subtraktion der Form „X – Y mit X < Y“ lässt sich durch eine Vorzeichenumkehr in das gewünschte Format umwandeln: „-(Y - X) mit Y > X“.

VBA Large Numbers

Read more


Nachdem wir nun eigene Berechnungsroutinen für die beiden Grundrechenarten „Addieren“ und „Subtrahieren“ für sehr große Zahlen implementiert haben (siehe hierzu meine beiden vorherigen Beiträge „In Excel mit sehr großen Zahlen rechnen – Teil 1 – Addition“ und „In Excel mit sehr großen Zahlen rechnen – Teil 2 – Subtraktion“), können wir nun eine VBA Funktion zur Multiplikation großer Zahlen erstellen.

Der hierfür verwendete Algorithmus stützt sich auf den „Karatsuba Algorithmus“. Ich hatte zwar schon dazu einen Artikel in meinem Blog auf meiner Softwareseite geschrieben, diesen Artikel hier im Excel Ticker Blog aber noch nicht übertragen. Deshalb an dieser Stelle nochmals ein paar Worte zur Funktionsweise vom Karatsuba Algorithmus.

Funktionsweise vom Karatsuba Algorithmus

Die Grundidee vom Algorithmus ist es, einerseits Multiplikationen durch Additionen und Verschiebeoperationen zu ersetzen und andererseits durch Aufteilung der zu multiplizierenden Zahlen Rechenschritte einzusparen. Das Prinzip nennt sich ‚Teil und Herrsche Prinzip‘, in Englisch ‚Divide and Conquer‘. Das Verfahren kann prima rekursiv angewandt werden, denn auch die Teilzahlen lassen sich wiederum aufteilen.

Der Karatsuba Algorithmus ist zwar nicht das schnellste Verfahren zur Multiplikation sehr großer ganzzahliger Zahlen, aber dafür recht einfach zu implementieren. Ein schnellerer Algorithmus ist übrigens der Schönhage-Strassen-Algorithmus, der auf einer schnellen Variante der diskreten Fourier-Transformation basiert. Wenn ich Zeit habe, werde ich mal eine VBA Implementierung von diesem Algorithmus ausprobieren.

VBA Large Numbers

Read more


Heute nun der vierte Teil meiner Serie zum Thema „In Excel mit großen Zahlen rechnen“, der eine Funktion zur effektiven Berechnung von Potenzen in Excel VBA vorstellen wird. Wenn wir von dem Ursprungsproblem (die Berechnung von 80 hoch 200 in Excel, siehe den ersten Teil der Artikelserie) ausgehen, benötigen wir spätestens und unabhängig von der Darstellung des Ergebnisses ab 80 hoch 160 eine Funktion, die mit großen Zahlen umgehen kann.

Die Berechnung von 80 hoch 200 entspricht insgesamt von 200 – 1 = 199 Multiplikation der Zahl 80 mal sich selbst. Eine Funktion zur Multiplikation großer Zahlen steht uns ja bereits zur Verfügung; diese hatte ich im dritten Teil der Artikelserie vorgestellt. Problematisch ist jedoch die hohe Anzahl an benötigten Multiplikationen, die zu einer hohen Rechenzeit führen. Insofern gilt es zu schauen, ob die Anzahl der Multiplikation reduziert werden kann und, wenn ja, wie dies in VBA implementiert werden kann.

Binäre Exponentiation

Wenn man im Internet nach Lösungen zu diesem Problem sucht, findet man sehr schnell das Verfahren der „Binären Exponentiation“, das bereits 200 v. Chr. In Indien entdeckt wurde und quasi als das Standardverfahren zur Reduktion der Anzahl der Multiplikationen gilt.

VBA Large Numbers

Read more


Dieser Artikel stellt die erste Version meines kostenlosen Add-Ins (Version 0.75 Build 151110) zum Rechnen mit großen Zahlen in Excel vor. Momentan sind benutzerdefinierte Funktionen zur Addition, Subtraktion, Multiplikation und Exponentiation implementiert. Beachten Sie bitte die Copyright- und Nutzungshinweise am Ende dieses Artikels. Der Code ist durch das Kennwort „excel-ticker“ geschützt. Das Add-In kann am Ende des Artikels heruntergeladen werden.

Der Code zum Add-In ist ebenfalls durch das für mich ausgestellte Zertifikat der Firma TC TrustCenter GmbH digital signiert. Dies bedeutet, dass nur das signierte Add-In der von mir entwickelten Originalversion (und auch spätere Updates) entspricht.

Zurzeit kann das Add-In nur mit Ganzzahlen rechnen, eine Erweiterung des Add-Ins für Kommazahlen ist jedoch bereits in Arbeit. Ausserdem ist geplant, in einer der nächsten Versionen des Add-Ins auch eine Funktion zur Division zur Verfügung zu stellen. Diese wird sich insbesondere auf die von Donald Knuth entwickelten Algorithmen und deren Ableitungen stützen. Ein weitere Funktion zur Berechnung von Ausdrücken der Form „X ^ Y Modulo N“ ist ebenfalls vorgesehen. Die Implementierung dieser Funktionen ist jedoch etwas komplexer; somit hatte ich mir überlegt, zunächst nur die bestehenden Funktionen in das Add-In zu verpacken.

Folgender wichtiger Hinweis ist zudem bei der Verwendung des Add-Ins zu beachten: Eine Zelle in Excel kann pro Zelle maximal 32.767 Zeichen enthalten. Sollte ein Formelergebnis aus dem Add-In diese Länge überschreiten, wird in der Zelle der Fehlerwert #WERT angezeigt. Solche Fälle können relativ schnell bei hohen Potenzen auftreten, zum Beispiel enthält 4 ^ 123456, das 74.328 Zeichen. Leider kann das Add-In diese Beschränkung nicht umgehen.

Namenkonventionen der Funktionen im Add-In

Das Add-In enthält nachfolgend beschriebene Funktionen, die beispielweise über den hier abgebildeten Funktionsassistenten in der Kategorie „Benutzerdefiniert“ aufgerufen werden können. Die Funktionen des Add-Ins stehen in den drei Sprachen Deutsch, Englisch und Französisch zur Verfügung.

VBA Large Numbers

Read more


Im letzten Artikel hatte ich die Features zu meinem kostenlosen Add-In zur Berechnung großer Zahlen in Excel (Downloadlink auch hier enthalten) vorgestellt. Dieser Artikel befasst sich nun mit dem Code zum Add-In und wird die wesentlichsten Funktionen beschreiben. Auf einige Funktionen werde ich logischerweise nicht mehr eingehen, denn diese wurden ja bereits in den vorangegangenen Artikeln dieser Serie erläutert.

VBA Large Numbers

Read more


Unser WM Planer wird langsam erwachsen und enthält mittlerweile zahlreiche Optionen und Features. Um unsere User bei der Bedienung des Planers und des späteren Zusatztool zu unterstützen, haben wir uns überlegt, dem Zusatztool eine kompilierte Hilfedatei im CHM-Format beizufügen. Aufgerufen wird die Hilfedatei über ein entsprechendes Symbol von der Hauptseite im Zusatztool.

Excel Soccer World Cup Planner

Read more


Beim Testen einer von mir geschrieben VBA Anwendung in Excel 2010, ist mir heute eine Merkwürdigkeit aufgefallen, die ich persönlich als Bug in Excel 2010 einstufen würde.

Meine Anwendung verwendet unter anderem Kontrollkästchen aus der Formularsymbolleiste, welche in einer Arbeitsmappe per VBA Code ein- und ausgeblendet werden. Zudem werden die Zellen, die diese Kontrollkästchen enthalten ebenfalls per Code ein- und ausgeblendet. Der Fehler in Excel 2010 äußerte sich in meiner Anwendung durch ein inkorrektes Positionieren der Steuerelemente, wenn folgende Schritte durchgeführt wurden:

  • Ausblenden von Formular-Steuerelementen (Visible = False) per Code.
  • Ausblenden der Zeilen, die die Steuerelemente enthalten.
  • Speichern und Schließen der Mappe.
  • Öffnen der Mappe und Einblenden der Mappe.
  • Die Steuerelemente liegen alle übereinander und haben ihre Position verloren.

Das Problem tritt übrigens bei Excel 2007 nicht auf. Um nun wirklich sicher zu gehen, dass es sich hier auch tatsächlich um ein Excel 2010 Problem handelt, habe ich mir eine kleine Beispielanwendung geschrieben, welche in einer Mappe 9 Kontrollkästchen untereinander positioniert. Die Eigenschaft zur Objektpositionierung der Steuerelemente ist auf „Nur von Zellposition abhängig“ gesetzt. Folgende zwei Screenshots zeigen die Tabelle in Excel 2007 und Excel 2010 im Ausgangszustand ohne jegliche Einwirkung von VBA Code.

Excel Controls Bug

Read more