Los operadores en VBA
Los operadores son, en mi opinión, el componente más importante de los lenguajes de programación porque permiten calcular, comparar, validar y unir, las variables y las constantes declaradas en VBA. En definitiva, relaciona unos valores con otros.
Estos operadores pueden ser de varios tipos:
- Operadores aritméticos: Sirven para hacer cálculos (suma, resta, multiplicación y división).
- Operador de concatenación: Une los valores de dos variables o constantes (operador ampersand (&)).
- Operadores de comparación: Evalúan si un valor es mayor, menor o igual que otro (igual (=), menor que (<), menor o igual a (<=), mayor que (>), mayor o igual a (>=), distinto a (<>).
- Operadores lógicos: Se suelen utilizar para formar expresiones complejas (negación (Not), conjunción (And), disyunción (Not).
Vamos con ellos…
Operadores aritméticos
Los operadores aritméticos o matemáticos se utilizan para realizar operaciones matemáticas, como sumas, restas, multiplicaciones o divisiones. Te muestro cada uno en detalle:
Suma, resta, multiplicación y exponenciación
- El operador más (+) se utiliza para añadir un valor a otro y también para concatenar cadenas.
- El operador menos (-) se usa para hallar la diferencia entre dos o más números y también para mostrar un número como negativo.
- El operador multiplicación (*) se utiliza para multiplicar un valor por otro.
- El operador exponencial (^) se utiliza para elevar un número a la potencia de otro número.
División
La división se utiliza para obtener la fracción de un número en términos de otra, es decir, para dividir un número entre otro (evidente). En términos de VBA se pueden diferenciar dos tipos de división:
- División entera: se utiliza cuando queremos que el resultado sea un número entero. Para ello se utiliza la barra invertida (\). Los operandos (que así es como se llama a los valores que intervienen) pueden ser cualquier tipo de número válido, con o sin decimales.
- División decimal: Cuando queremos que el resultado de la operación sea un número decimales, debemos utilizar la barra normal (/).
Mira este ejemplo. Si tengo dos variables, a =9 y b = 4, el resultado de los dos tipos de división quedaría así:
a/b= 2,25
a\b=2
Mod
Para hallar el resto de una división, se utiliza el operador Mod. Este operador divide un valor entre otro y muestra “sobrante” en forma de número decimal.
Por ejemplo, si tengo dos variables a=7 y b=2, el resultado de la operación 7 Mod 2 sería 1.
Concatenación
Cuando se habla de concatenar, se quiere decir unir dos o más valores. Para unir tanto cadenas de texto como valores numéricos se utiliza el operador ampersand (&). Esta unión se hace en el orden en el que se introducen los operandos.
Observa el siguiente ejemplo:
Para unir el nombre con el apellido dejando un especio en blanco, debes insertar el espacio como si fuese otra cadena más. El espacio debe ir entre comillas.
Operadores de comparación
Los operadores de comparación se llaman también relacionales y comparan valores y expresiones devolviendo siempre un resultado booleano: verdadero o falso.
Observa la siguiente tabla en la que te muestro algunos ejemplos de operadores de comparación.
Variable a | Variable b | Expresión | Resultado |
---|---|---|---|
27 | 3 | a>b | Verdadero |
35 | 7 | a<b | Falso |
12 | 12 | a=b | Verdadero |
12 | 12 | a<>b | Falso |
¿Quieres un ejemplo? Echa un vistazo a este:
Sub ComparaNumeros()
Dim a, b As Integer
a = InputBox("Introduce el primer número")
b = InputBox("Introduce el segundo número")
If a = b Then
MsgBox ("Los dos números son iguales")
Else
If a > b Then
MsgBox ("El primer número es mayor que el segundo")
Else
MsgBox ("El primer número es menor que el segundo")
End If
End If
End Sub
Operadores lógicos
Muchas veces los operadores de comparación por sí solos se quedan algo cortos para algunas necesidades. Los operadores lógicos solucionan este problema al permitir la combinación de varias expresiones simples para formar una más compleja.
- El operador And (y) combina dos condiciones simples y devuelve un valor que es verdadero si estas dos condiciones son verdaderas. Por ejemplo (a >=6) And (b>=7).
- El operador Or (o) devuelve el valor Verdadero cuando una de las dos expresiones es verdadera.
- El operador Not (no) se utiliza sobre una sola condición para negar su valor.
Resumiendo…
Si eres usuario con un nivel medio-principiante de Excel, seguro que has utilizado ya algunos de estos operadores, sobre todo los aritméticos. A nivel de hoja (sin entrar en VBA), conocer el funcionamiento y la precedencia de estos operadores es muy útil para armar fórmulas condicionales o que contienen criterios.
Conparte este artículo en tus redes sociales.
Sergio…
‘Problemas con el operador “>”. ¿Por qué pasa esto?
Sub MayorQue()
Dim strMayor As String
Dim strMenor As String
strMayor = “„|BAΩ¸€[j”
strMenor = “„tDAΩ¸wšsP”
‘esto, en una celda, da resultado FALSO
‘=SI(“„|BAΩ¸€[j”>”„tDAΩ¸wšsP”;”VERDADERO”;”FALSO”)
‘en VBA, da resultado VERDADERO
If “„|BAΩ¸€[j” > “„tDAΩ¸wšsP” Then
MsgBox (“VERDADERO”)
Else
MsgBox (“FALSE”)
End If
If strMayor > strMenor Then
MsgBox (“VERDADERO”)
Else
MsgBox (“FALSE”)
End If
‘Hacemos lo mismo pasando strMayor y strMenor a codigos ASC
‘esto, en una celda, da resultado VERDADERO
‘=SI(“132 – 124 – 066 – 065 – 206 – 169 – 184 – 143 – 128 – 091 – 106″>”132 – 116 – 068 – 065 – 206 – 169 – 184 – 119 – 154 – 115 – 080″;”VERDADERO”;”FALSO”)
‘en VBA, tambien da resultado VERDADERO
If DescomponerASC(strMayor) > DescomponerASC(strMenor) Then
MsgBox (“VERDADERO”)
Else
MsgBox (“FALSE”)
End If
If “132 – 124 – 066 – 065 – 206 – 169 – 184 – 143 – 128 – 091 – 106” > “132 – 116 – 068 – 065 – 206 – 169 – 184 – 119 – 154 – 115 – 080” Then
MsgBox (“VERDADERO”)
Else
MsgBox (“FALSE”)
End If
‘Ergo, “el operador >” funciona bien en VBA y funciona mal en la HojaExcel
‘ Funcionan mal las ordenaciones en las HojaExcel…
‘ y las ordenaciones en ACCES (mal también)
End Sub
Function DescomponerASC(A As String) As String
Dim L As Long
DescomponerASC = “”
For L = 1 To Len(A)
DescomponerASC = DescomponerASC & Right(“00″ & Asc(Mid(A, L, 1)), 3) & ” – ”
Next L
DescomponerASC = Left(DescomponerASC, Len(DescomponerASC) – 3)
End Function
‘Siento molestarte.
Eduard