Public Sub Zellen_durchlaufen1()
Dim i As Integer
Dim j As Integer
Dim CounterRow As Integer
Dim CounterColumn As Integer
CounterRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
CounterColumn = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
For i = 1 To CounterRow
    For j = 1 To CounterColumn
        Debug.Print Cells(i, j).Address
    Next j
Next i
End Sub

ALTERNATIVE

Public Sub Zellen_durchlaufen2()
Dim myCell As Range
For Each myCell In ActiveSheet.UsedRange
    Debug.Print myCell.Address
Next
End Sub

Grundlagen

  • Alle Zeilen / Spalten eines Tabellenblattes:
    • Columns.Count – gibt die Anzahl der Spalten aus (auch die ausgeblendeten und leeren) – idR: 16384
    • Rows.Count – gibt die Anzahl der Zeilen aus (auch die ausgeblendeten und leeren) – idR: 1048576
  • Zeilen / Spalten bis zur ersten ausgeblendeten Zeile / Spalte
    • Cells.SpecialCells(xlCellTypeVisible).Columns.Count – gibt die Anzahl der sichtbaren Spalten aus (auch die leeren)
    • Cells.SpecialCells(xlCellTypeVisible).Rows.Count – gibt die Anzahl der sichtbaren Zeilen aus (auch die leeren)Wenn keine Zeile bzw. Spalte ausgeblendet wurde, dann entspricht das den Columns.Count bzw. Rows.Count.
  • letzte Zeile / letzte Spalte Wie man gesehen hat, ergeben die zwei bereits erwähnten Methoden nicht die letzte beschriebene Zelle eines Eingabebereiches.
    • ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row – gibt die letzte beschriebene Zelle aus
    • ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column – gibt die letzte beschriebene Spalte aus
    • für eine bestimmte Zelle kann man auch … verwenden
      • ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 
      • ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
  • Alternativ gibt es auch Funktionen für Zellen mit Konstanten, Zellen mit Formeln usw. [siehe hier]

Alternativ gibt es auch Funktionen für Zellen mit Konstanten, Zellen mit Formeln usw. [siehe hier]

Beispiel 1

Columns.Count: 16384
Rows.Count: 1048576
— ActiveSheet.UsedRange.SpecialCells(???) —
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row: 7
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column: 4

ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Row: 4
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Column: 4
— Cells.SpecialCells(???) —
Cells.SpecialCells(xlCellTypeVisible).Columns.Count: 16384
Cells.SpecialCells(xlCellTypeVisible).Rows.Count: 1048576
— xlUp & xlToLeft —
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row: 7
ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column: 4

ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row: 4
ActiveSheet.Cells(4, Columns.Count).End(xlToLeft).Column: 3

Beispiel 2

Columns.Count: 16384
Rows.Count: 1048576
— ActiveSheet.UsedRange.SpecialCells(???) —
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row: 8
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column: 4
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Row: 4
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Column: 1
— Cells.SpecialCells(???) —
Cells.SpecialCells(xlCellTypeVisible).Columns.Count: 16384
Cells.SpecialCells(xlCellTypeVisible).Rows.Count: 1048576
— xlUp & xlToLeft —
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row: 8
ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column: 4
ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row: 5
ActiveSheet.Cells(4, Columns.Count).End(xlToLeft).Column: 1

Beispiel 3

Columns.Count: 16384
Rows.Count: 1048576
— ActiveSheet.UsedRange.SpecialCells(???) —
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row: 7
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column: 4
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Row: 5
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Column: 3
— Cells.SpecialCells(???) —
Cells.SpecialCells(xlCellTypeVisible).Columns.Count: 16384
Cells.SpecialCells(xlCellTypeVisible).Rows.Count: 3
— xlUp & xlToLeft —
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row: 7
ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column: 4
ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row: 3
ActiveSheet.Cells(4, Columns.Count).End(xlToLeft).Column: 4

VBA für Beispiele

Sub Demo_Spalten_Zeilen()
Debug.Print "Columns.Count: " & Columns.Count
Debug.Print "Rows.Count: " & Rows.Count
Debug.Print "---- ActiveSheet.UsedRange.SpecialCells(???) ---"
Debug.Print "ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row: " & ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Debug.Print "ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column: " & ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
Debug.Print "ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Row: " & ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Row
Debug.Print "ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Column: " & ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Column
Debug.Print "---- Cells.SpecialCells(???) ---"
Debug.Print "Cells.SpecialCells(xlCellTypeVisible).Columns.Count: " & Cells.SpecialCells(xlCellTypeVisible).Columns.Count
Debug.Print "Cells.SpecialCells(xlCellTypeVisible).Rows.Count: " & Cells.SpecialCells(xlCellTypeVisible).Rows.Count
Debug.Print "---- xlUp & xlToLeft ---"
Debug.Print "ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row: " & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Debug.Print "ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column: " & ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Debug.Print "ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row: " & ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
Debug.Print "ActiveSheet.Cells(4, Columns.Count).End(xlToLeft).Column: " & ActiveSheet.Cells(4, Columns.Count).End(xlToLeft).Column
End Sub

Links