Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
620to624
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
620to624
620to624
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Von Zeile bis Ende durchzählen...

Von Zeile bis Ende durchzählen...
07.06.2005 11:34:46
Stefan
Hallo xlFreaks !
Mal ne kurze Frage.
Möchte von einer gewissen Zeile in einem Excelsheet bis zur letzten beschriebenen Zeile durchzählen.
Habe bisher nur folgendes Konstrukt :
'Dim blatt as Worksheet
For i = 10 To blatt.Rows.Count Step 1
If WorksheetFunction.CountA(blatt.Rows(i & ":" & i)) 0 Then
lastR = i
Exit For
End If
Next

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Von Zeile bis Ende durchzählen...
07.06.2005 11:53:18
Fritz
Hi Stefan,
Nimm folgenden Code für die Spalte A:
LetzteZeile=Worksheets("Tabelle1").Cells(65536,1).End(xlup).Row
Fritz
AW: Von Zeile bis Ende durchzählen...
07.06.2005 12:43:31
Stefan
Und dieses letzteZeile gibt mir definitv die letzte beschriebene Zeile zurück ?
Kann ich das auch in einer For-Schleife verwenden:
letzteZeile =
For i = 1 to letzteZeile....
AW: Von Zeile bis Ende durchzählen...
07.06.2005 13:07:25
bst
Nochmals Hallo,
Zum LetzteZeile=Worksheets("Tabelle1").Cells(65536,1).End(xlup).Row
IMHO nein.
Es funktioniert nicht, wenn:
a) die letzte Zelle in Spalte A (A65536) belegt ist
b) wenn kein Wert in Spalte A belegt ist, dann gibt es eigentlich ja keine
letzte beschriebene Zelle in Spalte A, oder ;-)
Zum UsedRange. Wenn der nicht die letzte beschriebene Zelle finden sollte, dann
steht dahinter irgendwo etwas drin. Leerzeichen, Formatierungen, Formeln, etc. pp.
Du solltest diese Zeilen/Spalten löschen. Sie verbrauchen nur unnötig Speicherplatz.
Und, falls Deine Daten nicht in der 1. Zeile anfangen sollten brauchst Du sowas:
Dim lastRow As Long
lastRow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1
FWIW, ich benutze zumeist sowas. Reicht mir aus, auch wenn es nicht b) berücksichtigt.
Gruß, Bernd
--
Option Explicit

Function GetLastRow(Optional spalte As Integer = 1) As Long
GetLastRow = Rows.Count
If Cells(GetLastRow, spalte).Value = "" Then GetLastRow = Cells(GetLastRow, spalte).End(xlUp).Row
End Function


Function GetLastRowWS(ws As Worksheet, Optional spalte As Integer = 1) As Long
With ws
GetLastRowWS = ws.Rows.Count
If ws.Cells(GetLastRowWS, spalte).Value = "" Then GetLastRowWS = ws.Cells(GetLastRowWS, spalte).End(xlUp).Row
End With
End Function

Anzeige
AW: Von Zeile bis Ende durchzählen...
07.06.2005 13:10:53
bst
Nachtrag und Sorry,
die ws waren zuviel. Auch wenn es trotzdem funktionierte ...
cu, Bernd
--

Function GetLastRowWS(ws As Worksheet, Optional spalte As Integer = 1) As Long
With ws
GetLastRowWS = .Rows.Count
If .Cells(GetLastRowWS, spalte).Value = "" Then GetLastRowWS = .Cells(GetLastRowWS, spalte).End(xlUp).Row
End With
End Function

AW: Von Zeile bis Ende durchzählen...
07.06.2005 12:09:10
Hajo_Zi
Hallo Stefan,
MsgBox ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem Windows 2000 SP4 und Excel Version 2000 SP3.


Anzeige
AW: Von Zeile bis Ende durchzählen...
07.06.2005 12:18:06
Stefan
Hallo. Mal ehrlich. Die Funktion "UsedRange" ist doch echt unbrauchbar. Weil: sie gibt nicht etwa den "beschriebenen" Inhalt wieder sondern sucht sich anscheinend den Inhalt bis zur "letzten" Zelle aus. Diese "letzte Zelle" ist jedoch nicht immer die letzte beschrieben Zelle... Deswegen kann man UsedRange eigentlich vergessen...
Aber ne Alternative wäre doch :
Von Row 20 bis zur letzten Row des Blattes
Wenn Row = leer, dann speichere RowIndex (Zeilennummer)
Wie setze ich nun meinen dilletantischen Pseudocode in VBA um ? Würde CountA benutzen....
AW: Von Zeile bis Ende durchzählen...
07.06.2005 12:21:59
Galenzo
dann nimm doch die Anweisung von "Fritz" - die macht genau das gewünschte für die Spalte A (deswegen die 1)
Viel Erfolg!
Anzeige
AW: Von Zeile bis Ende durchzählen...
07.06.2005 12:37:15
bst
Auch Hallo,
Warum sollte UsedRange denn unbrauchbar sein ?
Er liefert das zurück was auch von Excel als letzte Zelle angenommen wird.
Wenn dieses nicht Deine letzte beschriebene Zelle ist, dann hast eher Du irgendwann oder
irgendwo Murks gebaut, nicht Excel ;-)
Übrigens, im Gegensatz zu SpecialCells(xlLastCell) bzw. STRG-ENDE kommt
UsedRange sehr wohl auch mit 'gelöschten' letzten Spalten/Zeilen zurecht.
Just my 0,05 €,
Bernd
AW: Von Zeile bis Ende durchzählen...
07.06.2005 12:47:15
Stefan
Ne, habe die Daten aus nem DWH und egal was ich mache, der bringt mir nicht die letzte beschriebene Zeile. Hatte ja echt auf eure UsedRange-Hilfen gehofft (waren echt super), aber so sind sie für mich echt unbrauchbar, wenn ich ja nicht die letzte beschriebene Zeile ansprechen kann. Wie kann man denn dafür sorgen, dass man mit UsedRange nun wirklich die letzte beschrieben Zeile anspricht und nicht irgend' nme leere Zelle(Zeile)?
Anzeige
AW: Von Zeile bis Ende durchzählen.../Ranges
07.06.2005 13:03:56
Stefan
Hey xlFreaks !
Also, vielleicht noch mal an nem Beispiel mein Problem, vielleicht stelle ich mich auch einfach nur zu blöd an.
Ich habe ein Workbook mit 4 unterschiedlichen sheets. Das Problem ist : ich möchte mir auf jedem Blatt einen bestimmten Range heraussuchen, der für jedes Blatt unterschiedlich dimensioniert ist. Gemeinsam haben Sie, dass alle Ranges ab Zeile 28 beginnen. Mit eurer Hilfe konnte ich bisher folgendes lauffähiges Konstrukt basteln :

Sub DatenRangesBilden()
Dim i As Long, lastR As Long
Dim blatt As Worksheet
' Range für sheet1, sheet2 und sheet3 bilden
For Each blatt In ActiveWorkbook.Sheets
'Ausfindig Machen der Ranges
For i = blatt.UsedRange.Rows.Count To 1 Step -1
If WorksheetFunction.CountA(blatt.Rows(i & ":" & i)) <> 0 Then
lastR = i
Exit For
End If
Next i
'Bilden & Übergabe der Namen an die Ranges
ActiveWorkbook.Names.Add Name:=blatt.Name, RefersTo:= _
"=" & blatt.Name & "!" & _
"$28:$" & lastR + blatt.UsedRange.Row - 1
Next
End Sub

Das Problem, dass sich für mich nun ergibt, ist folgendes. Mit UsedRange stellt er mir leider nur in drei von vier Sheets den richtigen Range dar. Beim letzten sind es leider fast 40 Leerzeilen, die er mit in den Range reinzählt. Da sich die Funktion aber nun als brauchbar (in den anderen Fällen zumindest) erweist, frage ich mich nun, was ich denn nun noch für ne Option habe. Im Zweifel müsste ich halt die xlUp-Funktion für die letzte Beschriebene Zeile verwenden. Doch da habe ich diverse Anpassungsprobleme.
Bin für jede Hilfe offen. Danke.
Anzeige
AW: Von Zeile bis Ende durchzählen...
07.06.2005 13:56:50
Hajo_Zi
Hallo
man muß dabei bedenken das Excel die letzt Zeile nicht richtig erkennt falls Daten gelöscht. Durch ein Speichern ist aber das Problem gelöst.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.
AW: Von Zeile bis Ende durchzählen...
07.06.2005 14:42:45
bst
Hallo Hajo,
das ist IMHO ein weitverbreiteter Irrtum ;-)
Dieses trifft zwar für SpecialCells(xlLastCell) zu, wohl aber nicht auf UsedRange.
Bei jedem Zugriff auf UsedRange wird m.E. die letzte Zelle vom Excel/VBA neu gesetzt
sodaß danach auch SpecialCells(xlLastCell) wieder stimmt !!!
Lösche einfach mal was am Ende und probier dann dieses aus.
Gruß, Bernd
--
Option Explicit

Sub LetzeZelle()
Debug.Print ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address
Debug.Print ActiveSheet.UsedRange.Address
Debug.Print ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address
End Sub

Anzeige
AW: Von Zeile bis Ende durchzählen...
07.06.2005 15:15:08
Stefan
Da muss ich bst recht geben. Mit dem blosen Speichern erreicht man gar nichts.
AW: Von Zeile bis Ende durchzählen...
07.06.2005 15:17:50
Hajo_Zi
Hallo Stefan,
ich habe vertraut da das stimmt was in den Beiträgen steht. Ich hatte es nicht getestet. Jetzt habe ich es getestet und der Bereich wurde immer korrekt erkannt ohne speichern.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.
AW: Von Zeile bis Ende durchzählen...
07.06.2005 15:48:48
Stefan
Sagen wir mal so : Der Debugger gibt deutlich wieder, dass ich mit (xlCellTypeLastCell) nicht arbeiten sollte, da mir eben diese lastcell-Anweisung geradezu kunterbunte Werte heraussucht. Das stimmt gar nicht.
Was ich noch nicht so richtig verstanden habe, bst. Wie stelle ich denn nun genau mit der "Nicht-Range" Methode meine Prozedur auf. Was ich bisher verstanden habe :
Ich benötige eine Anweisung der ich mitteilen kann, wo ich anfange mit zählen (Zeile)
Dim lastRow As Long
lastRow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1
'Okay, da UsedRange und xlcelllast aber nicht funzt, was kann ich denn alternativ nehmen ?
Anzeige
AW: Von Zeile bis Ende durchzählen...
07.06.2005 16:25:41
bst
Hi again,
prinzipiell tun alle ;-)
Wohin kommst Du wenn Du die Tastenkombi STRG-ENDE drückst ?
Dieses ist für Excel die letzte Zelle.
Versuch's halt mal so. https://www.herber.de/bbs/user/23700.xls
HTH, Bernd
AW: Von Zeile bis Ende durchzählen...
07.06.2005 16:44:03
Stefan
Standardmäßig komme ich in den 2 problematischen Sheets immer auf die Zeile 84. Zumindest bei Tastenkombination String+Ende. Bin gerade dabei, deine Version zu testen... 10 min....
AW: Von Zeile bis Ende durchzählen... -Bernd ?
07.06.2005 16:35:07
Stefan
Hey Bernd, hab aus deiner

Function ne 

Sub gemacht. Die durchläuft er aber nicht. Komilieren ist okay. Was könnte falsch sein ?

Sub GetLastRowWS()
Dim ws As Worksheet
Dim spalte As Integer
Dim GetLastRowWS As Long
With ws
GetLastRowWS = ActiveSheet.Rows.Count
If ActiveSheet.Cells(GetLastRowWS, spalte).Value = "" Then GetLastRowWS = ActiveSheet.Cells(GetLastRowWS, spalte).End(xlUp).Row
End With
End Sub

Anzeige
Danke Bernd, kleines Probelm noch !
07.06.2005 16:58:55
Stefan
Danke Bernd, wunderbar.
Wunderbar, GetLastRow funktioniert tatsächlich. Ich benötige das jetzt nur noch angepasst. Im Prinzip soll das Skript meine 4 Sheets durchlaufen und mit der Funktion GetLastRow mir die Untergrenze für die Bildung der Ranges liefern. Leider bin ich mir nicht genau sicher, wie ich den Wert von GetLastRow an die

Sub übergebe, die die Ranges bildet. Mein Vorschlag wäre folgender: Leider sagt er mir, dass ich so nicht übergeben darf... vielleicht eine prompte Hilfestellung parat, danke !
'Funktion : GetLastRow

Function GetLastRow(Optional spalte As Integer = 4) As Long
GetLastRow = Rows.Count
If Cells(GetLastRow, spalte).Value = "" Then GetLastRow = Cells(GetLastRow, spalte).End(xlUp).Row
End Function

'

Sub Daten Ranges bilden

Sub DatenRangesBilden()
Dim i As Long, lastR As Long
Dim blatt As Worksheet
' Range für sheet1, sheet2 und sheet3 bilden
For Each blatt In ActiveWorkbook.Sheets
i = 1
ActiveWorkbook.Names.Add Name:=blatt.Name, RefersTo:= _
"=" & blatt.Name & "!" & _
"$28:$" & GetLastRow(i)
Next

Anzeige
AW: Danke Bernd, kleines Probelm noch !
07.06.2005 18:36:20
bst
Hallo,
GetLastRow funktioniert nur im aktuellen Tabellenblatt.
Du könntest dieses natürlich wechseln, dies ist aber IMHO ganz und gar nicht schön ...
Nimm die andere Funktion (siehe oben)
Die bekommt als 1. Parameter ein WorkSheet, also z.B. so (ungetestet!):
For Each blatt In ActiveWorkbook.Sheets
i = 1
ActiveWorkbook.Names.Add Name:=blatt.Name, RefersTo:= _
"=" & blatt.Name & "!" & _
"$28:$" & GetLastRow(blatt, i)
Next
HTH, Bernd

Function GetLastRowWS(ws As Worksheet, Optional spalte As Integer = 1) As Long
With ws
GetLastRowWS = .Rows.Count
If .Cells(GetLastRowWS, spalte).Value = "" Then GetLastRowWS = .Cells(GetLastRowWS, spalte).End(xlUp).Row
End With
End Function

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige