Macro recorriendo celdas de dos columnas

Prozac estoy tratando hacer una macro pero no lo podido
hacerla, el tema es el siguiente, tengo las celdas A2 y B2 donde ingreso
datos y que después de hacer un calculo complejo en la hoja de datos el
resultado lo coloca en D2, pero necesito que la macro haga que copie la
celda A4 y B4 en A2 y B2 y el resultado que da en D2 lo pegue en D4,
luego que copie las celdas A5 y B5 en A2 y B2 y el resultado que da en
D2 lo pegue en D5 y así sucesivamente hasta el ultimo dato de las
columnas A y B.

2 respuestas

Respuesta
1

Prueba con estas lineas

Sub calcular()
''Creada por FSerrano en 120219 para octaher en TodoExpertos.com
''Calcula valores para todos los registros encontrados en el grupo
While Range("A" & ActiveCell.Row).Value <> "" And Range("B" & ActiveCell.Row).Value <> ""
Range("a2").Value = Range("A" & ActiveCell.Row).Value
Range("b2").Value = Range("B" & ActiveCell.Row).Value
Range("D" & ActiveCell.Row).Value = Range("d2").Value
ActiveCell.Offset(1, 0). Activate
Wend
End Sub

Lanzala desde la primera fila que contenga datos (según lo que expusiste en tu pregunta, desde la fila 4)

No olvides finalizar y puntuar la pregunta

Excelente , ya me funciono, la ultima pregunta ay no mas, si quiero que haga el recorrido entre dos celdas especificas, es decir entre la celda A4:B4 hasta la celda A1000:B1000 y no hasta la ultima fila que este vacía, como sería, gracias.

Para que haga lo que dices modifica esta linea

While Range("A" & ActiveCell.Row).Value <> "" And Range("B" & ActiveCell.Row).Value <> ""

 por esta otra

While ActiveCell.Row<=1000

 Lanzala desde la celda A4, y.......debería funcionar

Respuesta
1

No estoy seguro de entender completamente tu problema. ¿Hay algún motivo por el cual no puedas hacer en D4, D5 los mismos cálculos que en D2 dependiendo de los valores de A y B respectivamente?

Supongo que en D2 o bien tienes una fórmula o bien una función de usuario que realiza los cálculos. En ambos casos será D2 =F(A2, B2) donde F es la función ya sea tan sencillo como la suma o tan complejo como quieras. ¿No veo el problema de replicarla en D4, D5...?

No creo que te haga falta una macro, salvo si la función es una función de usuario, pero no para ir moviendo valores entre celdas. Acláramelo

Hola, el resultado de la celda D2 es complejo en el sentido que para encontrar el resultado de D2 he utilizado varias filas y columnas, y sé que en otras ocasiones a pesar que es complejo solo es copiar la formula pero para este caso no es posible hacerlo, la ayuda que necesito es la macro que recorra las celdas de la forma que te dije, saludos. Muchas gracias.

Sigo pensando que es mucho mejor una fórmula de usuario que toma dos parámetros y produce el resultado en la celda en la que se incluye. Es lo correcto.

No obstante lo que quieres se puede hacer con el siguiente código.

Sub Recalcula()
Dim i As Integer
Dim maxi As Integer
maxi = Range("a65500").End(xlUp).Row
For i = 4 To maxi
Cells(2, 1).Value = Cells(i, 1).Value
Cells(2, 2).Value = Cells(i, 2).Value
Cells(i, 4).Value = Cells(2, 4).Value
Next i
End Sub

Si el cálculo que se hace para obtener D2 fuera muy farragoso o contiene algo raro, puede llegar a ser mas lento que el código y los resultados obtenidos no válidos. Otro motivo para evitar este modo de hacer las cosas.

En fin.

Excelente, funciona perfecto para lo que necesito, solo una pregunta mas, como hacer para que cuando corra la macro, solo lo haga cuando la celda cumpla una condición de valor por ejemplo igual a 30, y cuando no encuentre ese valor en la celda siga a la siguiente, así hasta la ultima celda, es decir que el calculo lo haga cumpliendo la condición de un valor en sobre las celdas en la columna B, sino cumple la condición que no copie y no pegue los valores, sino que rutina solo lo haga sobre las celdas que cumplen la condición, muchas gracias por tu ayuda.

El procedimiento queda como sigue:

Sub Recalcula()
Dim i As Integer
Dim maxi As Integer
maxi = Range("a65500").End(xlUp).Row
For i = 4 To maxi
If Cells(2, 2).Value = 30 Then
Cells(2, 1).Value = Cells(i, 1).Value
Cells(2, 2).Value = Cells(i, 2).Value
Cells(i, 4).Value = Cells(2, 4).Value
End If
Next i

Ojo, porque estás comparando con 30. Para que funcione bien han de ser valores enteros. Si en la celda hay 30,0001 por ejemplo (aunque veas 30) la condición no se cumple y por tanto se hace la copia.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas