Duda en la expresión o sintaxis .end(3) o end(xlup)

Para mi amigo Dante Amor, o cualquier otro experto

Me gusta aprender VBA, para el cual me gusta interpretar la lógica del algoritmo, he visto en varias macros sobre todo me inquieta saber lo que quiere decir al final la expresión .End(3).Row o .End(xlUp).Row en esta última se que es la manera de desplazamiento de la posición pero cuando usa el carácter numérico me gustaría saber si es un indice de la misma sintaxis

 detalles como ese poco encuentro su explicación

Sub SumaRangos()
  Dim a As Range, i As Long, f  As Long, t As Long
  Application.ScreenUpdating = False
  For Each a In Range("A5", Range("A" & Rows.Count).End(3)).SpecialCells(xlCellTypeConstants).Areas
......
With Sheets(OrgWsN)
        For I = OrgFr To .Cells(Rows.Count, 1).End(3).Row
......
Dim ult As Integer
ult = Cells(Rows.Count, 1).End(xlUp).Row

1 Respuesta

Respuesta
3

.End(3).Row o .End(xlUp).Row

End(3) o End(xlup) es lo mismo, el 3 es una clave interna de VBA que sustituye a xlup. 

En VBA además de los parámetros en ocasiones también puedes utilizar números.

Por ejemplo:

Range("Database").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("Criteria")

También puede ser:

Range("ReportData").AdvancedFilter Action:=1, CriteriaRange:=Range("MatchAB")

Fuente: https://docs.microsoft.com/en-us/office/vba/api/excel.xlfilteraction


Regresando a End(3).row

Realiza lo siguiente para entender un poco más.

- En una hoja nueva escribe "xy" en la celda A10 y presiona enter, el cursor pasa a la celda A11.

- Ahora presiona la tecla Fin y después la tecla Flecha hacia abajo. El cursor se va hasta la última fila de la hoja.

- Ahora presiona la tecla Fin y después la tecla Flecha hacia arriba. El cursor regresa a la celda A10.

- Ahora ejecuta esta macro:

Sub test1()
  Range("A" & Rows.Count).End(3).Select
End Sub

La macro realizó lo mismo, fue hasta el total de filas de la columna A, luego "end" tecla inicio y (3) flecha hacia arriba y selecciona la celda.

- Ahora ejecuta esta macro:

Sub test2()
  MsgBox Range("A" & Rows.Count).End(3).Row
End Sub

La macro hace lo mismo, solamente que ahora te muestra en un mensaje el número de fila. Te regresa un 10.


Espero que esto te ayude a entender un poco más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas