lunes, enero 18, 2016

Extraer números de cadenas de texto

Hace ya varios años atrás publiqué un post mostrando técnicas para extraer números o letras de cadenas alfanuméricas. A pesar del tiempo transcurrido sigo recibiendo consultas, en particular sobre cómo extraer valores numéricos de cadenas de texto. En el post mencionado mostraba como extraer todos los valores numéricos (o todas las letras), pero muchos lectores consultan sobre cómo extraer algún número en particular.
En este post veremos tres funciones UDF (funciones definidas por el usuario) útiles para ese tipo de tareas.

Función para extraer el primer número de una cadena alfanumérica

Esta función tiene un único argumento, la celda que contiene la cadena de texto de donde queremos extraer el número.



Function ext_primer_num(celda As Range)
    Dim iX As Integer, resultado As String, temp As String

    For iX = 1 To Len(celda)
        temp = Mid(celda, iX, 1)
        If IsNumeric(temp) Then
        resultado = resultado & temp
        End If
    Next iX
  
        ext_primer_num = CDec(Left(resultado, 1))
  
End Function


Función para extraer el último número de una cadena alfanumérica

Como la anterior esta función tienen como único argumento la celda que contiene la cadena de texto.



Function ext_ultimo_num(celda As Range)
    Dim iX As Integer, resultado As String, temp As String

    For iX = 1 To Len(celda)
        temp = Mid(celda, iX, 1)
        If IsNumeric(temp) Then
        resultado = resultado & temp
        End If
    Next iX
  
        ext_ultimo_num = CDec(Right(resultado, 1))
  
End Function



Función para extraer un número número de una cadena alfanumérica

Esta función tiene dos argumentos: la celda que contiene la cadena de texto y el número de orden del valor numérico a extraer.

En este ejemplo ponemos en la celda C2 el número de orden buscado (en nuestro caso, el tercer valor numérico en la cadena). En la celda C10 obtenemos el error #¡VALOR! ya que la cadena contiene sólo dos valores numéricos.

Function ext_num(celda As Range, num_orden As Integer)
    Dim iX As Integer, resultado As String, temp As String

    For iX = 1 To Len(celda)
        temp = Mid(celda, iX, 1)
        If IsNumeric(temp) Then
        resultado = resultado & temp
        End If
    Next iX
  
        ext_num = CDec(Mid(resultado, num_orden, 1))
  
End Function


Recordemos que para poder usar estas funciones debemos copiar el código a un módulo común del editor de Vba. Podemos guardarlas en el cuaderno donde queremos usarlas o en el Personal, para que estén disponibles para todos los cuadernos.

lunes, enero 11, 2016

Gráficos Excel - hacer que el eje horizontal cruce por el mínimo del vertical

Después de casi  un mes de descanso (vacaciones, fiestas, un poco más de vacaciones), vuelvo a la carga con una nota sencilla pero que espero resulte útil.

Supongamos este gráfico


Por definición Excel ubica el eje de las catergorías (el eje horizontal, X) de manera que cruza el eje de los valores (el vertical, Y) en el cero.
Como tenemos valores negativos, éstos aparecen por debajo dell eje de las categorías. En ciertos casos, en particular si tenemos un gráfico con muchos datos, podemos querer que el eje de las X cruce el eje de las Y por el valor mínimo de éste último, es decir, ubicarlo en la base del gráfico.

Para definir la ubicación del eje de las X tenemos que abrir el menú de formato del eje de las Y

pero vemos que si bien podemos definir que el eje horizontal cruce por el valor máximo del eje de las Y, la posibilidad opuesta, que cruce por el mínimo, no existe.

La solución es sencilla: en la ventanilla "Valor del Eje" ponemos un valor mucho más pequeño que el menor de los valores de la serie


Si queremos visualizar la línea del cero, para resaltar los valores que caen por debajo, podemos agregar una serie auxiliar a nuestro gráfico

También podemos lograr este efecto


Seleccionando la serie auxiliar y cambiando el tipo de gráfico a Área y cambiando la definición de la posición del eje de las X a "En marcas de graduación"




viernes, diciembre 18, 2015

Formato condicional con iconos - Algunos trucos

Supongamos una tabla que muestra las ventas de cada mes. Podemos aplicar formato condicional con iconos para enfatizar si las ventas del mes fueron mayores o menores que la del mes anterior

En la tabla vemos con claridad que las ventas de febrero superaron las de enero y que en abril se vendió menos que en marzo.
Mis astutos lectores ya habrán descubierto que los iconos no están en la columa C, donde aparecen los datos de ventas, sino en la columna contigua D.
Si seleccionamos la celda D4, veremos que ésta contiene la fórmula ="C4-C3"


Sobre el resultado de la celda aplicamos el formato condicional


Hemos aplicado "Mostrar icono únicamente", para ocultar los resultados de las celda en la columna D y así crear la ilusión que los iconos están en la columna C.

Una variante interesante es si queremos que sólo aparezcan las flechas rojas en los meses en que las ventas fueron menores que en el anterior. En ese caso usaremos una opción poco utilizada del formato condicional.

Abrimos las definiciones del formato condicional del ejemplo anterior y agregamos una nueva regla


Como puede apreciarse usamos la opción "Utilice una fórmula..." y no definimos formato. Al apretar "Aceptar" veremos este cuadro


Como ven hemos señalado la opción "Detener si es verdad" (también nos aseguramos que esta regla aparezca en primer lugar). Al apretar "Aceptar" obtenemos

Lamentablemente la opción "Utilice una fórmula..." no tiene la opción "Mostrar icono únicamente", lo cual es bastante obvio (esta opción no tiene iconos). Para superar este inconveniente definimos el color de la fuente en las celdas de manera que coincida con el fondo