Condicional para excel con VB

A B C D
PAG 30,00 -5,00
EOK 117,00 -3,00
PAG 500,00 37,00
EOK 80,00 20,00
SVL 400,00 0,00
EL 50,00 0,00
PAG 324,00 0,00
EOK 89,66 0,00
If Range("A1").Value = "EOK" Or Range("A1").Value = "PAG" And Range("C1").Value < 0 Then
Range("D1").Value = "De menos"
    Else
If Range("A1").Value = "EOK" Or Range("A1").Value = "PAG" And Range("C1").Value > 0 Then
Range("D1").Value = "De más"
    Else
If Range("A1").Value = "EOK" Or Range("A1").Value = "PAG" And Range("C1").Value = 0 Then
Range("D1").Value = "Enviado"
     Else        
If Range("A1").Value = "ELM" Or Range("A1").Value = "SVL" Then
Range("C1").Value = Range("B1").Value
Range("D1").Value = "Sin Enviar"
End If
End If
End If
End If
End Sub
Se trata de un condicional que debe escribir un texto en la columna DE, celda por celda; el número de filas es indeterminado. Son cuatro casos:
1º Caso
Si en la celda A1 aparece el texto "EOK" o aparece el texto "PAG" y el valor de la celda C es menor que cero entonces debe poner el texto "De menos" en la celda D.
2º Caso
Si en la celda A1 aparece el texto "EOK" o aparece el texto "PAG" y el valor de la celda C es mayor que cero entonces debe poner el texto "De más" en la celda D.
3º Caso
Si en la celda A1 aparece el texto "EOK" o aparece el texto "PAG" y el valor de la celda C es igual que cero entonces debe poner el texto "Enviado" en la celda D.
4º Caso
Si en la celda A1 aparece el texto "ELM" o "SVL" entonces ocurren dos cosas:
1ª En la celda C aparece el mismo valor que en la celda B, simplemente lo copia.
2ª En la celda D debe poner el texto "Sin Enviar"
Yo lo he hecho tal y como lo pongo arriba y no me termina de funcionar del todo bien, parece que no reconoce la partícula "or", porque a veces donde debe poner "De más" pone "De menos", si reconoce el texto "EOK" no reconoce el texto "PAG", etc.
Además, he escrito este mismo código para diez líneas lo cual es una salvajada porque no se qué número de líneas me van a aparecer, pueden ser seis como pueden ser once. Creo que debería de empezar de abajo hacia arriba.
Me gustaría:
Saber que es lo que estoy poniendo mal y
Saber como debo hacer para que con un solo código me sirva para un número indefinido de líneas.
Muchísimas gracias de antemano. Espero haber sido claro en mi exposición del problema.

1 respuesta

Respuesta
1
Ignacio Box
La Macro debería quedar así
Sub Condicional()
fin = Sheets("hoja1").Range("a65536").end(x1up).row + 1
for x = 1 To fin
If Cells(x, 1).Value = "EOK" Or Cells(x, 1).Value = "PAG" Then
sig = Cells(x, 3)
Select Case sig
Case "0"
Cells(x, 4).Value = "enviado"
Case Is > 0
Cells(x, 4).Value = "De mas"
Case Is < 0
Cells(x, 4).Value = "De menos"
End Select
End If
If Cells(x, 1).Value = "ELM" Or Cells(x, 1).Value = "SVL" Then
If Cells(x, 2).Value = Cells(x, 3).Value Then
Cells(x, 4).Value = "Sin enviar"
End If
End If
Next
End Sub
NO entendí muy bien el caso 4 pero si algo esta fallando no dudes en consultar.
Sino Cierra la pregunta y califícame

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas