2012-07-21 16 views
7

Ziel:
Eine Variable sollte die Anzahl der Zeilen eines bestimmten Blattes enthalten.Anzahl der Zeilen im Blatt

Problem:
Welche Syntax Code in Excel VBA muss ich Menge der Zeilen aus Blatt zählen?

+0

Wenn Sie insgesamt Zeilen bedeuten, 'Worksheet.Rows.Count' es tun wird. Wenn du etwas anderes meinst, lass es uns wissen. –

Antwort

14

Mit der Usedrange Methode ist einer meiner Favoriten hat, aber es muss mit behandelt werden Pflege. Es hat ein paar Mängel/Fehler. Es ist ein bekanntes Problem, dass Excel den verwendeten Bereich nicht sehr gut verfolgt. Jede Bezugnahme auf den verwendeten Bereich über VBA setzt den Wert auf den aktuell verwendeten Bereich zurück. Also versuchen Ausführen dieses Sub-Prozedur, wenn Sie den verwendeten Bereich erhalten:

Dim lRowCount as Long 

Application.ActiveSheet.UsedRange 
lRowCount = Worksheets("MySheet").UsedRange.Rows.Count 

aber bewusst sein, dies wird Ihnen die verwendet Bereich zählen, so dass, wenn Sie an der Spitze der Arbeitsmappe leeren Zeilen (die oft Leute machen Platz für Dinge wie Filterkriterien etc), dann werden sie nicht gezählt. Die usedrange-Methode kann auch durch Formatierung beeinflusst werden.

Wenn Sie die letzte Zeile verwendet wird, das ist, was ich glaube, Sie wollen, dann können Sie die Methode find verwenden, die zuverlässiger ist:

Dim rLastCell As Range 
Dim lLastRow As Long 

Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ 
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False) 

If Not rLastCell Is Nothing Then lLastRow = rLastCell.Row 

Wenn Sie wissen, dass Sie atleast eine Zelle mit Daten in ihm, dann können Sie die oben vereinfachen:

Dim lLastRow As Long 

lLastRow = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ 
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row 

See here regarding used range I spoke about above

5

Sie können auch versuchen:

i = Sheets("SheetName").UsedRange.Rows.Count 

Dies ist jedoch ein wenig Buggy erhalten, wenn Sie löschen und Löschen Reihen starten.

Ein besserer Weg, dies zu tun ist:

i = Cells(Sheets("SheetName").Rows.Count, 1).End(xlup).Row 

Dies setzt voraus, dass jede Zeile Daten in Spalte 1