excel - valor - seleccionar rango variable vba
Excel VBA- Encontrar la Ășltima columna con datos (5)
Encontré este método para encontrar la última fila de datos que contiene una hoja:
ws.Range("A65536").End(xlUp).row
¿Hay algún método similar para encontrar la última columna que contenga datos en una hoja?
Gracias.
Aquí hay algo que podría ser útil. Seleccionando la columna completa en base a una fila que contiene datos, en este caso estoy usando la 5ª fila:
Dim lColumn As Long
lColumn = ActiveSheet.Cells(5, Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
Creo que podemos modificar el código de Reafidy respuesta de Reafidy anterior para obtener la última columna utilizada, incluso si las columnas iniciales están en blanco o no.
Entonces este lColumn = ws.UsedRange.Columns.Count
modificado para
esta lColumn = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1
dará resultados confiables siempre
?Sheet1.UsedRange.Column + Sheet1.UsedRange.Columns.Count - 1
Above line Rinde 9
en la ventana inmediata.
Intente usar el código después de activar la hoja:
Dim J as integer
J = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Si usa Cells.SpecialCells(xlCellTypeLastCell).Row
solamente, el problema será que la información de xlCellTypeLastCell
no se actualizará a menos que se haga una acción de "Guardar archivo". Pero el uso de UsedRange
siempre actualizará la información en tiempo real.
Muchas formas de hacer esto. El más confiable es encontrar.
Dim rLastCell As Range
Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
MsgBox ("The last used column is: " & rLastCell.Column)
Si desea encontrar la última columna utilizada en una fila en particular, puede usar:
Dim lColumn As Long
lColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column
Usando rango usado (menos confiable):
Dim lColumn As Long
lColumn = ws.UsedRange.Columns.Count
Usar el rango utilizado no funcionará si no tiene datos en la columna A. Consulte aquí para otro problema con el rango utilizado:
Consulte Here para restablecer el rango utilizado.
Sé que esto es viejo, pero lo he probado de muchas maneras y aún no me ha fallado, a menos que alguien me diga lo contrario.
Numero de fila
Row = ws.Cells.Find(What:="*", After:=[A1] , SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Carta de columna
ColumnLetter = Split(ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Cells.Address(1, 0), "$")(0)
Número de columna
ColumnNumber = ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column