Mit unterschiedlichen Varianten die letzte benutzte Zeile oder Spalte ermitteln

Mit den heute vorgestellten Makro-Lösungen können Sie mit unterschiedliche Methoden die letzte genutzte Zeile oder letzte genutzte Spalte in der Exceltabelle ermitteln und in einer Variablen speichern. Diese Funktionen sind besonders dann äußerst wertvoll, wenn Sie bestimmte Vorgänge automatisieren wollen, der Tabellenumfang aber variieren kann.

Teil 1: Mit unterschiedlichen Varianten die letzte benutzte Zeile oder Spalte ermitteln
Teil 2: Leere Zeilen in Exceltabellen löschen
Teil 3: Doppelte Zeilen löschen
Teil 4: Spalten und Zeilen in Excel Tabellen ohne großen Aufwand tauschen

Nachfolgend erkläre ich anhand von fünf Makros die unterschiedlichen Varianten. Die Varianten 1_1 und 1_2 nutzen dabei die Funktion UsedRange (genutzter Bereich). Die Alternativen Makros der Varianten 2_1 bis 2_3 dagegen prüfen nicht den genutzten Bereich, sondern jeweils nur eine ausgewählte Zeile oder Spalte.

Beide Lösungsansätze haben Vor- und Nachteile. Die geeignete Variante ist deshalb zwingend in jedem Einzelfall
anhand der vorliegenden Voraussetzungen im Tabellenblatt auszuwählen.

Weiterlesen

 

Lesehilfe für große Tabellen: Aktuelle Zeile fett hervorheben

Das erste Makro, dass ich Ihnen vorstellen möchte, ist eine Lesehilfe für große Tabellen. Es wird immer automatisch die aktuelle Zeile fett hervorgehoben. Sobald mehr als eine Zeile markiert ist, passiert dagegen nichts. Das Makro hilft Ihnen also dabei, immer leicht die Werte einer Zeile lesen zu können, ohne in der Zeile zu verrutschen.

Den Programmcode fügen Sie im VBA Editor in das jeweilige Tabellenblatt (vgl. Abbildung 1) ein! (nicht als Modul!)

Makro-Programmcode:

Private MeineZeile As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Dim markierteZeilen As Long

markierteZeilen = Selection.Rows.Count

If markierteZeilen = 1 Then
    If Not MeineZeile Is Nothing Then MeineZeile.Font.Bold = False
    Target.EntireRow.Font.Bold = True
    Set MeineZeile = Target.EntireRow
End If

End Sub

Abbildung 1

Alternative optische Hervorhebungen

Statt einem Fettdruck kann die aktuelle Zeile auch anderweitig hervorgehoben werden. Dafür bietet sich eine farbliche Änderung der Schriftart oder des Hintergrunds an.
Ersetzen Sie hierfür den Programmcode der Zeile

Target.EntireRow.Font.Bold = True

für die Schriftfarbe mit

Target.EntireRow.Font.Color = -16776961

für die Hintergrundfarbe mit

Target.EntireRow.Interior.Color = 65535

Eine weitere Option könnte sein, die Schriftgröße der aktuellen Zeile zu ändern.

Target.EntireRow.Font.Size = 18

Bei der Nutzung der drei vorgenannten Varianten ist jeweils gleichzeitig die Änderung beim Verlassen der Zeile rückgängig zu machen. Hierfür ersetzen Sie den Programmcode der Zeile

If Not MeineZeile Is Nothing Then MeineZeile.Font.Bold = False

für die Schriftfarbe mit

If Not MeineZeile Is Nothing Then MeineZeile.Font.ColorIndex = xlAutomatic

für die Hintergrundfarbe

If Not MeineZeile Is Nothing Then MeineZeile.Interior.Pattern = xlNone

bzw. für die Schriftgröße mit

If Not MeineZeile Is Nothing Then MeineZeile.Font.Size = 10

Bei allen Varianten sollten Sie im Blick haben, dass ggf. vorhandene Formatierungen durch den Wechsel der Zeile überschrieben werden und auch beim Verlassen der Zeile nicht mehr zurückgesetzt werden. Prüfen Sie deshalb zunächst, ob in Ihrer Tabelle bereits Formatierungen vorhanden sind, die erhalten bleiben sollen. Arbeiten Sie z.B. bereits mit Fettdruck um bestimmte Zellwerte hervorzuheben, sollten Sie diese Variante nicht verwenden, sondern dann ggf. alternativ eher die Schriftfarbe ändern. Das gilt natürlich nur dann, wenn bisher keine unterschiedlichen Schriftfarben genutzt werden.

Beim Verlassen der Zeile wird diese immer auf die Standardwerte schwarze Schrift, keine Hintergrundfarbe, ohne Fettdruck oder Schriftgröße 10 zurückgesetzt. Je nachdem welche Variante des VBA Codes Sie in Ihrem Makro verwenden.

Weitere Anpassungsmöglichkeiten

Möglich ist jedoch auch eine Kombination mehrerer Varianten. Fügen Sie dann direkt untereinander die gewünschten Zeilen ein. Vergessen Sie auch hier immer das Gegenstück nicht um beim Verlassen der Zeile die Formatierung wieder zurückzusetzen.

Möchten Sie andere Farben für die Kennzeichnung nutzen, können Sie den zugehörigen Farbcode z.B. über die Aufzeichnung eines Makros ermitteln. Lesen Sie hierzu auch den Artikel Excel Makros mit dem Makro-Rekorder aufzeichnen

Excel Makros mit dem Makro-Rekorder aufzeichnen

Inhalt der Zwischenablage sichern

Eine bekannte Einschränkung von Excel ist es, dass die Zwischenablage beim aktivieren einer Zelle gelöscht wird. Das gleiche gilt, wenn durch ein Makro Zellen verändert werden.

Möchten Sie also die Daten der Tabelle nicht nur lesen, sondern zum Beispiel auch Inhalte kopieren und einfügen ist noch eine Anpassung an der VBA Routine notwendig. Am Anfang des Makros muss zunächst der aktuelle Inhalt der Zwischenablage gesichert werden, damit er am Ende wieder in die Zwischenablage neu kopiert werden kann.

Der angepasste VBA Code enthält nun zusätzlich noch vor und nach der Ausführung der Markierung der aktuellen Zeile die Sicherung und Wiederherstellung der Zwischenablage.

WICHTIG: Die Zwischenablage wird im zweiten Tabellenblatt in Zelle A1 zwischengespeichert. Wenn in Ihrer Datei hier bereits Daten vorhanden sein sollen müssen Sie eine alternative Zelle für die Speicherung der Zwischenablage definieren!

Private MeineZeile As Range
 
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Dim markierteZeilen As Long

markierteZeilen = Selection.Rows.Count

If markierteZeilen <> 1 Then
    Exit Sub
Else
    Sicherung_Zwischenablage
    If Not MeineZeile Is Nothing Then MeineZeile.Font.Bold = False
    Target.EntireRow.Font.Bold = True
End If

Set MeineZeile = Target.EntireRow

If Tabelle2.Range("A1").Value <> "" Then
    Zwischenablage_Fuellen Tabelle2.Range("A1").Value
    Tabelle2.Range("A1").Value = ""
End If

End Sub

Die Funktionen Sicherung_Zwischenablage und Zwischenablage_Fuellen sind zusätzlich in ein Modul einzufügen.

Private Const CF_TEXT As Long = 1

Function Sicherung_Zwischenablage()

Dim strZwischenablage As DataObject
Set strZwischenablage = New DataObject

strZwischenablage.GetFromClipboard
If strZwischenablage.GetFormat(CF_TEXT) Then Tabelle2.Range("A1") = strZwischenablage.GetText

End Function

Function Zwischenablage_Fuellen(ByVal Text As Variant) As Boolean
    Zwischenablage_Fuellen = CreateObject("htmlfile").ParentWindow.ClipboardData.SetData("Text", Text)
End Function

Mustermappen

Die erste Beispieldatei enthält das Grundmakro ohne Sicherung der Zwischenablage.
aktuelle_zeile_fett_hervorheben.xlsm

Wenn Sie den Inhalt der Zwischenablage sichern wollen, nutzen Sie alternativ die angepasste Version.

aktuelle_zeile_fett_hervorheben _mit_zwischenablage.xlsm

WICHTIG: Die Zwischenablage wird im zweiten Tabellenblatt in Zelle A1 zwischengespeichert. Wenn in Ihrer Datei hier bereits Daten vorhanden sein sollen müssen Sie eine alternative Zelle für die Speicherung der Zwischenablage definieren!