jueves, agosto 22, 2013

Cuando las flechas de validación de datos en Excel no aparecen

Cuando definimos en una celda validación de datos con la opción Lista, al seleccionarla aparece una flecha que permite desplegar la lista



¿Qué hacer cuando a pesar de haber definido todo correctamente la flecha no aparece al seleccionar la celda, como le sucedió a una de mis lectoras?

El "primer sospechoso" es que hayamos quitado la marca en "Celda con lista desplegable" en la definición de la validación de datos



Otra posibilidad es que hayamos activado la opción de ocultar objetos. Para comprobar esto podemos activar el "Panel de selección" en Diseño de página—Activar. En el panel podemos ver el estado del objeto (en esta animación "Drop Down 2)


También podemos revisar las definiciones de Excel en Archivo—Avanzadas



Si se ha seleccionado la opción Nada, todos los objetos serán invisibles, incluidas las flechas de validación de datos.

Finalmente, como con algunos gobiernos, existe la posibilidad de que se trate de un archivo corrupto. En este caso después de cerrar el archivo podemos abrirlo usando la opción "Abrir y reparar"


martes, agosto 20, 2013

Truco para consolidar datos de varias hojas Excel

Excel permite la creación de rangos tridimensionales, tal como mostré en el pasado (apretar el enlace para ver la nota). Un rango tridimensional es aquel que se extiende a más de una hoja. En este ejemplo tenemos un cuaderno con cinco hojas (ya he señalado que separa datos de esta manera es una mala práctica pero a los efectos del ejemplo ignoraré mis propias recomendaciones).




Las hojas "Ventas…" contienen los totales de ventas de cada sucursal para cada año; en la hoja "Totales" queremos consolidar el valor de la celda B6 de todas las hoja de ventas



En lugar de la técnica que mostré en la nota mencionada más arriba, podemos usar este truco:

En la celda C3 de la hoja Totales introducimos =SUMA('*'!B6)



Al cerrar el paréntesis y apretar Enter, Excel lo transforma en

=SUMA('Ventas 2009:Ventas 2012'!B6)



Como puede apreciarse, todas las hojas del cuaderno, excepto la activa, son incluidas en el rango tridimensional.

Ahora supongamos que el cuaderno contiene también hojas para los costos de ventas, con la misma estructura (los totales en la celda B6). Para que estas hojas no aparezcan en la fórmula podemos condicionar el comodín con un criterio, por ejemplo

=SUMA('Ventas*'!B6



Esta técnica no está limitada a una única celda. Podemos usar, por ejemplo,

=SUMA('Ventas*'!B2:B5

Tampoco está limitada a la función SUMA (la lista de funciones puede verse en la nota ya mencionada).

domingo, agosto 18, 2013

Convertir fórmulas en valores según criterio.

En ciertas situaciones en Excel tenemos que convertir fórmulas en constantes. Por ejemplo, si extraemos valores de un cuaderno remoto usando BUSCARV, y queremos eliminar las fórmulas para evitar errores involuntarios, reducir el peso del archivo o mejorar la velocidad de cálculo.

Ya hemos mostrado como usar Ir A-Especial para convertir seleccionar todas las celdas que contengan fórmulas. Una vez seleccionadas, usamos Copiar-Pegado Especial-Valores.

Pero, ¿qué hacemos cuando queremos convertir sólo las celdas que contienen una función específica? Por ejemplo, todas las celdas que contienen BUSCARV en este cuadro de ganancias. Los datos los extraemos de un archivo remoto usando BUSCARV.



Luego de extraer los valores queremos eliminar las fórmulas BUSCARV pero no las fórmulas con las que calculamos las ganancias en las filas 6, 9 ,11 y 13.

Una posibilidad sería usar buscar y reemplazar (Ctrl+L) – buscar todos, seleccionar todos los resultados y apretar cerrar. Como ya mostramos, Excel selecciona todos los valores; luego podemos usar Copiar, pero si intentamos usar Pegado Especial-Valores esto es lo que veremos



La solución es usar una macro.

Sub formula_to_number_with_criteria()
    Dim strStringCriteria As String
    Dim rngCell As Range
    Dim lCounter As Long
   
    If Selection.Count < 2 Then
        MsgBox "Debe seleccionar por lo menos dos celdas", vbInformation
        Exit Sub
    End If
   
    'criterio de busqueda
    strStringCriteria = Application.InputBox(prompt:="Enter formula identifier", _
                                                Title:="Indentifier", Type:=2)
                                               
    'si no se ingresa criterio se cierra la rutina
    If Len(strStringCriteria) = 0 Then
        MsgBox "No se ingreso ningun criterio - no se puede realizar la operacion", vbCritical
        Exit Sub
    End If
   
   
    lCounter = 0
    For Each rngCell In Selection
        If rngCell.HasFormula Then
            If InStr(1, rngCell.FormulaLocal, strStringCriteria) > 0 Then
                rngCell = rngCell.Value
                lCounter = lCounter + 1
            End If
        End If
    Next rngCell
   
    If lCounter = 0 Then
        MsgBox "No se encontro ninguna celda con el criterio", vbInformation
    Else
        MsgBox lCounter & " celdas fueron modificada", vbInformation
    End If
     
End Sub



Esta macro hace lo siguiente:


  • Comprueba que se hayan elegido por lo menos dos celdas
  • Abre un formulario para que el usuario ingrese el criterio de búsqueda
  • Busca todas las celdas en el rango seleccionado que cumplen con el criterio y reemplaza la fórmula por el valor
  • Al terminar las operaciones produce un mensaje con el número de celdas que se han modificado.


Un detalle a tomar en cuenta es el uso de la propiedad FormulaLocal. Esto es necesario para que el código vea la versión local de la función (BUSCARV en nuestro caso) y no la versión nativa (inglés, VLOOKUP).
Podemos comprobar esto usando la ventana Inmediate del editor de Vba