sacar para ocupadas numero las filtros filas cómo contar con como columnas codigo celdas .net vb.net excel vba excel-interop

.net - para - ¿Cómo contar el número de filas en Excel con datos?



contar si excel (10)

Ambos funcionarían también, permitiendo que Excel defina la última vez que ve datos

numofrows = destsheet.UsedRange.SpecialCells(xlLastCell).row numofrows = destsheet.Cells.SpecialCells(xlLastCell).row

la columna A tiene datos como este (es decir, celdas en blanco frecuentes):

HEADING <-- this is A1 kfdsl fdjgnm fdkj gdfkj 4353 fdjk <-- this is A9

Me gustaría poder obtener la referencia de celda de la última celda que tiene datos. Entonces, en el ejemplo anterior, quiero regresar: A9

Lo he intentado pero se detiene en la primera celda en blanco (es decir, devuelve A4 )

numofrows = destsheet.Range("A2").End(xlDown).Row - 1


Comparé todas las posibilidades con una hoja de prueba larga:

0,140625 segundos para

lastrow = calcws.Cells.Find("*", [A1], , , xlByColumns, xlPrevious).row

0 segundos para

iLastRow = calcws.Cells(rows.count, "a").End(xlUp).row

y

numofrows = calcws.Cells.SpecialCells(xlLastCell).row

0,0078125 segundos para

lastrow = calcws.UsedRange.rows.count Do While 1 If calcws.Cells(lastrow, 1).Value = "" Then lastrow = lastrow - 1 Else Exit Do End If Loop

Creo que los favoritos son obvios ...


Encontré este enfoque en otro sitio. Funciona con los nuevos tamaños más grandes de Excel y no requiere que codifique el número máximo de filas y columnas.

iLastRow = Cells(Rows.Count, "a").End(xlUp).Row iLastCol = Cells(i, Columns.Count).End(xlToLeft).Column

Gracias a mudraker en Melborne, Australia


Esto funcionará, independientemente de la versión de Excel (2003, 2007, 2010). El primero tiene 65536 filas en una hoja, mientras que las dos últimas tienen un millón de filas más o menos. Sheet1.Rows.Count devuelve este número dependiendo de la versión.

numofrows = Sheet1.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp).Row

o el equivalente pero más corto

numofrows = Sheet1.Cells(Sheet1.Rows.Count,1).End(xlUp)

Esto busca desde la parte inferior de la columna A la primera celda no vacía y obtiene su número de fila.

Esto también funciona si tiene datos que van más abajo en otras columnas. Entonces, por ejemplo, si toma sus datos de ejemplo y también escribe algo en la celda FY4763, lo anterior aún devolverá correctamente 9 (no 4763, que cualquier método que involucre la propiedad UsedRange retornaría incorrectamente).

Tenga en cuenta que realmente, si desea la referencia de la celda, solo debe usar lo siguiente. No es necesario que primero obtenga el número de fila y luego construya la referencia de celda.

Set rngLastCell = Sheet1.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp)

Tenga en cuenta que este método falla en ciertos casos extremos:

  • La última fila contiene datos
  • La última fila (s) está oculta o filtrada

¡Así que ten cuidado si estás planeando usar la fila 1,048,576 para estas cosas!


Me gusta de esta manera:

ActiveSheet.UsedRange.Rows.Count

Lo mismo se puede hacer con el recuento de columnas. Para mí, siempre trabajo. Pero, si tiene datos en otras columnas, el código anterior también los considerará, porque el código busca todo el rango de celdas de la hoja.


Para mayor claridad, quiero agregar un ejemplo claro y ejecutar

openFileDialog1.FileName = "Select File"; openFileDialog1.DefaultExt = ".xls"; openFileDialog1.Filter = "Excel documents (.xls)|*.xls"; DialogResult result = openFileDialog1.ShowDialog(); if (result==DialogResult.OK) { string filename = openFileDialog1.FileName; Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlApp = new Excel.Application(); xlApp.Visible = false; xlApp.DisplayAlerts = false; xlWorkBook = xlApp.Workbooks.Open(filename, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "/t", false, false, 0, true, 1, 0); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); var numRows = xlWorkSheet.Range["A1"].Offset[xlWorkSheet.Rows.Count - 1, 0].End[Excel.XlDirection.xlUp].Row; MessageBox.Show("Number of max row is : "+ numRows.ToString()); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); }


Prefiero usar la propiedad CurrentRegion, que es equivalente a Ctrl- *, que expande el rango actual a su rango continuo más grande con datos. Empiezas con una celda, o rango, que sabes que contendrá datos, luego la expandes. La propiedad UsedRange a veces devuelve grandes áreas, simplemente porque alguien hizo un poco de formateo en la parte inferior de la hoja.

Dim Liste As Worksheet Set Liste = wb.Worksheets("B Leistungen (Liste)") Dim longlastrow As Long longlastrow = Liste.Range(Liste.Cells(4, 1), Liste.Cells(6, 3)).CurrentRegion.Rows.Count


Dim RowNumber As Integer
RowNumber = ActiveSheet.Range("A65536").End(xlUp).Row

En su caso, debería devolver el n. ° 9


La opción más segura es

Lastrow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row Lastcol = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column

No use UsedRange o SpecialCells(xlLastCell) o End(xlUp) . Todos estos métodos pueden dar resultados incorrectos si eliminó algunas filas previamente. Excel todavía cuenta estas células invisibles .

Estos métodos funcionarán nuevamente si elimina sus celdas, guarda el libro, lo cierra y lo vuelve a abrir.


n = ThisWorkbook.Worksheets(1).Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count