lunes, 27 de enero de 2014

Extraer palabras de una lista con relleno rápido en Excel 2013


Si alguien había aprendido a utilizar las funciones EXTRAE, DERECHA e IZQUIERDA en versiones anteriores de Excel, puede que no tenga que utilizarlas ya casi nunca, puesto que Microsoft ha incorporado en la última versión, Excel 2013, una utilidad llamada "Relleno rápido" que, de forma muy inteligente, "adivina" qué palabra queremos extraer de una lista de frases o datos.


"Relleno rápido" es capaz de extraer automáticamente de una lista de frases o nombres, una palabra contenida en cada frase o nombre que ocupa un determinado lugar. Por ejemplo, si tenemos una lista como la de la imagen de abajo y escribimos las dos primeras palabras que queremos extraer en la columna de al lado, Excel nos presenta una vista previa de lo que él entiende que queremos hacer...


De la misma forma, ocurriría si lo intentamos con la última palabra de cada frase...


A veces, Excel 2013 no está seguro si va a adivinar lo que quiere el usuario y espera a que este introduzca 3 o 4 datos para "aprender" su conducta. Es entonces cuando por fin, muestra la vista previa....


Hemos visto en el ejemplo anterior como Excel ha extraído la palabra de en medio. Según Microsoft:
"Relleno rápido puede que no siempre empiece a rellenar sus datos. Funciona mejor cuando sus datos tienen algún tipo de coherencia. Por ejemplo, todos los nombres tienen iniciales del segundo nombre o todas las direcciones usan el mismo tipo de código postal. Si sus datos tienen muchas incoherencias, siempre puede usar "Texto en columnas" (dentro de la ficha Datos) para dividir texto en celdas diferentes, o usar funciones para dividir texto."

Algo importante a saber es que, para que "Relleno rápido" funcione, debemos asegurarnos de que nuestro Excel 2013 tiene activa la casilla "Relleno rápido automático", dentro del apartado "Avanzadas" de las "Opciones de Excel" (para obtener el cuadro de diálogo de "Opciones de Excel", debemos ir a la pestaña Archivo y después hacer clic en "Opciones"):





Si desea llevar a la práctica todo lo que le hemos ofrecido en este artículo, puede asistir a nuestros cursos prácticos de Excel o puede solicitarlos in company:










lunes, 13 de enero de 2014

Control de errores en VBA para Excel


Cualquier usuario que se haya adentrado en el mundo de las macros o del VBA (Visual Basic for Applications) habrá comprobado como es necesario convivir con los errores que se producen al ejecutar determinado código.
A veces, que ocurra un error es comprensible, natural y en ocasiones inevitable. Lo que sí debemos evitar es que nuestra macro o procedimiento se bloquee, apareciendo el típico mensaje de error:



Pero comencemos desde el principio. En el ámbito del VBA, hay tres tipos de error:

  • Los errores de compilación (sintaxis inadecuada). Estos errores de compilación son detectados por el editor de VBA al compilar el código, antes de comenzar a ejecutarse el procedimiento:
    • Por escribir inadecuadamente una expresión. Es decir, escribir una palabra inexistente en VBA
    • Por omitir una expresión donde debería estar escrita
    • Por escribir una expresión en un lugar que no corresponde
  • Los errores lógicos. Estos errores son más bien de planteamiento del código, no de sintaxis. El código está bien escrito y no se producen errores que bloqueen la ejecución. Aunque el programa funciona, no realiza las funciones para las que se diseñó o las realiza de forma errónea.
  • Los errores en tiempo de ejecución. Estos son detectados por Excel cuando ya se está ejecutando el código y pueden ser motivados por múltiples causas. En cualquier caso, siempre hay algo en común: Excel no puede ejecutar la acción que nosotros pretendemos con el código porque se produce una incoherencia (el resultado es un error, una condición que nunca se cumple, un valor que es imposible de asignar, un límite sobrepasado, etc.)



En la imagen anterior, vemos un error en tiempo de ejecución. Concretamente, Excel no ha podido encontrar el archivo que el código solicitaba abrir. En adelante, en este post, nos referiremos a este último tipo de errores (los errores en tiempo de ejecución).

¿Qué podemos hacer ante la posibilidad de que se produzca un error en la ejecución de nuestro código?

En Visual Basic tenemos la instrucción "On Error" para decidir lo que queremos que ocurra si se produjera un error en nuestro código. Tenemos 3 opciones para complementar la instrucción "On Error":
  • On error Resume Next (traducido sería: si hay un error, reanudar el código en la siguiente línea). Con esta opción, cuando se detecta el error, no aparece ningún cuadro de diálogo para "Finalizar" o "Depurar". La ejecución continua en la siguiente línea de código. Podemos ver un ejemplo aquí:
  • On Error GoTo MiEtiqueta (traducido sería: si hay un error, ir a MiEtiqueta). Con esta opción, al detectarse un error, obligamos a que la ejecución de código continúe en una línea marcada por nosotros con una etiqueta*. De esta forma y a continuación de esa etiqueta, podemos escribir un código que se ejecute en el caso de existencia de error:

Vemos en el ejemplo anterior que, en caso de error (al no encontrar el archivo Libro2.xlsm), enviamos la ejecución a la etiqueta ControlErrores para que se ejecute el código a partir de ahí (un MsgBox).

(*) Las etiquetas pueden ser textos (sin espacios), pero también pueden ser números (excepto el 0 (cero)). En el siguiente punto de este artículo quedará explicado por qué no se debe poner un cero como etiqueta..
Cuando nombramos una etiqueta después de las instrucciones "On Error GoTo ...." , la etiqueta no debe llevar dos puntos al final, pero al etiquetar la linea (a la que enviamos la ejecución del código), la etiqueta SÍ debe llevar dos puntos al final (ver imagen anterior).

Es conveniente utilizar una instrucción Exit Sub antes del control de errores (que se suele colocar al final del procedimiento) para evitar que sea leído el código si no es necesario (si no existe error). Por ejemplo:


  • On Error Goto 0 (traducido sería: si hay un error, deshabilitamos el control de errores). Con esta opción, si habíamos utilizado en el procedimiento la instrucción "On Error..." quedará deshabilitada y los errores de nuevo bloquearán Excel si se producen. 

         En la imagen de arriba vemos como se produce un error, puesto que "On Error GoTo 0" deshabilita el anterior "On Error GoTo ControlErrores"

          Es importante resaltar que "On Error.." habilita el control de errores sólo para un ámbito de procedimiento. En otras palabras:
    • Cuando se termina de ejecutar un procedimiento, termina el efecto de "On Error"
    • "On Error..." utilizado en un procedimiento x , no afecta a ningún otro procedimiento.
  • On Error Goto -1 (traducido sería: si hay un error, se reinicia la posibilidad de detectar y controlar un error)**. Es necesario saber que si en un momento dado hay una instrucción "On Error.." controlando un error (está en pleno trabajo)... si ocurriera otro error en ese instante, no podría ser controlado. Para restablecer "On Error..."  y que pueda volver a detectar errores (quede libre de trabajo), se utiliza On Error GoTo -1.
** Es importante tener en cuenta la diferencia entre "On Error GoTo 0" y "On Error GoTo -1":
  • "On Error GoTo 0", se utiliza para dejar de detectar errores
  • "On Error GoTo -1", se utiliza para volver a detectar errores, durante el control de un error
¿Cómo puedo comprobar si hay un error en algún rango o expresión y decidir lo que ocurrirá después?

También podemos controlar el comportamiento de Visual Basic en el caso de que se produzca un error, de otra forma distinta a las ya conocidas. Es el caso de la función de comprobación IsError. La forma de utilizarla es:
IsError(expresión)

Veamos un ejemplo en este fragmento de código:


Podemos apreciar como, después de declarar la variable "Edad" y de asignarle como valor lo introducido en un cuadro de entrada de datos (InputBox), el código comprueba...:
  1. Con una estructura condicional If...Then...Else, si la edad es < 18
  2. Con la función de comprobación IsError, si la variable contiene un error (este se podría producir si el usuario no introduce un número, pues la variable se declaró como numérica)


Si desea llevar a la práctica todo lo que le hemos ofrecido en este artículo, puede asistir a nuestros cursos prácticos de Excel o puede solicitarlos in company: