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"
Sugerencias y ayuda para Excel en español. Ejemplos de funciones y fórmulas, gráficos, automatización con Vba, Power Query y PowerPivot
jueves, agosto 22, 2013
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).
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:
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
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
Suscribirse a:
Entradas (Atom)