Visual Basic para Aplicaciones - "If... And" Múltiple

Life is soft - evento anual de software empresarial
 
Vista:

"If... And" Múltiple

Publicado por Diego Molina (1 intervención) el 28/01/2020 20:23:29
Hola,

Estoy tratando de poner varios operadores lógicos en un codígo :

1
2
3
4
5
6
If (0.196 = Cells(i, 22).Value) And (0.084 = Cells(i, 23).Value)  And (0.054 = Cells(i, 27).Value) And (0.16 = Cells(i, 25).Value) Then
    Cells(i, 29) = WorksheetFunction.Norm_Dist(((Cells(i, 22) + Cells(i, 23) + Cells(i, 24) + Cells(i, 25) + Cells(i, 26) + Cells(i, 27) + Cells(i, 28))), 0.65, 0.09, 1)
Else
    Cells(i, 29) = WorksheetFunction.Norm_Dist((Cells(i, 22) + Cells(i, 23) + Cells(i, 24) + Cells(i, 25) + Cells(i, 27) * 0.5 / 0.2 + Cells(i, 28) * 0.5 / 0.2), 0.65, 0.09, 1)
 
End If

Lo que sucede es que nunca entra en el primer caso, y siempre ocurre lo que sigue después del Else, así las condiciones se cumplan.

Tengo algún error?

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de MIGUEL
Val: 424
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

"If... And" Múltiple

Publicado por MIGUEL (121 intervenciones) el 29/01/2020 17:28:10
Buenas Diego

Para una efectiva comparación debes de meter en variables de tipo Double el contenido de las celdas por ejemplo:

1
2
3
4
5
6
7
8
9
num23 = Cells(i, 23)
num22 = Cells(i, 22)
num25 = Cells(i, 25)
num27 = Cells(i, 27)
If num22 = 0.196 And num23 = 0.084 And num27 = 0.054 And num25 = 0.16 Then
    Cells(i, 29) = WorksheetFunction.Norm_Dist(((Cells(i, 22) + Cells(i, 23) + Cells(i, 24) + Cells(i, 25) + Cells(i, 26) + Cells(i, 27) + Cells(i, 28))), 0.65, 0.09, 1)
Else
    Cells(i, 29) = WorksheetFunction.Norm_Dist((Cells(i, 22) + Cells(i, 23) + Cells(i, 24) + Cells(i, 25) + Cells(i, 27) * 0.5 / 0.2 + Cells(i, 28) * 0.5 / 0.2), 0.65, 0.09, 1)
End If

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

"If... And" Múltiple

Publicado por Antoni Masana (498 intervenciones) el 30/01/2020 01:03:19
Aunque el orden de los factores no altera el resultado no hace falta tanto paréntesis y a mí me gusta más así:

1
2
3
4
5
6
7
If Cells(i, 22) = 0.196 And Cells(i, 23) = 0.084 And Cells(i, 27) = 0.054 And Cells(i, 25) = 0.169 Then
    Cells(i, 29) = WorksheetFunction.Norm_Dist(((Cells(i, 22) + Cells(i, 23) + Cells(i, 24) + Cells(i, 25) + _
                                                 Cells(i, 26) + Cells(i, 27) + Cells(i, 28))), 0.65, 0.09, 1)
Else
    Cells(i, 29) = WorksheetFunction.Norm_Dist((Cells(i, 22) + Cells(i, 23) + Cells(i, 24) + Cells(i, 25) + _
                                                Cells(i, 27) * 0.5 / 0.2 + Cells(i, 28) * 0.5 / 0.2), 0.65, 0.09, 1)
End If

Como no se que datos tienes en las celdas y por lo tanto no se porque no se cumple el IF.
Lo que tu ves en la celda y lo que realmente tiene la celda son dos cosas completamente diferentes y te pondré un ejemplo:

Esta condición no se cumplida nunca:

1
2
A = 10/3
If A = 3.333 Then

Porque el valor de A es 3.3333333333333333333333333333 y esto no es igual 3.3330000000000000000000000000

Solución redondea los valores de estas celdas en la formula de calculo o en la macro antes de comparar.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar