Operar con dos celdas dependiendo de su valor.

Hola, hace un par de días un compañero de TodoExpertos me resolvió un problema y lo hizo correctamente, en esta pregunta que hice:

<a>http://www.todoexpertos.com/mitodoexpertos/question/wanwb8cmwh5kh/asignar-valor-dependiendo-de-otros-dos-en-otras-dos-celdas</a>

Pero al meter la operación en una macro, y colocar más operadores, resulta que me da un error por la extensión de la misma.

En definitiva consiste en colocarse en la columna "E" y operar con dos columnas "G" y "S", dependiendo de los propios valores de cada celda de estas dos columnas, con las opciones que dí en esa pregunta.

Mi consulta es si alguien puede ayudarme a conseguir un sistema para que me haga estas operaciones, con una macro, deforma que pueda ampliar los operandos e incluir nuevas operaciones sin que me vea limitado por la extensión de la fórmula.

Gracias de antemano.

1 respuesta

Respuesta
1

Un problema importante de las funciones Excel es que tienen una longitud limitada, aparte que no hay mente humana capaz de descifrarlas si son complicadas.

Entonces la mejor solución es hacerlo con macros que pueden tener longitud ilimitada y se entienden mucho mejor.

He introducido el enlace que dices, pero lo único que hace es dirigirme a esta misma página, dime cual es el problema que hay que resolver para poder hacerlo.

Si tienes que mandar algún fichero hazlo a

Estoy fiuera de casa, mañana te comento.

Gracias por tu interés.

No puedo acceder a la página

TuTodoExpertos

Es tuya y no tengo permiso.

Si acaso yo podría acceder a las preguntas del tablón, creo que te refieres a esta:

Tablón

Pero dices que las operaciones no son esas, que le diste unas operaciones más sencillas.

Voy a intentar entresacar la lógica de esta línea que dices:

ActiveCell. FormulaR1C1
= _ "=IF(AND(RC[2]>0,RC[2]<=50,RC[14]>0,RC[14]<=2),(RC[2]*RC[14]*4)+11,IF(AND(RC[2]>0,RC[2]<=50,RC[14]>2,RC[14]<=4),(RC[2]*RC[14]*4)+22,IF(AND(RC[2]>0,RC[2]<=50,RC[14]>4),(RC[2]*RC[14]*4)+55,IF(AND(RC[2]>50,RC[2]<=100,RC[14]>0,RC[14]<=2),(RC[2]*RC[14]*12)+11,IF(AND(RC[2]>50,RC[2]<=100,RC[14]>2,RC[14]<=4),(RC[2]*RC[14]*12)+22,IF(AND(RC[2]>50,RC[2]<=100,RC[14]>4),(RC[2]*RC[14]*12)+55,IF(AND(RC[2]>100,RC[14]>0,RC[14]<=2),(RC[2]*RC[14]*36)+11,IF(AND(RC[2]>100,RC[14]>2,RC[14]<=4),(RC[2]*RC[14]*36)+22,IF(AND(RC[2]>100,RC[14]>4),(RC[2]*RC[14]*36)+55)))))))))"

Como te decía, las fórmulas de Excel pueden ser lo más incomprensible que existe, vamos a hacer una tabla

     X   (0,50]   (50,100]   (100,oo)
  Y
(0,2]    4xy+11   12xy+11    36xy+11
(2,4]    4xy+22   12xy+22    36xy+22
(4,oo]   4xy+55   12xy+55    36xy+55

Asi puesto se entiende mucho mejor, según el grupo en X el coeficiente de xy es 4,12 o 36

y según el grupo en Y en sumando es 11, 22 o 55

Podemos crear una función de macro muy sencillamente, en el editor de VisualBasic creamos un módulo nuevo y añadimos esta función de usuario.

Function PrecioFinal(celda As Range) As Double
Dim X, Y As Double
X = Cells(celda.Row, "G")
Y = Cells(celda.Row, "S")
If X <= 50 Then
    PrecioFinal = 4 * X * Y
ElseIf X <= 100 Then
    PrecioFinal = 12 * X * Y
Else
    PrecioFinal = 36 * X * Y
End If
If Y <= 2 Then
    PrecioFinal = PrecioFinal + 11
ElseIf Y <= 4 Then
    PrecioFinal = PrecioFinal + 22
Else
    PrecioFinal = PrecioFinal + 55
End If
End Function

Entonces ahora en la celda E2 ponemos esta función

= PrecioFinal(E2)

Y después copiamos la celda E2 y la copiamos en las celdas restantes de la columna.

De esta forma en E3 pondrá

= PrecioFinal(E3)

en E4

= PrecioFinal(E4)

Etc.

En realidad podríamos haber puesto en E2 =PrecioFinal(A2) porque lo único que se tiene en cuenta en la fórmula es el 2 de la fila. Pero no te lies, hazlo como dije lo primero.

Ahora mismo te mando el fichero con la fórmula macro ya creada y asignada a las celdas de la fila E.

Y si cambias las condiciones tendrás que modificar la función PrecioFinal pero ya ves el mecanismo que hay para hacerlo mucho más sencillo y comprensible que con las funciones propias de Excel, mediante las funciones de usuario.

Espero que te sirva y lo hayas entendido. Si no es así pregúntame. Y si ya esta bien, no olvides puntuar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas