Duda sobre uso de rangos con macros excel vba

Dante buenos días.

Pudieras explicar estos casos de uso de estas líneas, noto algunas variaciones.

1. Observo 2 cells.

 H1. Range(h1. Cells(b.Row, "D"), h1. Cells(b.Row, uc))

2. Para recorrer las filas uso esto: h1.Range("A" & Rows. Count).End(xlUp). Row

... ¿Y esto?

 H1. Range(Rows.count, "A").End(xlUp). Row

3. Para recorrer columnas Cells(1, Columns. Count).End(xlToLeft). Column

...

 Cells(Columns. Count, 1).End(xlToLeft). Column

haber si me das un par de instrucciones.

1 Respuesta

Respuesta
1

H o la: Te anexo mis comentarios

1. Observo 2 cells.

 H1. Range(h1. Cells(b.Row, "D"), h1. Cells(b. Row, uc))

La propiedad Range admite la celda inicial y la celda final de un rango, por ejemplo si quieres abarcar desde la celda A1 hasta la celda D10, lo puedes hacer así:

Range("A1:D10")

También puedes hacerlo así:

Range(cells(1, "A"), cells(10, "D"))

Con la segunda opción es más fácil, reemplazar los datos por variables, siguiendo con el ejemplo:

fini = 1
cini = "A"
ffin = 10
cfin = "D"
range(cells(fini, cini), cells(ffin, cfin))

Solamente con el rango:

fini = 1
cini = "A"
ffin = 10
cfin = "D"
Range(cini & fini & ":" & cfin & ffin)

En el ejemplo anterior en la columna final tengo una letra "D", pero si en lugar de la letra "D" tuviera el número de columna 4, primero tendría que convertir el 4 en letra, para evitar eso, utilizo range(cells(fila, columna), cells(fila, columna))


2. Para recorrer las filas uso esto: h1.Range("A" & Rows. Count).End(xlUp). Row

... ¿Y esto?

 H1. Range(Rows.count, "A").End(xlUp). Row

Eso debe ser un error, no sé de dónde lo obtuviste, pero lo correcto es

h1.Range("A" & Rows. Count).End(xlUp). Row

Y no es para recorrer filas, es para encontrar la ultima celda con datos, de determinada columna, de abajo hacia arriba, por eso dice "XlUp"

3. Para recorrer columnas Cells(1, Columns. Count).End(xlToLeft). Column

...

 Cells(Columns. Count, 1).End(xlToLeft). Column

Tampoco es para recorrer columnas, es para encontrar la última celda con datos, de determinada fila, de derecha a izquierda, por eso dice "XlToLeft".

Y lo correcto es:

cells(fila, columna).end(xltoleft).column

Si quieres obtener la última celda con datos de la fila 1, entonces es:

cells(1, columns.count).end(xltoleft).column


sal u dos

H o l a, 

Dante gracias por responder te anexo el código donde está mis inquietudes.

aquí va, me equivoqué en poner Range en vez de Cells

u2 = Cells(Rows.Count, "A").End(xlUp).Row + 1
Sub CopiarColumnas()
'Por.Dante Amor
    Columns("A").ClearContents
    u2 = 1
    For i = Columns("B").Column To Columns("UG").Column
        u1 = Cells(Rows.Count, i).End(xlUp).Row
        Range(Cells(1, i), Cells(u1, i)).Copy Range("A" & u2)
        u2 = Cells(Rows.Count, "A").End(xlUp).Row + 1
    Next
    MsgBox "fin"
End Sub

lo de esto no logré encontrar en tus respuestas, pero es parte de tu código que si funciona

Cells(Columns. Count, 1).End(xlToLeft). Column

Dante con esto obtengo la ultima celda con dato 

u2 = Range("A"  & Rows.Count).End(xlUp).Row

 y con esto ?

u2 = Cells(Rows.Count, "A").End(xlUp).Row

Hacen lo mismo. Obtienen la última fila con dato.

Pero con Range tienes que poner la letra de la columna.

Con cells puedes poner la letra de la columna o el número de la columna:

u2 = Cells(Rows.Count, "D").End(xlUp).Row

o

u2 = Cells(Rows.Count, 4).End(xlUp).Row

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas