El lector Boris me consulta:
En una celda con datos tipo lista tengo 2 opciones: Factura, Boleta. ¿Es posible hacer una formula con la función SI, para definir el área de impresión, dependiendo de esas dos opciones?
Una vez más aclaremos que las funciones sólo saben hacer cálculos; no podemos hacer cambios estructurales en la hoja o el cuaderno con funciones.
Sin embargo sí podemos definir el rango del área de impresión basándonos en el valor de una celda. Lo haremos usando la técnica que mostré en la nota sobre área de impresión dinámica en Excel sin macros.
El truco consiste en usar nombres. Supongamos que definimos dos rango a imprimir: Area_1 y Area_2
Lo que hemos llamado Area_1 o Area_2 en el ejemplo puede ser factura y recibo o escenario 1 y escenario 2, etc.
Definimos cada uno de los rangos con nombres
El próximo paso es definir una lista desplegable sencilla con validación de datos y ponerla en una celda donde el usuario pueda elegir el rango a imprimir
El último paso es modificar la definición del nombre Area_de_impresion . Esto lo haremos con el asistente de nombres. En la definición del nombre predefinido "Area_de_impresión" ponemos la fórmula
=INDIRECTO(Hoja1!$C$2)
Si al abrir el Administrador de nombres "Área _de_impresión" no aparece, podemos crearlo definiendo un rango arbitrario en "Área de impresión" del menú Configurar página.
La fórmula =INDIRECTO(Hoja1!$C$2) traduce el texto que aparece en la celda C2, donde hemos puesto la lista desplegable, por el rango definido por el nombre que coincide con el valor de la celda.
Este video muestra el funcionamiento
Sugerencias y ayuda para Excel en español. Ejemplos de funciones y fórmulas, gráficos, automatización con Vba, Power Query y PowerPivot
viernes, octubre 22, 2010
viernes, octubre 15, 2010
Impedir ingreso de fórmulas en celdas de Excel
Excel viene provisto con un mecanismo para controlar el tipo de datos permitidos en un rango: Validación de datos. La herramienta controla el tipo de datos ingresado, es decir, constantes (números, fechas, texto), pero no evitará que el usuario ingrese una fórmula en el rango validado.
Este problema se me presentó cuando estaba desarrollando un formulario para ingresar datos de gastos
Este tipo de formularios basados en hojas de Excel requieren poco esfuerzo para construirlos. Los valores permitidos para cada uno de los campos están controlados con Validación de datos; los botones en la parte inferior permiten pasar los datos a otra hoja que hace las veces de base de datos; las filas y columnas innecesarias están simplemente ocultas.
El problema es que validación de datos no impide que una fórmula sea ingresada en las celdas de la columna Monto
Para evitar esto tenemos que usar un evento. En el módulo de la hoja correspondiente ponemos este código
Private Sub Worksheet_Change(ByVal Target As Range)
If Union(Target, Range("rngMonto")).Address = Range("rngMonto").Address Then
If Target.HasFormula Then
Target.ClearContents
MsgBox "Solo valores, no formulas!"
End If
End If
End Sub
Al introducir un valor en el rango Monto, se dispara el código que evalúa si se trata de una fórmula con la propiedad HasFormula. En caso positivo el contenido de la celda (target) es borrado y aparece el mensaje informando que no está permitido introducir fórmulas.
Este video muestra el funcionamiento de la validación
Este problema se me presentó cuando estaba desarrollando un formulario para ingresar datos de gastos
Este tipo de formularios basados en hojas de Excel requieren poco esfuerzo para construirlos. Los valores permitidos para cada uno de los campos están controlados con Validación de datos; los botones en la parte inferior permiten pasar los datos a otra hoja que hace las veces de base de datos; las filas y columnas innecesarias están simplemente ocultas.
El problema es que validación de datos no impide que una fórmula sea ingresada en las celdas de la columna Monto
Para evitar esto tenemos que usar un evento. En el módulo de la hoja correspondiente ponemos este código
Private Sub Worksheet_Change(ByVal Target As Range)
If Union(Target, Range("rngMonto")).Address = Range("rngMonto").Address Then
If Target.HasFormula Then
Target.ClearContents
MsgBox "Solo valores, no formulas!"
End If
End If
End Sub
Al introducir un valor en el rango Monto, se dispara el código que evalúa si se trata de una fórmula con la propiedad HasFormula. En caso positivo el contenido de la celda (target) es borrado y aparece el mensaje informando que no está permitido introducir fórmulas.
Este video muestra el funcionamiento de la validación
viernes, octubre 08, 2010
Mostrar los criterios de Autofiltro en una celda
Una de las funcionalidades más populares de Excel es el Autofiltro. Con esta herramienta podemos filtrar una tabla de acuerdo criterios lógicos aplicados a los valores de una o más columnas de la tabla.
Un lector me consulta cómo se puede hacer para que el criterio aplicado aparezca en una celda por encima del encabezamiento de la columna. Por ejemplo, partiendo de esta lista
ver en las celdas correspondientes de fila 2 los criterios aplicados para filtrar la lista
Como puede verse, estamos usando una función definida por el usuario (UDF).
Esta función fue desarrollada por el guru de Excel Stephen Bullen.
Para poder usar esta función tenemos que poner este código en un módulo común del editor de Vba, preferentemente en el Personal.xlsb (Personal.xls en Excel 97-2003)
Function FilterCriteria(Rng As Range) As String
'By Stephen Bullen
Dim Filter As String
Application.Volatile True
Filter = ""
On Error GoTo Finish
With Rng.Parent.AutoFilter
If Intersect(Rng, .Range) Is Nothing Then GoTo Finish
With .Filters(Rng.Column - .Range.Column + 1)
If Not .On Then GoTo Finish
Filter = .Criteria1
Select Case .Operator
Case xlAnd
Filter = Filter & " y " & .Criteria2
Case xlOr
Filter = Filter & " o " & .Criteria2
End Select
End With
End With
Finish:
FilterCriteria = Filter
End Function
Esta función utiliza un único argumento, "Rng", que es cualquier celda de la columna sobre se aplica el Autofiltro.
Hay que tener en cuenta que esta función fue desarrollada antes de la aparición de Excel 2007. Por ejemplo, si elegimos más de dos criterios en una misma columna, por ejemplo ver las zonas Norte, Sur y Oeste, la función no podrá mostrar el criterio aplicado
Tip: en Excel 2007, al apuntar con el mouse al icono del autofiltro podemos ver una ventanilla que nos muestra los criterios aplicados (como en la imagen de arriba).
Un lector me consulta cómo se puede hacer para que el criterio aplicado aparezca en una celda por encima del encabezamiento de la columna. Por ejemplo, partiendo de esta lista
ver en las celdas correspondientes de fila 2 los criterios aplicados para filtrar la lista
Como puede verse, estamos usando una función definida por el usuario (UDF).
Esta función fue desarrollada por el guru de Excel Stephen Bullen.
Para poder usar esta función tenemos que poner este código en un módulo común del editor de Vba, preferentemente en el Personal.xlsb (Personal.xls en Excel 97-2003)
Function FilterCriteria(Rng As Range) As String
'By Stephen Bullen
Dim Filter As String
Application.Volatile True
Filter = ""
On Error GoTo Finish
With Rng.Parent.AutoFilter
If Intersect(Rng, .Range) Is Nothing Then GoTo Finish
With .Filters(Rng.Column - .Range.Column + 1)
If Not .On Then GoTo Finish
Filter = .Criteria1
Select Case .Operator
Case xlAnd
Filter = Filter & " y " & .Criteria2
Case xlOr
Filter = Filter & " o " & .Criteria2
End Select
End With
End With
Finish:
FilterCriteria = Filter
End Function
Esta función utiliza un único argumento, "Rng", que es cualquier celda de la columna sobre se aplica el Autofiltro.
Hay que tener en cuenta que esta función fue desarrollada antes de la aparición de Excel 2007. Por ejemplo, si elegimos más de dos criterios en una misma columna, por ejemplo ver las zonas Norte, Sur y Oeste, la función no podrá mostrar el criterio aplicado
Tip: en Excel 2007, al apuntar con el mouse al icono del autofiltro podemos ver una ventanilla que nos muestra los criterios aplicados (como en la imagen de arriba).
Suscribirse a:
Entradas (Atom)