2011-08-01 6 views
19

¿Cómo puedo encontrar el número de columnas usadas en una hoja de Excel usando VBA?Encontrar el número de columnas no en blanco en una hoja de Excel usando VBA

Dim lastRow As Long 
lastRow = Sheet1.Range("A" & Rows.Count).End(xlUp).Row 
MsgBox lastRow 

Usando el VBA anterior, puedo encontrar el número de filas. Pero, ¿cómo puedo encontrar el número de columnas en mi archivo Excel dado?

+0

@niko No es claro si desea la cantidad de columnas usadas (título de la pregunta), o la posición de la última columna utilizada (implicado por su 'código row')? – brettdj

+0

@niko, un mejor método para encontrar la parte real de la hoja en vez de las variantes 'xlUp', o kludgy' UsedRange' es 'Find'. ver http://stackoverflow.com/questions/8283797/select-range-in-excel-vba/8283941#8283941 – brettdj

Respuesta

34

Su código de ejemplo se obtiene el número de fila de la última celda no esté en blanco en la columna actual, y se puede reescribir de la siguiente manera:

Dim lastRow As Long 
lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row 
MsgBox lastRow 

Es entonces fácil ver que el código equivalente para obtener la número de columna de la última celda no esté en blanco en la fila actual es:

Dim lastColumn As Long 
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column 
MsgBox lastColumn 

Esto también puede ser de utilidad para usted:

With Sheet1.UsedRange 
    MsgBox .Rows.Count & " rows and " & .Columns.Count & " columns" 
End With 

, pero tenga en cuenta que si la columna A y/o la fila 1 están en blanco, esto no arrojará el mismo resultado que los otros ejemplos anteriores. Para obtener más información, lea en la propiedad UsedRange.

+0

Hola. Intenté usar el código 'Dim lastRow As Long lastRow = Sheet1.Cells (Rows.Count, 1) .End (xlUp) .Row MsgBox lastRow' pero VBA dice" Tiempo de ejecución error 424: Objeto requerido "en el segundo de esas líneas. Ahora estoy perdido. ¿Qué función requiere exactamente un objeto y qué obtuvo en su lugar? – mzuba

+1

¿De verdad tiene una hoja con el nombre en código 'Sheet1'? Si no, eso es una cosa que causará ese error. –

8

La respuesta de Jean-François Corbett es perfecta. Para ser exhaustivo, me gustaría agregar que con algunos constraints también puede usar UsedRange.Columns.Count o UsedRange.Rows.Count.
El problema es que UsedRange no siempre se actualiza al eliminar filas/columnas (al menos hasta que vuelva a abrir el libro).

+0

Sí, escribí el bit 'UsedRange' como una idea de último momento, solo para hacer que el OP conozca esta propiedad y tal vez provocar algunos experimentos. –

1

Es posible que haya olvidado un sheet1 cada vez en alguna parte antes del columns.count, o contará las columnas activesheet y no las sheet1.

Además, ¿no debería ser xltoleft en lugar de xltoright? (Ok, es muy tarde aquí, pero creo que sé mi derecho desde la izquierda) Lo revisé, debes escribir xltoleft.

lastColumn = Sheet1.Cells(1, sheet1.Columns.Count).End(xlToleft).Column 
0

resultado se muestra en el siguiente código como número columna (8,9 etc.):

Dim lastColumn As Long 
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column 
MsgBox lastColumn 

resultado se muestra en el siguiente código como carta (H, I, etc. .):

Dim lastColumn As Long 
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column 
MsgBox Split(Sheet1.Cells(1, lastColumn).Address, "$")(1) 
Cuestiones relacionadas