Recibí esta consulta: dado un rango de valores, ¿cómo hacer para sumar los valores de cada quinta fila con Excel?
Supongamos estos valores en el rango A1:A20
Esta fórmula suma cada quinto valor en el rango
=SUMAPRODUCTO((RESIDUO(FILA(A1:A20),5)=0)*A1:A20)
Podemos generalizar la fórmula reemplazando la constante 5 de la función RESIDUO por una referencia a una celda
=SUMAPRODUCTO((RESIDUO(FILA(A1:A20),D1)=0)*A1:A20)
Podemos cambiar el valor de D1 para ver el resultado de sumar cada n filas
Esta fórmula funciona de la siguiente manera:
RESIDUO(FILA(A1:A20),D1)=0 da como resultado VERDADERO sólo si el número de fila es múltiplo de 5 (o el número que hayamos ingresado en D1)
Luego al multiplicar los valores de la serie por los correspondientes valores VERDADERO o FALSO obtenemos
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, diciembre 30, 2010
lunes, diciembre 13, 2010
Autofiltro de campos en tablas dinámicas
Supongamos esta tabla dinámica (basada en la tabla de facturas de la base de datos Northwind que viene con Office)
Si queremos mostrar sólo los datos de un determinado intervalo (digamos entre el 15/08/2008 y el 15/09/2008) podemos desplegar la lista de fechas y elegir las fechas una por una
Pero como estamos usando Excel 2007, la tarea es mucho más fácil. Sencillamente usamos la opción Filtros de fecha-Entre…
Como podemos ver, las posibilidades de filtrar por criterios de fechas son múltiples
Lo mismo es válido si los valores del campo de filas son texto
En Excel 97-2003 no existen, aparentemente, estas posibilidades.
Digo aparentemente porque con un pequeño truco podemos replicar la funcionalidad de autofiltro en tablas dinámicas que existe en Excel 2007.
Seleccionamos la celda adyacente al borde derecho de la tabla dinámica en la fila de los encabezamientos (en nuestro ejemplo C4) y aplicamos Autofiltro con el menú Datos-Filtro-Autofiltro. El resultado es que el Autofiltro es aplicado a las columnas de la tabla dinámica
Ahora disponemos de la funcionalidad "Personalizar", con la cual podemos aplicar el filtro con criterios personalizados
Si queremos mostrar sólo los datos de un determinado intervalo (digamos entre el 15/08/2008 y el 15/09/2008) podemos desplegar la lista de fechas y elegir las fechas una por una
Pero como estamos usando Excel 2007, la tarea es mucho más fácil. Sencillamente usamos la opción Filtros de fecha-Entre…
Como podemos ver, las posibilidades de filtrar por criterios de fechas son múltiples
Lo mismo es válido si los valores del campo de filas son texto
En Excel 97-2003 no existen, aparentemente, estas posibilidades.
Digo aparentemente porque con un pequeño truco podemos replicar la funcionalidad de autofiltro en tablas dinámicas que existe en Excel 2007.
Seleccionamos la celda adyacente al borde derecho de la tabla dinámica en la fila de los encabezamientos (en nuestro ejemplo C4) y aplicamos Autofiltro con el menú Datos-Filtro-Autofiltro. El resultado es que el Autofiltro es aplicado a las columnas de la tabla dinámica
Ahora disponemos de la funcionalidad "Personalizar", con la cual podemos aplicar el filtro con criterios personalizados
martes, noviembre 16, 2010
Extraer las iniciales de un nombre con Excel
Uno de mis lectores me consulta cómo extraer las iniciales de un nombre. En la columna A tenemos una lista de nombres (empleados de una empresa, invitados a un acontecimiento, etc.) y en la columna B queremos obtener las iniciales
En esta nota presentaré dos soluciones, una basada en funciones y la segunda con una UDF (función definida por el usuario).
Solución con funciones
Empecemos por el final: la fórmulas es (respirar hondo) ésta
=ELEGIR(LARGO(A2)-LARGO(SUSTITUIR(A2," ",""))+1,IZQUIERDA(A2,1),IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1),IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1),IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",3))+1,1))
¿Cómo funciona esta fórmula?
La expresión
LARGO(A2)-LARGO(SUSTITUIR(A2," ",""))+1
calcula de cuantas palabras está compuesto el nombre. La primer función LARGO da la cantidad de caracteres en la celda, incluidos los espacios. La segunda función LARGO calcula la cantidad de caracteres sin los espacios. La diferencia entre ambas más 1, es el número de palabras.
De acuerdo a este valor, la función ELEGIR activa la expresión adecuada para extraer las iniciales.
La primer inicial será siempre la primer letra del nombre, lo que logramos con la fórmula IZQUIERDA(A2,1) . Este es el primer caso de la función ELEGIR.
Para encontrar la segunda inicial tenemos que encontrar donde comienza la segunda palabra. El truco aquí es reemplazar el primer espacio con un carácter especial (por ejemplo #). Para sustituir el primer espacio con el carácter # usamos
SUSTITUIR(A2," ","#",1)
Para hallar donde se encuentra este carácter en el nombre usamos
HALLAR("#",SUSTITUIR(A2," ","#",1))+1
Y finalmente, para extraer la inicial usamos
EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)
Ahora tenemos que concatenarlo con la primer inicial lo que hacemos con el operador &
IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)
Para el caso que el nombre tenga tres palabras usamos la misma fórmula concatenando a la anterior la expresión
EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1)
Quedando
IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1)
Para el caso de cuatro palabras en el nombre concatenamos a la expresión anterior
EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",3))+1,1)
Esta fórmula tiene algunas serias limitaciones:
Una función definida por el usuario nos proporciona una solución más flexible (y elegante, en mi opinión).
Solución con una UDF
En un módulo común del editor de Vba (preferentemente en el Personal.xls) ponemos este código
Option Explicit
Function Iniciales(strText As String)
Dim strLen As Long, iChr As Long
Dim strTemp As String
strLen = Len(strText)
For iChr = 1 To strLen
If Asc(Mid(strText, iChr, 1)) >= 65 And Asc(Mid(strText, iChr, 1))<= 90 Then
strTemp = strTemp & Mid(strText, iChr, 1)
End If
Next iChr
Iniciales = strTemp
End Function
Este código empieza por contar cuantos caracteres hay en la celda que contiene el nombre. Luego evalúa cada carácter y determina si es una letra mayúscula (Asc>=65 o Asc<=90). Si es mayúscula agrega el carácter a la variable strTemp. Al terminar la rutina, la función recibe el valor de strTemp.
En esta nota presentaré dos soluciones, una basada en funciones y la segunda con una UDF (función definida por el usuario).
Solución con funciones
Empecemos por el final: la fórmulas es (respirar hondo) ésta
=ELEGIR(LARGO(A2)-LARGO(SUSTITUIR(A2," ",""))+1,IZQUIERDA(A2,1),IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1),IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1),IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",3))+1,1))
¿Cómo funciona esta fórmula?
La expresión
LARGO(A2)-LARGO(SUSTITUIR(A2," ",""))+1
calcula de cuantas palabras está compuesto el nombre. La primer función LARGO da la cantidad de caracteres en la celda, incluidos los espacios. La segunda función LARGO calcula la cantidad de caracteres sin los espacios. La diferencia entre ambas más 1, es el número de palabras.
De acuerdo a este valor, la función ELEGIR activa la expresión adecuada para extraer las iniciales.
La primer inicial será siempre la primer letra del nombre, lo que logramos con la fórmula IZQUIERDA(A2,1) . Este es el primer caso de la función ELEGIR.
Para encontrar la segunda inicial tenemos que encontrar donde comienza la segunda palabra. El truco aquí es reemplazar el primer espacio con un carácter especial (por ejemplo #). Para sustituir el primer espacio con el carácter # usamos
SUSTITUIR(A2," ","#",1)
Para hallar donde se encuentra este carácter en el nombre usamos
HALLAR("#",SUSTITUIR(A2," ","#",1))+1
Y finalmente, para extraer la inicial usamos
EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)
Ahora tenemos que concatenarlo con la primer inicial lo que hacemos con el operador &
IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)
Para el caso que el nombre tenga tres palabras usamos la misma fórmula concatenando a la anterior la expresión
EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1)
Quedando
IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1)
Para el caso de cuatro palabras en el nombre concatenamos a la expresión anterior
EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",3))+1,1)
Esta fórmula tiene algunas serias limitaciones:
- Puede extraer iniciales para nombres de hasta cuatro palabras (si bien podemos agregar otras expresiones y adaptarla para cinco o más palabras en el nombre)
- En caso de nombres que incluyen "de", la función falla ya que no distingue entre minúsculas y mayúsculas
- Otro problema surge si entre las palabras del nombre hay más de un espacio.
Una función definida por el usuario nos proporciona una solución más flexible (y elegante, en mi opinión).
Solución con una UDF
En un módulo común del editor de Vba (preferentemente en el Personal.xls) ponemos este código
Option Explicit
Function Iniciales(strText As String)
Dim strLen As Long, iChr As Long
Dim strTemp As String
strLen = Len(strText)
For iChr = 1 To strLen
If Asc(Mid(strText, iChr, 1)) >= 65 And Asc(Mid(strText, iChr, 1))<= 90 Then
strTemp = strTemp & Mid(strText, iChr, 1)
End If
Next iChr
Iniciales = strTemp
End Function
Este código empieza por contar cuantos caracteres hay en la celda que contiene el nombre. Luego evalúa cada carácter y determina si es una letra mayúscula (Asc>=65 o Asc<=90). Si es mayúscula agrega el carácter a la variable strTemp. Al terminar la rutina, la función recibe el valor de strTemp.
Suscribirse a:
Entradas (Atom)