Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bereichsnamen mit lastRow, last column

Bereichsnamen mit lastRow, last column
09.10.2016 16:01:54
Gerhard
Hallo,
mit diesen Funktionen (von Christian, 2009) soll der Bereichsname "gelb_1" in der Schreibweise
With wks... .Range(.Cells.....).Name = "gelb_1"erzeugt werden.
Wie muss die VBA-Zeile dazu geschrieben werden?
Die Umsetzung der Funktionen in VBA gelingt mir nicht.
Danke für die Hilfe
Gerhard
Meine Beispiel-Datei: https://www.herber.de/bbs/user/108679.xlsm
Function LastRow(wks As Worksheet) As Long
Dim lngFirst As Long, lngLast As Long, lngTmp As Long
With Application
If .CountA(wks.Cells) = 0 Then Exit Function
If .CountA(wks.Rows(wks.Rows.Count)) Then
LastRow = wks.Rows.Count: Exit Function
End If
lngLast = wks.Rows.Count
Do While lngLast > lngFirst + 1
lngTmp = (lngFirst + lngLast) \ 2
If .CountA(wks.Rows(lngTmp).Resize(lngLast - lngTmp)) Then _
lngFirst = lngTmp Else lngLast = lngTmp
Loop
If .CountA(wks.Rows(lngLast)) Then LastRow = lngLast Else LastRow = lngFirst
End With
End Function
Function LastCol(wks As Worksheet) As Long
Dim lngFirst As Long, lngLast As Long, lngTmp As Long
With Application
If .CountA(wks.Cells) = 0 Then Exit Function
If .CountA(wks.Columns(wks.Columns.Count)) Then
LastCol = wks.Columns.Count: Exit Function
End If
lngLast = wks.Columns.Count
Do While lngLast > lngFirst + 1
lngTmp = (lngFirst + lngLast) \ 2
If .CountA(wks.Columns(lngTmp).Resize(, lngLast - lngTmp)) Then _
lngFirst = lngTmp Else lngLast = lngTmp
Loop
If .CountA(wks.Columns(lngLast)) Then LastCol = lngLast Else LastCol = lngFirst
End With
End Function

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereichsnamen mit lastRow, last column
09.10.2016 17:06:31
Uduuh
Hallo,
Sub aaa()
Dim lngZeile As Long, lngSpalte As Long
Dim wks As Worksheet
Set wks = Sheets(1)
lngZeile = LastRow(wks)
lngSpalte = LastCol(wks)
With wks
.Range(.Cells(10, 4), .Cells(lngZeile, lngSpalte)).Name = "gelb"
End With
End Sub
In beiden Functions musst du den \ gegen / austauschen.
Gruß aus’m Pott
Udo

Anzeige
AW: Danke Udo!
09.10.2016 19:38:06
Gerhard
Hallo Udo,
vielen Dank für die Lösung!
Gruß
Gerhard
;
Anzeige
Anzeige

Infobox / Tutorial

Bereichsnamen mit lastRow und lastColumn in Excel VBA


Schritt-für-Schritt-Anleitung

Um den Bereichsnamen "gelb" in Excel VBA mithilfe der Funktionen LastRow und LastCol zu erstellen, folge diesen Schritten:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel, indem Du ALT + F11 drückst.

  2. Füge die folgenden Funktionen für lastRow und lastColumn ein:

    Function LastRow(wks As Worksheet) As Long
       Dim lngFirst As Long, lngLast As Long, lngTmp As Long
       With Application
           If .CountA(wks.Cells) = 0 Then Exit Function
           If .CountA(wks.Rows(wks.Rows.Count)) Then
               LastRow = wks.Rows.Count: Exit Function
           End If
           lngLast = wks.Rows.Count
           Do While lngLast > lngFirst + 1
               lngTmp = (lngFirst + lngLast) \ 2
               If .CountA(wks.Rows(lngTmp).Resize(lngLast - lngTmp)) Then _
                   lngFirst = lngTmp Else lngLast = lngTmp
           Loop
           If .CountA(wks.Rows(lngLast)) Then LastRow = lngLast Else LastRow = lngFirst
       End With
    End Function
    
    Function LastCol(wks As Worksheet) As Long
       Dim lngFirst As Long, lngLast As Long, lngTmp As Long
       With Application
           If .CountA(wks.Cells) = 0 Then Exit Function
           If .CountA(wks.Columns(wks.Columns.Count)) Then
               LastCol = wks.Columns.Count: Exit Function
           End If
           lngLast = wks.Columns.Count
           Do While lngLast > lngFirst + 1
               lngTmp = (lngFirst + lngLast) \ 2
               If .CountA(wks.Columns(lngTmp).Resize(, lngLast - lngTmp)) Then _
                   lngFirst = lngTmp Else lngLast = lngTmp
           Loop
           If .CountA(wks.Columns(lngLast)) Then LastCol = lngLast Else LastCol = lngFirst
       End With
    End Function
  3. Erstelle ein Sub, um den Bereichsnamen zu setzen:

    Sub SetzeBereichsname()
       Dim lngZeile As Long, lngSpalte As Long
       Dim wks As Worksheet
       Set wks = Sheets(1) ' Den gewünschten Arbeitsblattnamen anpassen
       lngZeile = LastRow(wks)
       lngSpalte = LastCol(wks)
       With wks
           .Range(.Cells(10, 4), .Cells(lngZeile, lngSpalte)).Name = "gelb"
       End With
    End Sub
  4. Führe das Sub aus, um den Bereichsnamen zu erstellen.


Häufige Fehler und Lösungen

  • Fehler: "Typüberlauf"
    Stelle sicher, dass Du die Variablen lngZeile und lngSpalte korrekt als Long deklariert hast.

  • Fehler: Bereichsname kann nicht erstellt werden
    Überprüfe, ob der angegebene Bereich gültig ist und ob keine anderen Namen mit demselben Namen existieren.

  • Fehler: Kompilierungsfehler
    Wenn Du den Backslash (\) in den Funktionen siehst, ersetze ihn durch einen Schrägstrich (/), wie von Udo vorgeschlagen.


Alternative Methoden

Eine alternative Methode, um die letzte Zeile oder Spalte zu finden, ist die Verwendung des UsedRange-Objekts:

Dim lastRow As Long
lastRow = wks.UsedRange.Rows.Count

Das ist besonders nützlich, wenn Du schnell die letzte Zeile in einem vollen Arbeitsblatt finden möchtest, ohne eine eigene Funktion zu verwenden.


Praktische Beispiele

  1. Bereichsnamen für die gesamte Tabelle erstellen:

    Wenn Du die gesamte Tabelle benennen möchtest, kannst Du folgenden Code verwenden:

    Sub BereichsnameGesamt()
       Dim wks As Worksheet
       Set wks = Sheets(1)
       wks.Range("A1").CurrentRegion.Name = "Gesamtbereich"
    End Sub
  2. Bereichsnamen dynamisch setzen:

    Mit den LastRow und LastCol Funktionen kannst Du dynamische Bereichsnamen erstellen, die sich bei Änderungen der Daten anpassen.


Tipps für Profis

  • Verwende Option Explicit am Anfang Deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.
  • Nutze die Debug.Print-Anweisung, um während der Entwicklung Variablenwerte zu überwachen und zu debuggen.

FAQ: Häufige Fragen

1. Wie finde ich die letzte Zeile in einer bestimmten Spalte?
Du kannst die Funktion LastRow anpassen, um nur in einer bestimmten Spalte die letzte Zeile zu finden.

2. Was ist der Unterschied zwischen UsedRange und CountA?
UsedRange gibt den gesamten benutzten Bereich zurück, während CountA die Anzahl der nicht-leeren Zellen zählt, was hilfreich ist, um gezielt die letzte Zeile oder Spalte zu ermitteln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige