22.3 Eine Tabelle per Makro kippen
Manchmal ist es erforderlich, eine Aufzeichnung durch kleine Veränderungen so zu präparieren, dass sie bei möglichst vielen Gelegenheiten eingesetzt werden kann. Dies soll hier an einem Makro gezeigt werden, mit dessen Hilfe bei einer Tabelle Spalten und Zeilen vertauscht (transponiert) werden können. Das ist häufig sinnvoll, wenn Tabellen in die falsche Richtung wachsen. Wegen der Übersichtlichkeit ist es nämlich meist günstiger, eine Tabelle in die Tiefe als in die Breite wachsen zu lassen.
Bei der Auswertung eines Tests sind beispielsweise im Lauf der Zeit immer neue Spalten mit Testergebnissen hinzugekommen. Es wäre günstig, die Tabelle zu kippen. Manuell müssten Sie die Tabelle kopieren, mit Transponieren außerhalb der alten Tabelle einfügen, die alte Tabelle löschen und die neue transponierte Tabelle an diesen Ort verlagern. Es würde aber nicht ausreichen, diese Schritte einfach aufzuzeichnen. Das Makro würde dann nur bei Tabellen funktionieren, die immer gleich groß sind. Der Nutzen des Makros wäre gering.
Die Ausgangstabelle, die gekippt werden soll
Per Makro transponieren
Es soll erreicht werden, dass sich das Makro zunächst den Ort der alten Tabelle merkt, um am Ende dort die transponierte Tabelle wieder einzufügen. Auch die dafür notwendigen Anweisungen lassen sich aufzeichnen. Hier die einzelnen Schritte:
1 Zunächst wird die Tabelle markiert, die transponiert werden soll. Rechts neben der Tabelle muss ein hinreichend großer Bereich frei sein, in dem die transponierte Tabelle vorübergehend Platz finden kann.2 Dann wird die Aufzeichnung mit dem Symbol Makro aufzeichnen und der Einstellung Relative Aufzeichnung gestartet.
3 Die markierte Tabelle wird über Formeln/Definierte Namen/Namen definieren mit dem Namen »Quelle« versehen. Anschließend wird sie mit Kopieren in die Zwischenablage übertragen.
4 Mit 2 * + und wird der Zellzeiger rechts neben die markierte Tabelle gesetzt. Mit Zwischenablage/Einfügen und der Option Transponieren wird die gedrehte Tabelle vom Zellzeiger an eingefügt (dafür der freie Bereich).
5 Ohne an der Markierung etwas zu ändern, wird diesem Bereich wie oben beschrieben der Name »Versetzt« zugewiesen.
6 Mit Start/Bearbeiten/Suchen und Auswählen/Gehe zu und dem Eintrag »Quelle« wird die Markierung zur ursprünglichen Tabelle zurückgebracht. Dann wird diese Tabelle mit gelöscht. Mit Gehe zu wird wieder die transponierte Tabelle markiert, also die mit dem Namen »Versetzt«, und mit Ausschneiden in die Zwischenablage übernommen.
7 Wieder mit Gehe zu wird der Bereich »Quelle« markiert und dort der Zellzeiger mit in die oberste linke Zelle dieses Bereichs gesetzt und der Bereich dabei aufgelöst. (Das ist wichtig, weil sonst beim Einfügen die Größe des Zielbereichs nicht brauchbar ist.) Mit Einfügen wird die transponierte Tabelle hier untergebracht.
8 Abschließend wird noch einmal das Dialogfeld für den Namens-Manager mit Formeln/Definierte Namen/Namens-Manager aufgerufen. Dort werden die beiden Namen »Quelle« und »Versetzt« markiert und mit Löschen entfernt. Nach dem Schließen des Dialogfeldes wird die Aufzeichnung mit einem Klick auf das Symbol Aufzeichnung beenden abgeschlossen.
Die gekippte Tabelle
Das aufgezeichnete Makro sieht so aus:
Aufgezeichnetes Makro zum Transponieren einer Tabelle
Das aufgezeichnete Makro hat aber immer noch eine Schwachstelle, die beim Blick auf die Makroaufzeichnung schnell sichtbar wird. Beide Male werden für die Bereiche, die das Makro vorübergehend benennt, feste Tabellenbereiche angegeben. Das passt aber ja hier gerade nicht, denn das Makro soll verwendet werden können, egal, an welcher Stelle die Tabelle liegt und wie groß sie ist.
Hier ist also ein manueller Eingriff erforderlich. Über das Dialogfeld Makro kann das neue Ma kro ausgewählt und mit der Schaltfläche Bearbeiten das VBA-Modulfenster geöffnet wer den.
Das korrigierte Makro
Setzen Sie bei den Zeilen mit Names.Add Name hinter den jeweiligen Namen den Bezug RefersTo=Selection anstelle der bisherigen Bereichsadressen, und zwar ohne Anführungszeichen. Das korrigierte Makro kann jetzt für jeden beliebigen Bereich benutzt werden. Wählen Sie im VBA-Fenster den Befehl Datei/Speichern und Schließen und zurück, um wieder in das normale Excel-Fenster zu wechseln.
Makros schrittweise ablaufen lassen
Wenn ein Makro nicht so arbeitet, wie Sie es erwarten, können Sie es schrittweise testen, sodass Sie bei jedem Schritt sehen können, was passiert. Um den schrittweisen Ablauf zu starten, klicken Sie im Dialogfeld Makro auf die Schaltfläche Schritt anstelle von Ausführen.
Das Fenster für das Makro wird im Fenster des VBA-Editors geöffnet und der erste Schritt des Programms markiert. Es ist praktisch, die Debuggen-Symbolleiste eingeblendet zu halten. Mit einem Klick auf das Symbol Einzelschritt lässt sich der Ablauf des Makros genau kontrollieren. Jedes Mal wenn Sie mit Einzelschritt einen Schritt im Makro weitergehen, wird die Zeilenmarkierung im Modulfenster auf diejenige Zeile gesetzt, die als nächstes abgearbeitet wird, sodass Sie gut verfolgen können, was mit jeder Zeile in der Tabelle passiert. Ist die Verfolgung der Einzelschritte nicht mehr nötig, klicken Sie auf das Symbol Fortsetzen, um das Makro weiterlaufen zu lassen. Oder Sie wählen den Befehl Ausführen/Zurücksetzen bzw. das Symbol Zurücksetzen. Bei langen Makros ist diese Methode freilich etwas mühsam. Dann ist es besser, mit Haltepunkten zu arbeiten, von denen in Abschnitt 23.1 noch die Rede sein wird.
Jeder Schritt wird vor der Ausführung markiert.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.