¿Cómo puedo evaluar una condición, y a partir de esta activar una acción con la siguiente macro?

Hola, por favor a quien me pueda ayudar:

En la Hoja 1 tengo esta información:

Factura Estado
1021 P

1022 L

1023 P

1024 L

Necesito que una macro me recorra el listado de la hoja 1, y evalúe el campo Estado, y aquellas que cumplan la condición "P", sean llevadas a la hoja 2 al campo Factura, de esta manera

Factura

1021

1023

La macro que recorre el listado ya la tengo, pero necesito una función que lea si el estado es P o L, si es P que copie la factura y la pegue en la hoja 2, si es L que no haga nada y siga con la siguiente fila. Este es un ejemplo de la macro que estoy utilizando:

Public Sub FUNCIÓN()
Sheets("Hoja1").Select
Dim filas As Integer
filas = 2
'Aquí comienza a recorrer el listado
While LONGITUD_CELDA("A" + CONVERTIR_NUMERO_ENTERO_TEXTO(filas)) <> 0
'Aquí debo evaluar la condición y copiar si es "P"
FUNCIÓN POR DEFINIR
'Aquí selecciona la celda en la hoja2 y pega el resultado
Sheets("Hoja2").Select
SELECCIONAR_CELDA "A" + CONVERTIR_NUMERO_ENTERO_TEXTO(filas), "A" + CONVERTIR_NUMERO_ENTERO_TEXTO(filas)
ActiveSheet.Paste
'Aquí repite el procedimiento en la siguiente fila
filas = filas + 1
Wend
End Sub

En el texto FUNCIÓN POR DEFINIR, es donde iría la función que les pido.

Muchas gracias por la ayuda que me puedan prestar.

Respuesta
1

Te mando mi solución y sigue mi ejemplo:

-En la hoja1 tenemos las columnas A y B con los campos Factura y Estado desde la fila 1 hacia abajo, siendo la fila 1 el encabezado. En la hoja2 tenemos escrito el encabezado Factura en la celda A1. Ejecuta esta macro y todo listo!

Sub facturas()
range("a2").select
do while activecell.value <>""
if activecell.offset(0,1).value ="p" then
activecell.copy destination:=sheets("hoja2").range("a65000").end(xlup).offset(1,0)
end if
activecell.offset(1,0).select
loop
end sub

Recuerda finalizar y puntuar la consulta

Hola, me funcionó super bien, muchas gracias

Antes de da finalizar y puntuar a la pregunta, me gustaría que me ayudaras, utilizando la misma macro con la siguiente modificación.

En la Hoja1 tengo un listado específico de facturas del siguiente estilo:

Factura Clase

1022 Ingresos

1024 Devoluciones

1025 Ingresos

1027 Devoluciones

En la Hoja2 tengo un listado más grande de facturas del siguiente estilo:

Factura Clase Estado

1021 Ingresos L

1022 Ingresos P

1022 Devoluciones P

1023 Devoluciones P

1024 Ingresos L

1024 Devoluciones P

1025 Ingresos P

1026 Devoluciones L

1027 Ingresos P

1027 Devoluciones P

En ésta ocasión, lo que debo hacer es recorrer el listado de la hoja1, buscar por factura y por clase en la hoja 2, y solo si la búsqueda coincide por los dos criterios, reemplazar el Estado por la letra "L".

Por ejemplo, al empezar a recorrer la hoja1 el primer dato que evaluaría sería la Factura 1022 Clase Ingresos, y buscaría en la hoja2 esta factura y clase, misma que se encuentra ubicada en la posición 2 de la tabla. El procedimiento debe evaluar siempre los dos atributos tanto Factura cómo Clase, si notas para la misma factura puede encontrarse una clase "Devoluciones" también y la idea es que me reemplace la Clase "Ingresos", para éste ejemplo puntal.

Cómo te dije anteriormente, me gustaría que se modificará la macro que me enseñaste anteriormente, pues es bastante eficiente.

Muchas gracias por tu ayuda!!

Te mando la solución a ese caso. La tabla de la hoja1 ocupa el rango A1:B5 y la tabla de la hoja2 ocupa el rango A1:C11.

Ejecuta esta macro y todo listo!

Sub facturas()
Sheets("hoja1").Select
Range("a2").Select
Do While ActiveCell.Value <> ""
valor = ActiveCell
Set busca = Sheets("hoja2").Range("a2:a100").Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ubica = busca.Address
Do
If busca.Offset(0, 1).Value = ActiveCell.Offset(0, 1).Value Then
busca.Offset(0, 2).Value = "L"
End If
Set busca = Sheets("hoja2").Range("a2:a100").FindNext(busca)
Loop While Not busca Is Nothing And busca.Address <> ubica
End If
ActiveCell.Offset(1, 0).Select
Loop
Sheets("hoja2").Select
End Sub

recuerda finalizar y puntuar la consulta

Hola, excelente, eso era lo que necesitaba, que pena pero se me olvido indicarte que en la hoja 1, la tabla tiene una columna mas:

Validación Factura Clase
Verdadero 1022 Ingresos
Falso 1024 Devoluciones
Verdadero 1025 Ingresos
Falso 1027 Devoluciones

La macro únicamente debe buscar en la hoja2 aquellas facturas que tengan el parámetro verdadero, cómo quedaría la macro que me enviaste con éste ajuste.

Muchísimas gracias!!

Entonces la macro quedaría así con las ubicaciones que comenté en mi anterior post:

Sub facturas()
Sheets("hoja1").Select
Range("b2").Select
Do While ActiveCell.Value <> ""
valor = ActiveCell
If ActiveCell.Offset(0, -1).Value = "Verdadero" Then
Set busca = Sheets("hoja2").Range("a2:a100").Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ubica = busca.Address
Do
If busca.Offset(0, 1).Value = ActiveCell.Offset(0, 1).Value Then
busca.Offset(0, 2).Value = "L"
End If
Set busca = Sheets("hoja2").Range("a2:a100").FindNext(busca)
Loop While Not busca Is Nothing And busca.Address <> ubica
End If
End If
ActiveCell.Offset(1, 0).Select
Loop
Sheets("hoja2").Select
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas