Trabajando con Operadores
Desliza para mostrar el menú
Declarar variables te proporciona un lugar para almacenar valores. Los operadores son la forma en que combinas, comparas y pruebas esos valores; en esencia, así es como se expresa una regla de negocio en código. "¿Está el stock por debajo del nivel de reposición?" es un operador de comparación. "Reponer si el stock es bajo Y el producto es Electrónica" es un operador lógico.
Operadores aritméticos
La mayoría de estos funcionan exactamente como esperarías en una calculadora, pero VBA tiene dos operadores de división que hacen cosas realmente diferentes:
Dim total As Double
total = 45 * 3 ' multiplication → 135
total = 100 / 3 ' division → 33.33...
total = 100 \ 3 ' integer division → 33 (drops remainder)
total = 100 Mod 3 ' remainder only → 1
total = 2 ^ 3 ' exponent → 8
La barra invertida (\) y Mod son los dos que suelen confundir, porque parecen similares pero responden preguntas opuestas. 100 \ 3 responde "¿cuántas veces completas cabe el 3 en 100?" — la respuesta es 33, y lo que sobra se descarta. 100 Mod 3 responde la pregunta inversa, "¿qué sobra después de que el 3 cabe en 100 tantas veces completas como sea posible?" — la respuesta es 1. Juntos, 33 grupos de 3 más un resto de 1 suman 100 — no es coincidencia, es para lo que están diseñados estos dos operadores. Esta combinación es exactamente cómo calcularías "¿cuántas cajas completas de 3 puedo empacar y cuántas unidades quedan para una caja parcial?" o comprobar si un número de fila es par (i Mod 2 = 0).
Operadores de comparación
Estos devuelven True o False:
44 > 30 ' True
44 = 44 ' True
"Office" = "office" ' False — VBA's default string comparison IS case-sensitive
44 <> 30 ' True (not equal)
Operadores lógicos
Estos combinan dos o más comparaciones en un solo resultado Verdadero/Falso — exactamente como se expresa una regla de negocio con múltiples condiciones:
If category = "Electronics" And stock < 30 Then
' triggers only if BOTH are true
End If
If category = "Office" Or category = "Electronics" Then
' triggers if EITHER is true
End If
If Not (stock < reorderLevel) Then
' triggers if stock is NOT below reorder level
End If
And requiere que todas las condiciones unidas por él sean True para que toda la expresión sea True — el primer ejemplo solo se ejecuta para productos de Electrónica que además tienen realmente poco stock, no para cualquier producto con poco stock sin importar la categoría. Or requiere solo una condición True, que es como se comprueba la pertenencia a un pequeño conjunto de valores aceptables. Not simplemente invierte un resultado True/False a su opuesto — a menudo se usa, como en el tercer ejemplo, para expresar una regla como "NO la condición negativa" cuando eso resulta más natural que reformular directamente la condición positiva.
Concatenación de cadenas
Une texto con & (no +, que VBA reserva para números):
Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134
Observa que currentStock es un número (134), no texto, pero se concatena en la cadena sin ningún paso de conversión — VBA convierte automáticamente un número a su representación en texto cuando usas & con él. Esa comodidad es exactamente la razón por la que se prefiere & sobre + para unir texto: si escribieras "Stock: " + currentStock, VBA intentaría interpretar toda la expresión como aritmética y lanzaría un error o produciría un resultado confuso, dependiendo del contexto. & siempre significa "unir como texto", sin ambigüedad.
Tarea
- Usando los datos de Monitor Arm (Price 89.99, Stock 18, Reorder Level 10), escribe una expresión que compruebe si el stock es menor o igual al nivel de reposición más 10 — una advertencia de "acercándose" en lugar de una alerta estricta.
- Construye un mensaje concatenado: "Monitor Arm is at 18 units (reorder at 10)" usando variables, no texto fijo.
1. La expresión de "acercándose"
- Primero necesitas tres variables: una para almacenar el stock (18), otra para el nivel de reorden (10) y luego una expresión que las compare.
- "Menor o igual que" es un solo operador de comparación
<=. - La frase "nivel de reorden más 10" significa que no estás comparando el stock directamente contra 10, sino contra un valor calculado. Escribe esa suma directamente dentro de la comparación:
stock <= reorderLevel + 10. - Para ver realmente el resultado, asígnalo a una variable
Boolean. - Calcula manualmente cuánto es
10 + 10antes de ejecutarlo, así sabrás si18 <= 20debe devolverTrueoFalse, y verifica que tu código coincida.
2. Construcción del mensaje
- El operador que une textos es
&, no+. - Observa la salida objetivo por partes:
"Monitor Arm is at "+ (el número de stock) +" units (reorder at "+ (el nivel de reorden) +")". Cuenta las partes: son cinco, alternando entre texto literal entre comillas y una variable. - La tarea dice "usando variables, no texto codificado" — eso significa que el
18y el10en tu mensaje final deben provenir de tus variables de stock yreorderLevel, no escritos como números literales dentro de la cadena. - Concatenar un número con
&no necesita conversión — VBA lo convierte automáticamente en texto, así que puedes unir una variable numérica directamente en la cadena. - Construye todo en una variable
Stringprimero (message = ...), luego muéstralo conMsgBox messagepara comprobar que coincide exactamente con la salida esperada, incluidos los paréntesis y los espacios.
O usa el siguiente código
Abre Section_2_VBA_Fundamentals.xlsm, presiona Alt+F11 y utiliza el módulo en el que has estado trabajando para este libro (inserta uno mediante Insertar → Módulo si aún no tienes uno — siguiendo el mismo patrón que modIntro en la Sección 1, podrías llamarlo modFundamentals).
Sub MonitorArmCheck()
Dim stock As Integer
Dim reorderLevel As Integer
Dim isGettingClose As Boolean
Dim message As String
stock = 18
reorderLevel = 10
' Part 1 — the "getting close" check
isGettingClose = stock <= reorderLevel + 10
MsgBox isGettingClose
' Part 2 — the concatenated message
message = "Monitor Arm is at " & stock & " units (reorder at " & reorderLevel & ")"
MsgBox message
End Sub
Haz clic en cualquier parte dentro del Sub y luego presiona F5. Deberías ver aparecer dos cuadros de mensaje uno tras otro: primero True (ya que 18 ≤ 20), luego la frase.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Trabajando con Operadores
Declarar variables te proporciona un lugar para almacenar valores. Los operadores son la forma en que combinas, comparas y pruebas esos valores; en esencia, así es como se expresa una regla de negocio en código. "¿Está el stock por debajo del nivel de reposición?" es un operador de comparación. "Reponer si el stock es bajo Y el producto es Electrónica" es un operador lógico.
Operadores aritméticos
La mayoría de estos funcionan exactamente como esperarías en una calculadora, pero VBA tiene dos operadores de división que hacen cosas realmente diferentes:
Dim total As Double
total = 45 * 3 ' multiplication → 135
total = 100 / 3 ' division → 33.33...
total = 100 \ 3 ' integer division → 33 (drops remainder)
total = 100 Mod 3 ' remainder only → 1
total = 2 ^ 3 ' exponent → 8
La barra invertida (\) y Mod son los dos que suelen confundir, porque parecen similares pero responden preguntas opuestas. 100 \ 3 responde "¿cuántas veces completas cabe el 3 en 100?" — la respuesta es 33, y lo que sobra se descarta. 100 Mod 3 responde la pregunta inversa, "¿qué sobra después de que el 3 cabe en 100 tantas veces completas como sea posible?" — la respuesta es 1. Juntos, 33 grupos de 3 más un resto de 1 suman 100 — no es coincidencia, es para lo que están diseñados estos dos operadores. Esta combinación es exactamente cómo calcularías "¿cuántas cajas completas de 3 puedo empacar y cuántas unidades quedan para una caja parcial?" o comprobar si un número de fila es par (i Mod 2 = 0).
Operadores de comparación
Estos devuelven True o False:
44 > 30 ' True
44 = 44 ' True
"Office" = "office" ' False — VBA's default string comparison IS case-sensitive
44 <> 30 ' True (not equal)
Operadores lógicos
Estos combinan dos o más comparaciones en un solo resultado Verdadero/Falso — exactamente como se expresa una regla de negocio con múltiples condiciones:
If category = "Electronics" And stock < 30 Then
' triggers only if BOTH are true
End If
If category = "Office" Or category = "Electronics" Then
' triggers if EITHER is true
End If
If Not (stock < reorderLevel) Then
' triggers if stock is NOT below reorder level
End If
And requiere que todas las condiciones unidas por él sean True para que toda la expresión sea True — el primer ejemplo solo se ejecuta para productos de Electrónica que además tienen realmente poco stock, no para cualquier producto con poco stock sin importar la categoría. Or requiere solo una condición True, que es como se comprueba la pertenencia a un pequeño conjunto de valores aceptables. Not simplemente invierte un resultado True/False a su opuesto — a menudo se usa, como en el tercer ejemplo, para expresar una regla como "NO la condición negativa" cuando eso resulta más natural que reformular directamente la condición positiva.
Concatenación de cadenas
Une texto con & (no +, que VBA reserva para números):
Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134
Observa que currentStock es un número (134), no texto, pero se concatena en la cadena sin ningún paso de conversión — VBA convierte automáticamente un número a su representación en texto cuando usas & con él. Esa comodidad es exactamente la razón por la que se prefiere & sobre + para unir texto: si escribieras "Stock: " + currentStock, VBA intentaría interpretar toda la expresión como aritmética y lanzaría un error o produciría un resultado confuso, dependiendo del contexto. & siempre significa "unir como texto", sin ambigüedad.
Tarea
- Usando los datos de Monitor Arm (Price 89.99, Stock 18, Reorder Level 10), escribe una expresión que compruebe si el stock es menor o igual al nivel de reposición más 10 — una advertencia de "acercándose" en lugar de una alerta estricta.
- Construye un mensaje concatenado: "Monitor Arm is at 18 units (reorder at 10)" usando variables, no texto fijo.
1. La expresión de "acercándose"
- Primero necesitas tres variables: una para almacenar el stock (18), otra para el nivel de reorden (10) y luego una expresión que las compare.
- "Menor o igual que" es un solo operador de comparación
<=. - La frase "nivel de reorden más 10" significa que no estás comparando el stock directamente contra 10, sino contra un valor calculado. Escribe esa suma directamente dentro de la comparación:
stock <= reorderLevel + 10. - Para ver realmente el resultado, asígnalo a una variable
Boolean. - Calcula manualmente cuánto es
10 + 10antes de ejecutarlo, así sabrás si18 <= 20debe devolverTrueoFalse, y verifica que tu código coincida.
2. Construcción del mensaje
- El operador que une textos es
&, no+. - Observa la salida objetivo por partes:
"Monitor Arm is at "+ (el número de stock) +" units (reorder at "+ (el nivel de reorden) +")". Cuenta las partes: son cinco, alternando entre texto literal entre comillas y una variable. - La tarea dice "usando variables, no texto codificado" — eso significa que el
18y el10en tu mensaje final deben provenir de tus variables de stock yreorderLevel, no escritos como números literales dentro de la cadena. - Concatenar un número con
&no necesita conversión — VBA lo convierte automáticamente en texto, así que puedes unir una variable numérica directamente en la cadena. - Construye todo en una variable
Stringprimero (message = ...), luego muéstralo conMsgBox messagepara comprobar que coincide exactamente con la salida esperada, incluidos los paréntesis y los espacios.
O usa el siguiente código
Abre Section_2_VBA_Fundamentals.xlsm, presiona Alt+F11 y utiliza el módulo en el que has estado trabajando para este libro (inserta uno mediante Insertar → Módulo si aún no tienes uno — siguiendo el mismo patrón que modIntro en la Sección 1, podrías llamarlo modFundamentals).
Sub MonitorArmCheck()
Dim stock As Integer
Dim reorderLevel As Integer
Dim isGettingClose As Boolean
Dim message As String
stock = 18
reorderLevel = 10
' Part 1 — the "getting close" check
isGettingClose = stock <= reorderLevel + 10
MsgBox isGettingClose
' Part 2 — the concatenated message
message = "Monitor Arm is at " & stock & " units (reorder at " & reorderLevel & ")"
MsgBox message
End Sub
Haz clic en cualquier parte dentro del Sub y luego presiona F5. Deberías ver aparecer dos cuadros de mensaje uno tras otro: primero True (ya que 18 ≤ 20), luego la frase.
¡Gracias por tus comentarios!