Macro para hacer una referencia dinámica

Tengo la siguiente hoja de excel (lo subo en dos imágenes porque no me cabía en un solo pantallazo).

Y tengo el siguiente código

Sub ReferenciaIntercos()
Do While ActiveCell <> "Importe"
Range("AA19").Activate
Do While ActiveCell <> "Importe"
If ActiveCell.Offset(0, 1) <> "Importe" Then
End If
ActiveCell.Offset(0, 1).Activate
Loop
ActiveCell.Offset(3, 25).Activate
Call CeldaInterco
Loop

End Sub

Sub CeldaInterco()

Dim celda As Range
Set celda = ActiveCell

Range("Y22") = celda.Value
Range("Y22").Select
ActiveCell.Value = (ActiveCell.Value / 12)
End Sub

Este código lo que hace es ir a buscar donde dice importe, y una vez lo consigue tiene que bajar 3 filas, y moverse 25 columnas porque quiero obtener el valor que esta en la columna resultado y luego lo va a pegar en la fila Y22, y lo divide entre 12, hasta aquí todo bien.

El problema es que quiero hacer que el loop vuelva a comenzar porque ha de hacerlo hasta la ultima fila, pero claro ahora el offset no seria (3,25) si no que seria (4,25) y así sucesivamente hasta que no se tengan datos y que salga del loop.

Como puedo hacer esto? Gracias

1 respuesta

Respuesta
2

Según tu imagen tienes en DN19 la palabra "Importe"

Luego en la celda EM22 tienes el valor 20, ese valor 20 lo quieres en la celda Y22, ¿correcto?

Ahora en la celda EM23 tienes el valor 20, ¿ese 20 lo quieres en la celda Y23?

En la celda EM24 tienes el valor 788, ¿ese 78 en dónde lo quieres?

A ese loop te refieres? Que empiece en EM22, ¿EM23 EM24 hasta que ya no haya valores?

¿Cuántas veces se debe buscar la palabra "Importe" solamente una vez?

E spero tus comentarios en ese orden

Hola Dante,

1. El valor que quiero en Y22 es el que esta en EN22 (que no se ve la imagen)

2. El valor que tengo en EN23 lo quiero en la celda Y23.

3. Cuando hablo del loop me refiero que tiene que comenzar en EN23 y debe acabar cuando en la columna EN ya no tenga más valores (puede acabar en EN30, como puede acabar en EN40) y siempre lo tiene que copiar y dividir entre 12 en la columna Y que se llama Referencia (entonces seria EN22 en Y22, EN23 en Y23... y así sucesivamente.

Gracias,

Hola Dante,

Me equivoque

1. Efectivamente es el valor que esta en EM22.

2. Es el valor que esta en EM23

Y el Loop tiene que comenzar en EM22 y seguir hasta que no encuentre nada.

La palabra importe solo se debe buscar una vez, porque luego hago el offset hasta Resultado (EM22) y ahí es cuando comienzo a copiar. El offset lo hago porque al ser el rango dinámico "Resultado" puede estar en EM, pero el próximo mes puede que comience en EO u otra

Si en la fila 19 solamente tienes una vez la palabra "Importe", entonces prueba con lo siguiente, ya no son necesarias 2 macros:

Sub ReferenciaIntercos()
'Por.Dante Amor
    Set b = Rows(19).Find("Importe", lookat:=xlWhole)
    If b Is Nothing Then
        MsgBox "La palabra importe no existe"
        Exit Sub
    End If
    '
    col = b.Column + 25
    i = 22
    Do While Cells(i, col) <> ""
        Cells(i, "Y") = Cells(i, col) / 12
        i = i + 1
    Loop
    MsgBox "Fin"
End Sub

Otra duda que tengo, en la columna EM , según tu ejemplo, después de la celda EM24 tienes algo? algún total? o ya no hay nada?

Si ya no hay nada entonces prueba con esto:

Sub ReferenciaIntercos2()
'Por.Dante Amor
    Set b = Rows(19).Find("Importe", lookat:=xlWhole)
    If b Is Nothing Then
        MsgBox "La palabra importe no existe"
        Exit Sub
    End If
    '
    col = b.Column + 25
    With Range("Y22:Y" & Cells(Rows.Count, col).End(xlUp).Row)
        .FormulaR1C1 = "=RC" & col & "/12"
        .Value = .Value
    End With
    MsgBox "Fin"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas