Heute habe ich mir für weitere Tabellenarbeiten ein schnuckeliges, kleines Excel-Makro programmiert, mit dem sich die Übertragung der Werte der letzten Jahrestabelle in die aktuelle Jahrestabelle wesentlich vereinfachen lässt.
Es geht dabei darum, unterhalb der aktuellen Zelle zwölf Zellen mit einem Textinhalt mit einem Punkt am Anfang auszuwählen, sie in Formelinhalte umzuwandeln und in die Zwischenablage zu kopieren, sie in die Spalte links daneben als reine Zahlenwerte einzutragen und anschließend an den Anfang der zwölf Formeln vor dem Zeichen "=" wieder einen Punkt einzufügen.
Der Sinn davon ist, dass durch den Punkt vor dem Gleichheitszeichen (".=") aus dem Formelinhalt, der aus einem Bezug zu einer anderen Tabelle, also einer Verknüpfung, besteht, wieder ein reiner String, d. h. ein Textinhalt, gemacht wird.
In der Spalte links davon stehen jetzt die reinen Zahlenwerte einer anderen Tabelle, so dass damit weitergerechnet werden kann, ohne dass diese Werte aus einer verknüpften Tabelle ausgelesen werden müssen.
Nun ja, ich weiß nicht, inwieweit das anderen verständlich ist.^^
Bisher musste ich (1) die zwölf Zellen markieren, (2) ein selbstgeschriebenes Makro aufrufen, was die Punkte entfernt, (3) die markierten Formelinhalte in die Zwischenablage kopieren, (4) Cursor nach links setzen und die Zwischenablage in die Spalte links davon mit einem ebenfalls selbstgeschriebenen Makro als Werte eintragen, (5) die zwölf Zellen der Spalte rechts davon wieder markieren, (6) das Makro aufrufen, mit dem wieder ein Punkt "." vor das Gleichheitszeichen gesetzt wird, und (7) die Markierung wieder entfernen.
Jetzt genügt ein einziger Klick auf ein Symbol in der Symbolleiste, um das alles zu erledigen.
Das bedeutet auch, dass die Anfälligkeit, einen Fehler bei der Bedienung zu machen, bedeutend abgenommen hat.
(Das Symbol und die Verknüpfung zu dem Makro hatte ich heute auch eingebaut.)
Wen es interessiert,- hier ist das Makro:
----------
Sub WerteHolen()
If Workbooks.Count <= 1 Then Exit Sub
On Error GoTo Aussprung
' Inhalt der aktuellen Zelle holen
Zellinhalt = ActiveCell.FormulaLocal
' die ersten beiden Zeichen prüfen, wenn nicht ".=" und nicht "=", dann Ende
If Left$(Zellinhalt, 2) <> ".=" And Left$(Zellinhalt, 1) <> "=" Then Exit Sub
' aktuelle Zeile holen
Zeile = ActiveCell.Row
' akuelle Spalte holen
Spalte = ActiveCell.Column
Anzahl = 12 - 1
' 12 Zellen in aktueller Spalte markieren
Range(Cells(Zeile, Spalte), Cells(Zeile + Anzahl, Spalte)).Select
' Punkte am Formelanfang entfernen und Formelinhalte holen und anzeigen
' aber nur, wenn die ersten beiden Zeichen ".=" sind
If Left$(Zellinhalt, 2) = ".=" Then
Application.Run "Personl.xls!InhaltAktivieren"
End If
' sonst hier, falls bereits umgewandelt und Beginn mit "="
' die Formelinhalte in Zwischenablage kopieren
Selection.Copy
' Cursor auf gleicher Zeile eine Spalte weiter nach links setzen
Range(Cells(Zeile, Spalte - 1), Cells(Zeile, Spalte - 1)).Select
' Formelinhalte als reine Zahlenwerte einfügen
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
' 12 Zellen in aktueller Spalte erneut markieren
Range(Cells(Zeile, Spalte), Cells(Zeile + Anzahl, Spalte)).Select
' Punkte am Formelanfang wieder einfügen
Application.CutCopyMode = False
Application.Run "Personl.xls!InhaltAktivieren"
' Cursor wieder auf Anfangszeile setzen (Markierung entfernen)
Range(Cells(Zeile, Spalte), Cells(Zeile, Spalte)).Select
Aussprung:
End Sub
----------
Es könnte sicher ein bisschen 'eleganter' sein. Es ist ein bisschen wie im 'Drahtverhau' zusammengestrickt.^^
Allerdings musste ich mich auch erst ein wenig in die Makroprogrammierung wieder einarbeiten.
Aber es funktioniert gut. Das ist zunächst die Hauptsache.
Das Abfangen der Fehler habe ich übrigens erst heute Abend noch eingebaut.
Keine Kommentare:
Kommentar veröffentlichen
Danke für den Kommentar! :)