Buscar un valor y si existe cortar una fila y pegarlo en otra hoja

Quiero hacer lo siguiente (es algo complejo):

Realizar una macro que busque el valor de una celda(un número) en otra hoja y si existe un determinado valor, copie los datos de otra columna en la hoja original y luego corte y pegue la fila una tercera hoja (en la siguiente fila en blanco).

Aquí detallo los pasos:

Hoja 1 / Celda A1=1290 / B1=Pendiente

Busca el valor "1290" en la hoja 2, y si existe, copia el contenido de la columna(B2) de la hoja 2 y la pega(sobreeescribe) en la columna b2 de la hoja 1.

Una vez hecho esto, corta la fila de la hoja 1 y la pega en el siguiente fila en blanco de la hoja 3.

**************************************

1 Respuesta

Respuesta
2

En qué columna se va a a buscar el valor (en el ejemplo el valor 1290).

Hola, los valores (1290,1291,1292...) están alojados en las celdas B1,B2,B3,B4,B5,B6 etc... en la hoja 1.

La macro irá buscando consecutivamente el valor de cada celda en la hoja2 que también están puesta de la misma manera, B1,B2,B3,etc...

Si el valor B1 de la hoja 1, existe en la hoja 2(puede estar en b1,b100, etc...) copiara el contenido de la segunda columna de la hoja 2(C1,C2,...) en la columna C correspondiente de la hoja 1.

Tengo un listado de incidencias en curso (que están en la hoja 1). Cada día me llega un listado en formato csv con las incidencias cerradas.

La macro comprobaría una a una si las incidencias de la hoja 1 existen en la hoja 2 (que querrá decir que se han cerrado) y entonces sustituiría la columna "Estado" por el estado actual de la incidencia (anulada o cerrada).

Te anexo la macro.

Instrucciones para ejecutar macro
1. Abre tu hoja de excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. En el menú elige Insertar / Módulo
4. En el panel del lado derecho copia la macro
5. Para ejecutarla presiona F5

Sub buscaycorta()
'busca un valor y copia
'Por.Dam
Set uno = Sheets("Hoja1")
Set dos = Sheets("Hoja2")
For i = 1 To uno.Range("B" & Rows.Count).End(xlUp).Row
    res = Application.VLookup(uno.Cells(i, "B"), _
    dos.Range("B:C"), 2, False)
    If IsError(res) = True Then
        ' No lo encontró
    Else
        Cells(i, "C") = res
    End If
Next
End Sub

También puedes obtener el mismo resultado utilizado la siguiente fórmula:

=BUSCARV(B1,Hoja2!B:C,2,0)

En la Hoja1, cópiala en la celda C1 y después la copias para todas las filas en donde tengas datos en B

Prueba las dos formas.

Saludos. Dam
Si es lo que necesitas.

Funciona perfecto (con los datos del ejemplo).

Tengo una duda para adaptar el código a mi a mi hoja real.

Tendría que empezar a buscar a partir de la celda B7(B8,B9,...) de la hoja 1 y a partir de la A2 (A3,A4,A5...)en la hoja 2.

Si lo encuentra, tendría que copiar el contenido de la columna G de la hoja 2, en la columna H de la hoja 1 .

Perdón si he tardado en contestar.He estado unos días sin conexión.

He hecho esto:

<pre class="prettyprint" style="width: 608px; height: 267px;">Sub mover_cerradas()
'busca un valor y copia'
Set uno = Sheets("GILAN")
Set dos = Sheets("VACIADO_GILAN")
For i = 1 To uno.Range("B" & Rows.Count).End(xlUp).Row
res = Application.VLookup(uno.Cells(i, "B"), _
dos.Range("A:G"), 2, False)
If IsError(res) = True Then
'No lo encontro
Else
Cells(i, "H") = res
End If
Next
End Sub</pre>

Si la macro funciona perfecto, por favor, podrías finalizar la pregunta.

Crea una nueva con los datos reales que necesitas, para que modifique la macro.

Saludos. Dam

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas