Macro con condición para un rango de filas y columnas

Hola Buenos Días PARAMISOLO, Te envío un saludo donde quiera que te encuentres, Quiero pedirte un favor si me puedes ayudar con Un macro en Excel, que haga lo siguiente:
Columna
                 A B C D E
Fila 1 condicion 1    condicion2   condicion3   Respuesta1   Respuesta 2
       2 condicion1   Condicion2   condicion3   Respuesta1   Respuesta 2
       3 Condicion1   Condicion2   condicion3   Respuesta1   Respuesta 2
Lo que necesito es al introducir las condiciones 1 la 3 si son verdaderas me aparezca la respuesta 1 y 2 en las celdas DE y E de la fila correspondiente. Este Macro ya funciona, pero solo en unas celdas fijas, es decir se condiciono la celdas A1, a la C1, y me despliega en las respuesta 1 y 2 en las celdas D1 y E1, ¿pero no se como hacerla para que me tome encuenta el resto de las filas? Ya sea utilizando la función, IF, o elseif
Te agradezco tu Atención Anticipadamente
"Saludos"
Víctor A.

1 respuesta

Respuesta
1
Lo que entiendo es que las condiciones 1, 2 y 3 son diferentes para cada fila y las respuestas 1 y 2 también son diferentes.
¿Para cuántas filas es tu pregunta?
Te das cuenta que para cada condición y cada respuesta son necesarias una variable, si tu tabla se lleva por ejemplo a 100 filas, por 5 variables necesitamos 500 variables, salvo que las condiciones y respuestas estén en otra hoja formando 5 columnas, así si se podría pensar en un Do While ... Loop y las lineas de código quedarían significativamente reducidas.
Aclarame esto y veremos que se puede hacer
>Un saludo
>Julio
Hola Julio, muchas gracias por tomarte la molestia en contestarme, si mira las filas que yo estoy utilizando son desde 4 a la 25 y las columnas desde la A: AA
Es una Macro para condicionar la clasificación Arancelaria de las Mercancías, es por ello, que requiere tantas condiciones.
Te envío el código de mi macro, pero como te comento solo puedo ejecutar mi macro en la fila 4, y quiero ejecutarla en el resto de las filas hasta la 25.
Te envío mi código.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rango As Range
Set rango = ActiveSheet.Range("A4:AA4")
For Each Cell In rango
Cell.Value = UCase(Cell.Value)
Next
 If ActiveSheet.Range("C4").Value = 77 And ActiveSheet.Range("D4").Value = "RAYON" And ActiveSheet.Range("E4").Value = 22 And ActiveSheet.Range("F4").Value = "POLIESTER" And ActiveSheet.Range("G4").Value = 1 And ActiveSheet.Range("H4").Value = "NYLON" And ActiveSheet.Range("I4").Value = "SI" And ActiveSheet.Range("J4").Value = "" And ActiveSheet.Range("K4").Value = "" And ActiveSheet.Range("L4").Value = "" And ActiveSheet.Range("M4").Value = "" And ActiveSheet.Range("N4").Value = "" And ActiveSheet.Range("O4").Value = "SI" And ActiveSheet.Range("P4").Value = "" And ActiveSheet.Range("Q4").Value = "" And ActiveSheet.Range("R4").Value = "" And ActiveSheet.Range("S4").Value = "SI" And ActiveSheet.Range("T4").Value = "" And ActiveSheet.Range("U4").Value = "" And ActiveSheet.Range("V4").Value = "" And ActiveSheet.Range("W4").Value = "SI" And ActiveSheet.Range("X4").Value = "SI" And ActiveSheet.Range("Y4").Value = "" And ActiveSheet.Range("Z4").Value = "SI" And ActiveSheet.Range("AA4").Value = "" Then
ActiveSheet.Range("A4").Value = "5516.23.01"
ActiveSheet.Range("B4").Value = "TELA 77% RAYON 22% POLIESTER 1% NYLON VARIOS COLORES DE NO PUNTO TEJIDO TEXTURADO"
ElseIf ActiveSheet.Range("C4").Value = 60 And ActiveSheet.Range("D4").Value = "RAYON" And ActiveSheet.Range("E4").Value = 40 And ActiveSheet.Range("F4").Value = "POLIESTER" And ActiveSheet.Range("G4").Value = "" And ActiveSheet.Range("H4").Value = "" And ActiveSheet.Range("I4").Value = "" And ActiveSheet.Range("J4").Value = "SI" And ActiveSheet.Range("K4").Value = "" And ActiveSheet.Range("L4").Value = "" And ActiveSheet.Range("M4").Value = "" And ActiveSheet.Range("N4").Value = "" And ActiveSheet.Range("O4").Value = "SI" And ActiveSheet.Range("P4").Value = "" And ActiveSheet.Range("Q4").Value = "" And ActiveSheet.Range("R4").Value = "" And ActiveSheet.Range("S4").Value = "SI" And ActiveSheet.Range("T4").Value = "" And ActiveSheet.Range("U4").Value = "" And ActiveSheet.Range("V4").Value = "" And ActiveSheet.Range("W4").Value = "SI" And ActiveSheet.Range("X4").Value = "SI" And ActiveSheet.Range("Y4").Value = "" And ActiveSheet.Range("Z4").Value = "SI" And ActiveSheet.Range("AA4").Value = "" Then
ActiveSheet.Range("A4").Value = "5516.23.01"
ActiveSheet.Range("B4").Value = "TELA 60% RAYON 40% POLIESTER VARIOS COLORES DE NO PUNTO TEJIDO TEXTURADO"
Else
ActiveSheet.Range("A4").Value = "SIN FRACCION"
ActiveSheet.Range("B4").Value = "MERCANCIA SIN CLASIFICAR"
End If
End Sub
Vamos a ver es lógico que solo te funcione para la fila 4 (todas tus referencias a fila son a esa fila)
En excel puedes hacer referencia a la celda de dos formas una
ActiveCell. Offset(este digito fila, este digito columna) así ActiveCell.Offset(0,1)
Sería la misma fila y 1 la columna contigua por la derecha. Con números negativos en filas subes hacia arriba y en columnas te desplazas a la izquierda.
Arma tu macro de esta manera, así te servirá para todas la filas.
Empezarías situándote en C4
Range("C4").Select
If ActiveCell.Value=77 And ActiveCell.Offset(0,1).Value="RAYON" And.........
así hasta el final desplazandote con activeCell.Offset
al final pondrías
ActiveCell.Offset(0,-2).Value = "5516.23.01"
ActiveCell.Offset(0,-1).Value = "TELA RAYON......"
Ahora pasamos a la celda C5
ActiveCell.Offset(1,0).Select
Ahora pudes elegir entre repetir el bucle 25 veces
Dim i As Integer = 0
For i = 1 To 25
Auí tu codigo
Next
O por el contrario elegir una condición para finalizar el bucle por ejemplo que la celda activa este en blanco, si después de las 25 veces no hya nada en la celda C30
Do While ActiveCell.Value = ""
Tu codigo
Loop
Dime si lo has entendido o sigo explicándote
>Un saludo
>Julio
Buenas tardes Julio, Agradezco tu paciencia, si mira de hecho hice un ejemplo pequeñito de lo que me recomendaste, Creo que si logro entenderlo que estas pocas filas y columnas, posiblemente ya pueda realizarlo con más filas y columnas.
Utilice 3 filas y 4 columnas
           A B C D
1  Fracc1                  Descrip1         Condicion1              Condicion2        
2  Fracc2                   Descrip2         Condicion1              Condicion2
3  Fracc3                   Descrip3          Condicion1             Condicion2
El codigo me funciona si en las 3 filas se cumplen las condiciones, pero si en alguna de ellas no se cumple ya no me funciona.
Otro Detalle, que no me supe explicar es que esta macro la necesito, que valide datos mientras este capturando, es decir, que los datos de estas 3 filas yo los pueda borrar y luego capturar datos en ellas y que me realize la validación de las condiciones ya previamente programadas.
La verdad te soy sincero no se programar, y me esta costando muchisimno trabajo, sinceramente te agradezco tu paciencia, y aprecio muchísimo la yuda que pudieses proporcionar, porque mis respetos para las personas que programan, yo tengo más de 2 semanas con esta macro y no he podido terminarla, la verdad, ya se me cayero lo pocos cabellos, que me quedaban.
Te anexo mi código.   
Sub condicion()
Range("C1").Select
If ActiveCell.Value = "RAYON" And ActiveCell.Offset(0, 1).Value = 100 Then
ActiveCell.Offset(0, -2).Value = "FRACC1"
ActiveCell.Offset(0, -1).Value = "DESCRIP1"
ActiveCell.Offset(1, 0).Select
ElseIf ActiveCell.Value = "POLIESTER" And ActiveCell.Offset(0, 1).Value = 50 Then
ActiveCell.Offset(0, -2).Value = "FRACC2"
ActiveCell.Offset(0, -1).Value = "DESCRIP2"
ActiveCell.Offset(1, 0).Select
ElseIf ActiveCell.Value = "SEDA" And ActiveCell.Offset(0, 1).Value = 10 Then
ActiveCell.Offset(0, -2).Value = "FRACC3"
ActiveCell.Offset(0, -1).Value = "DESCRP3"
Else
ActiveCell.Offset(0, -2).Value = "SIN FRACCION"
ActiveCell.Offset(0, -1).Value = "MERCANCIA NO CLASIFICADA"
End If
End Sub
Muchísimas gracias.
"saludos"
Víctor A. H.
Tienes que darte cuenta que la celda activa no te varía si estas situado en C1 aunque le pones las condiciones a las celdas donde te desplazas tú sigues estando en C1. Para que la macro te valga para siempre no es necesario nada más que poner un botón y asignarle la macro, tu cambias tus valores y cuando termines pulsas el botón se ejecuta la macro y puedes volver a cambiar los valores, eso sí las condiciones nunca te cambian tan solo los valores que tu asignes a las celdas donde tiene que comprobar las condiciones. La razón para que te vaya calculando valores mientras los introduces no la entiendo, hasta que no hayas cambiado el total de valores a las celdas no tiene sentido que se vaya ejecutando, yo me planteo que cuando haya modificado mi plantilla es cuando quiero comprobar que las condiciones se cumplen no antes, si todavía no he terminado de cambiar valores.
En lo referente a que si se cumplen las 3 condiciones es cuando funciona, es lo que le estas pidiendo a la macro, Tu estas diciendo "Si POR celda tiene este valor, Y celda tiene este valor y Z celda tiene este valor ... entonces en la celda M me pones ... y en la celda QUE me pones...
Esta cumpliendo escrupulosamente lo que tu le pides, si lo que quieres es que si se cumple alguna condición aislada también se ejecute algo, tienes que ponerlo así en la macro. Esto te lo tienes que plantear y decidir que condición puedes prescindir de ella para que aún así te informe de algo.
Ejemplo sencillito:
Si mi padre es Perez y mi madre es Gomez, yo soy Perez Gomez
Ahora si no te importa quien es tu padre o tu madre pues tienes que pedirlo así:
Si mi padre es POR y mi madre es Z, yo soy POR, Z
Aclarate y me consultas de nuevo
>Un saludo
>Julio
Buenas tardes Julio, Agradezco tu paciencia
Muchas gracias por tu respuesta, me fue de mucha Utilidad.
"Saludos"
Un Abrazo.
Víctor A.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas