Transcription
22 vídeos del curso. La verdad es que me la pensaba porque no sabía exactamente cómo estructurar este curso. Hice una encuesta y el tema que predominó fue precisamente sacar un curso de macros y aquí estamos. Este es el vídeo número 22 del curso de macros. ¿Cuántos van a ser? No lo sé. ¿50, 100, 150 vídeos? No lo sé. Todo va a depender cómo se vaya desarrollando. Hay muchos temas a tratar.
Hemos visto hasta ahora temas básicos y muy importantes porque las bases que estamos estudiando van a ser muy importantes para cuando ya entremos a los ejemplos prácticos. Si bien hemos hecho algunos ejemplos con los temas que hemos visto, no hemos visto un proyecto grande y es importante que entendamos bien las bases. Un edificio no se sostiene sin cimientos, igual aquí un proyecto no se sostiene sin cimientos o conocimientos básicos. Gracias a todos por seguir en este curso.
Y bien, vamos a entrar en materia. Hemos visto ya la función `If`, `If de Else` que nos ayuda a realizar condiciones y evaluarlas. Si una condición no se cumple, sigue la siguiente condición y evaluamos otras condiciones. En este capítulo número 22 vamos a ver la instrucción `Select Case` que nos va a ayudar a evaluar varias condiciones. Esta instrucción realmente es una alternativa muy buena, por cierto, a la instrucción `If`. Y si bien la instrucción `If Else` es muy buena para muchos casos, también vamos a ver para qué otros casos puede ser útil `Select Case`.
Sigue en este vídeo que vas a aprender mucho de macros. Instrucción `Select Case`. Ejecuta instrucciones dependiendo del valor de una expresión. Es una excelente alternativa cuando tenemos muchas opciones que validar, sobre todo para no anidar instrucciones `If`. Mejor utilizamos `Select Case`. Vamos a poder evaluar con `Select Case` un rango de valores, por ejemplo, si el valor es de 1 a 10, aquí se va a hacer utilizando la palabra clave `To`. Y también vamos a poder hacer comparaciones, por ejemplo, menor que, mayor que, igual, diferente, usando la palabra clave `Is`.
Trabajamos sobre este archivo del capítulo 22. Abrimos el entorno de Visual Basic para Aplicaciones con la combinación de teclas `Alt + F11`. Y vamos a hacer inicialmente una macro, una macro sencilla. Posteriormente de esta macro vamos a hacer otras un poco más complicadas o más complejas, pero con temas que ya hemos visto en este curso. Aquí en el módulo `Instrucciones Select Case` vamos a crear una macro simplemente que se llame `Dia`.
Si queremos utilizar `Select Case`, le indicamos `Select Case` y después la expresión que se va a evaluar. Por ejemplo, si yo utilizo la función `Weekday` que es día de la semana, el parámetro que me pide es la fecha. Le voy a poner `Now` que es la fecha de hoy, el día de hoy. Y siempre que hacemos una estructura tenemos que cerrarla. ¿Cómo se cierra `Select Case`? Con `End Select`. Vamos a evaluar la instrucción `Weekday`. Entonces, en lugar de decirle que con `If` valide varias opciones, aquí vamos a utilizar la palabra clave `Case`. Por ejemplo, `Case 1, 7`. Al decirle que es 1 o 7, el valor de 1 o el valor de 7 estará evaluando esta expresión. Entonces, en caso de que sea 1 o 7, entonces vamos a mostrar un mensaje que diga "Fin de semana". Esto por qué, porque el día 1 y el día 7 equivalen a sábado y domingo. En inglés, el día 1 es domingo y el día 7 es sábado.
Ahora, `Case Else`. Es decir, si no es 1 o 7, entonces mostramos un mensaje que diga "No es fin de semana". El día de hoy es 29 de mayo, miércoles. Entonces no es 1 o 7. Evaluamos esta expresión. Corremos la macro y dice "No es fin de semana".
Vamos a ver otro ejemplo. En este caso, un ejemplo aplicable, un ejemplo repasando temas que ya hemos visto anteriormente. Vamos a crear una macro que se llame `RangoNumeros`. Voy a dar clic en este botón para que se muestre solamente un procedimiento que es este. Cuando vimos la instrucción `If Else`, vimos este ejemplo en donde aquí en esta celda, en la celda A12, se le pone un valor y se evaluaba con respecto a esta tabla. Si el valor era menor que 10, entonces la comisión o el descuento, aquí vamos a ponerle, vamos a ponerle aquí "descuento", era del 0%. Si era, si el valor es de 10 a 19, 10%. 20 o más, el 20%. Lo hicimos con la instrucción `If`. Aquí vamos a hacerlo con la instrucción `Select Case`.
Entonces, vamos a cambiar el tamaño a esta ventana, la copio con Excel y mostramos aquí esta parte. Y vamos a crear la macro. Entonces, como yo quiero evaluar el valor de esta celda con respecto a esta tabla y el resultado se va a poner aquí en esta celda, en la celda "descuento", entonces lo hacemos de la siguiente manera. Voy a aclarar las variables `numero as variant` y `comision as double`. Enseguida vamos a ver por qué `variant` y por qué `double`.
Bien, `numero` es igual a `Sheets(2)` (la hoja con el índice 2, que es la segunda hoja del archivo). `Range("A12").Value`. El valor de A12, que en este caso es 9, se va a guardar a la variable `numero`. Ahora le vamos a decir `Select Case numero`. Vamos a evaluar `numero` o la celda A12. Entonces, recordemos siempre cerrar la instrucción `Case`. Aquí podemos utilizar `Is`, como lo vimos en la teoría inicial. `Case Is < 10`. Qué sería esta parte. `Case Is < 10`. Aquí hacemos referencia a `numero`. No tenemos que decirle `numero = 10`. Entonces, si es menor a 10, `comision = 0`. Como dice aquí, cero.
Ahora, `Case Is <= 19`. Entonces, `comision = 0.1` o el 10%, que es esta. En caso de que no sea la primera opción ni la segunda, entonces `Case Else`, `comision = 0.2`. Si no se cumple esta, evalúa esta. Si no se cumple, entonces por default es esta opción. Una vez que evaluamos esa condición, vamos ahora a reflejar el resultado aquí en la celda C12. Borre el valor. Le digo `Sheets(2).Range("C12").Value = comision`. Primero se evalúa y al final el resultado se va a reflejar en la celda C12.
Voy a maximizar Excel y nos vamos a la ficha "Programador", "Insertar", "Controles del formulario" y agarro un botón. Lo dibujo aquí y le voy a asignar una macro que es `RangoNumeros`. Aceptar. Botón derecho, editar texto. Vamos a poner "Evaluar", simplemente "Evaluar".
Bien, si con la macro, si le doy clic en este botón, aquí me pone 0%, 0% porque 9 es menos que 10. Ahora evaluamos esta de 10 a 19. Le ponemos 19. Evaluar. 10%. Que es este. Ahora 21. Evaluar. 20%.
¿Qué sucede si yo aquí le pongo un valor de texto cualquiera? Evaluar. Y me dice 20%. Esto es incorrecto porque aquí le pusimos un texto, pero `Case Is` decir, en todo caso, un 20%. Cuando detecta un texto, nos le pone el 20%. Entonces, aquí tenemos que hacer lo siguiente. Antes de evaluar `numero`, le vamos a decir `If Not IsNumeric(numero) Then`. Es decir, si no es numérico. `Range("C12").Value = ""`. `Exit Sub`. Si el valor no es número, borramos el valor de la celda y salimos de la macro con `Exit Sub`.
Vamos a validar. Evaluar. Y listo. Nos le pone aquí vacío. Borra el valor. 1. Evaluar. Listo. 0%.
Vamos a ver ahora otro ejemplo. El siguiente ejemplo va a ser en base a esta misma macro. Entonces, la copio, la pego acá abajo y le ponemos `RangoNumeros2`. Esta va a ser la segunda macro. Aquí está la macro 1 y la macro 2. Aquí vimos que podemos utilizar `Case Is` para hacer una comparación menor que 10, menor o igual a 19. Pero ¿qué sucede si queremos hacerlo en base a un rango? También se puede con la palabra clave `To`. Aquí voy a dejar solamente `Case 0 To 9`. Aquí también estamos evaluando pero un rango de números de 0 a 9. Aquí abajo `Case 10 To 19`. También es válido. `Case Else`. Si no es 0 a 9 y tampoco es 10 a 19, entonces `Case Else`. `comision = 0.2`. Y aquí ya validamos. Si ponemos un valor que no sea numérico, entonces borra el valor de la celda.
Nos vamos a acá Excel. Nos vamos a la ficha "Programador", "Insertar", otra vez un botón. Vamos a dibujar aquí un botón. Le asignamos la macro número 2. Aceptar. Botón derecho, editar texto. Y aquí le ponemos "Evaluar 2". Le ponemos aquí un texto. Borra el valor. Le ponemos 50. Evaluar. Y listo. Esta macro ya es funcional.
Ahora vamos a ver otra macro. Vamos a ver una macro en donde este texto que está aquí, el de la celda A3, "Hola mundo", lo vamos a poner en mayúsculas o en minúsculas dependiendo la opción que tú elijas. Bien, nos vamos a que la macro y vamos a crear una nueva macro que le vamos a decir `ConvertirTexto`. En el vídeo anterior vimos que podemos utilizar el método o la función `InputBox` para mostrar un cuadro de mensaje o para mostrar un cuadro de diálogo y podemos escribir valores. Vamos a hacerlo aquí en donde se va a mostrar ese cuadro y vamos a poder elegir uno para mayúsculas o dos para minúsculas, combinado con `Select Case`.
Voy a regresarme a la macro anterior y hay un tema que les quedé a deber porque el número se declaró como `Variant` porque el número puede ser tanto un valor numérico como un valor de texto que podemos evaluar. Entonces, no es numérico, pero tampoco es texto o los dos pueden ser. Entonces se le define el tipo `Variant`. `Variant` recuerden que es el tipo de valores por default en donde puede aceptar numéricos, de texto, con decimales, etcétera. Y `comision` se definió como `Double` porque `comision` estamos dándole valores con decimales, es por eso de estos tipos de datos.
Ahora, si nos vamos a la otra macro y listo. Vamos a crear tres variables: `opcion as byte`, `texto as string` (o cadena de texto) y por último `rango as range`. La variable `opcion` nos va a guardar el 1 o el 2 dependiendo lo que elijamos. La variable `texto` nos va a guardar el texto que vamos a poner en el cuadro de diálogo y `rango` el rango que se va a modificar con mayúsculas o minúsculas. Recordemos que si queremos asignar un rango a una variable, utilizamos la palabra reservada `Set`. `rango = ThisWorkbook.Sheets("Hoja1").Range("A3")`.
Ahora, en lugar de escribir esta referencia, simplemente vamos a escribir un rango en lo posterior. Como queremos mostrar un texto que diga "Elijo en opción y decirle 1 para mayúsculas y 2 para minúsculas", ese texto va a ser muy grande, entonces lo vamos a guardar en la variable `texto`. Le vamos a decir `texto = "Elige una opción: " & vbNewLine & vbNewLine & "1. Mayúsculas" & vbNewLine & "2. Minúsculas"`. Ese texto o la variable `texto` va a guardar este texto. Enseguida vamos a ver cómo se muestra en el `InputBox`.
Ahora la variable `opcion` va a ser igual a `InputBox`. Recuerda que en el capítulo anterior vimos el uso de la función `InputBox`. Ahora, como `Prompt` o como texto, le vamos a poner lo que tenemos en la variable `texto` (que es lo que pusimos arriba), el título de ese cuadro de diálogo va a ser "Excel e Info", el valor por default va a ser 1, por si queremos convertir a mayúsculas. Cierro paréntesis. Enter. Aquí vamos a mostrar el `InputBox` con este texto para que puedan elegir uno o dos y se pueda convertir a mayúsculas o minúsculas.
Ahora con `Select Case` vamos a evaluar si se presiona uno o se presiona dos. Le ponemos `Select Case opcion`. Vamos a evaluar `opcion`. `Case 1`. Simplemente 1. Es decir, si `opcion` es igual a 1, entonces `rango.Value = UCase(rango.Value)`. Recordemos qué `rango` es el rango A3 que se definió arriba con `Set`. Entonces, el valor de `rango` es igual a `vb.UCase`. Esa función `UCase` nos va a convertir un texto en mayúsculas. ¿Y qué texto se va a convertir? `rango.Value`. Vean esta lógica: el valor de `rango` es igual al mismo valor de `rango`, lo mismo que tengamos en la celda, pero convertido a mayúsculas.
Ahora, `Case 2`. Si ingresamos al 2, entonces `rango.Value = LCase(rango.Value)`. Para convertir a minúsculas, que convertimos a minúsculas el mismo valor del rango. `Case Else`. Es decir, si no se presiona 1 ni se ingresa el 2, vamos a ponerle `MsgBox "Debes elegir una opción válida"`. Coma `vbExclamation` para un icono de exclamación, coma y el título "Excel e Info". Y cerramos `Select Case` con `End Select`. Y listo, esta macro ya debe funcionar.
Nos vamos al archivo de nuevo, a la ficha "Programador", "Insertar", control de formulario, un botón. Y lo ponemos aquí. Y le vamos a decir que se asigne la macro `ConvertirTexto`. Aceptar. Botón derecho, editar texto. Y ahora vamos a decir "Convertir Texto". Ese texto es lo que se va a convertir. Convertir texto. Y aquí está el `InputBox`. Vean, "Elige una opción". Le dijimos que sea un salto de línea y un segundo salto de línea. "1. Mayúsculas". Aceptar. Listo, se convierte en mayúsculas. Convertir texto. 2. Aceptar. Minúsculas. Genial.
Convertir texto. "Hola mundo". No considero los tipos. Depurar aquí. `opcion` como lo pusimos un valor de texto, entonces lo correcto va a ser que sea el tipo de dato `Variant` y así nos evitamos esos problemas. Convertir texto. "Hola mundo". Enter. "Debes elegir una opción válida".
Casi estoy seguro que eres igual que yo, sorprendido de lo que hemos aprendido en 22 capítulos. Hemos visto bastantes cosas muy útiles y estoy también seguro que al ver este vídeo has de estar pensando en que lo puedes aplicar en tu trabajo diario. Ese es el objetivo, que lo que aprendas en este curso lo apliques a tu vida diaria, a proyectos, a tu trabajo, cosas personales, lo que tú quieras. El conocimiento aquí está y es libre de utilizarlo como mejor te parezca. En serio, si te gustó, por favor, da el pulgar arriba. Comparte este vídeo con personas que sepas que quieran aprender macros en Excel. Suscríbete a este canal si no lo has hecho y activa la campanita para que YouTube te avise cuando publique un nuevo vídeo. Mi nombre es Sergio. Hasta la próxima.