2012-07-21 12 views
7

Objetivo:
Una variable debe contener la cantidad de filas de una hoja específica.Cantidad de filas en la hoja

Problema:
¿Qué código de sintaxis en Excel VBA necesito para contar la cantidad de filas de la hoja?

+0

Si se refiere a filas en total, 'Worksheet.Rows.Count' lo hará. Si quieres decir algo más, avísanos. –

Respuesta

14

utilizando el método UsedRange es uno de mis favoritos, pero que tiene que ser tratado con cuidado. Tiene algunos defectos/errores. Es un problema conocido que Excel no hace un seguimiento del rango utilizado muy bien. Cualquier referencia al rango utilizado a través de VBA restablecerá el valor al rango utilizado actualmente. Así que trate de ejecutar este procedimiento sub cuando se está recibiendo el rango utilizado:

Dim lRowCount as Long 

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

Pero tenga en cuenta que esto le dará el recuento utilizado rango, por lo que si usted tiene filas en blanco en la parte superior de su libro (que a menudo la gente hace para dejar espacio para cosas como criterios de filtro, etc.), entonces no se contarán. El método usedrange también puede verse afectado por el formateo.

Si desea que la última fila utilizada, que es lo que creo que quiere, entonces se puede utilizar el método de búsqueda que es más fiable:

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 

Si usted sabe que tiene al menos una celda con datos en ella, entonces se puede simplificar el anterior a:

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

También puede probar:

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

Sin embargo, esto se puede conseguir de errores, si se inicia la eliminación y limpieza de filas.

Una mejor manera de hacer esto es:

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

Esto supone que cada fila tiene los datos en la columna 1.

Cuestiones relacionadas