Calendario mensual dinámico con una sola fórmula
Un miembro de la comunidad preguntó cómo generar un calendario mensual completo en Excel usando únicamente fórmulas, sin VBA ni macros. El calendario debe mostrar los días del mes organizados por semanas (lunes a domingo), con encabezados de día, y adaptarse automáticamente al cambiar el mes y el año.
La primera propuesta usa LET + SECUENCIA con una matriz de 6×7 y un offset basado en DIASEM:
``
=LET(
año, A1,
mes, B1,
primerDia, FECHA(año, mes, 1),
ultimoDia, FECHA(año, mes + 1, 0),
diasMes, DIA(ultimoDia),
diaSemana, DIASEM(primerDia, 2),
offset, SI(diaSemana = 7, 0, diaSemana),
secuencia, SECUENCIA(6, 7) - offset,
calendario, SI((secuencia >= 1) (secuencia <= diasMes), secuencia, ""),
encabezados, {"D","L","M","M","J","V","S"},
APILARV(encabezados, calendario)
)
`
Leo propuso una versión más compacta con TEXTO, BYROW y FILTRAR para eliminar filas vacías automáticamente:
`
=LET(f,FECHA(A1,B1,1),d,SECUENCIA(6,7,f-DIASEM(f,1)+1),dd,TEXTO(SI(MES(d)=B1,d,""),"d"),APILARV(NOMPROPIO(TEXTO(SECUENCIA(,7),"ddd")),FILTRAR(dd,BYROW(1dd,CONTAR))))
`
Y la solución más avanzada, también de Leo, usa PIVOTARPOR para pivotar las fechas por número de semana:
`
=LET(a,A1,m,B1,i,FECHA(a,m,1),s,SECUENCIA(DIA(FIN.MES(i,0)),,i),EXCLUIR(PIVOTARPOR(NUM.DE.SEMANA(s),APILARH(DIASEM(s),TEXTO(s,"ddd")),TEXTO(s,"dd"),SINGLE,,0,,0),1,1))
`
Funciones utilizadas: LET, SECUENCIA, APILARV, FECHA, DIASEM, TEXTO, BYROW, FILTRAR, PIVOTARPOR, FIN.MES, EXCLUIR, NUM.DE.SEMANA`.
El problema: un calendario mensual solo con fórmulas
Generar un calendario mensual en Excel —días organizados por semanas de lunes a domingo, con cabeceras, que se recalcule solo al cambiar mes y año— parece territorio de VBA. Pero la comunidad demostró que se puede hacer solo con fórmulas dinámicas, y hasta de tres maneras distintas, cada una más compacta que la anterior.
Enfoque 1: SECUENCIA con offset y DIASEM
La primera propuesta parte de una cuadrícula de 6x7 (seis semanas posibles, siete días) y desplaza el arranque según el día de la semana del día 1:
=LET(
año; A1; mes; B1;
primerDia; FECHA(año; mes; 1);
ultimoDia; FECHA(año; mes + 1; 0);
diasMes; DIA(ultimoDia);
diaSemana; DIASEM(primerDia; 2);
offset; SI(diaSemana = 7; 0; diaSemana);
secuencia; SECUENCIA(6; 7) - offset;
calendario; SI((secuencia >= 1) * (diasMes >= secuencia); secuencia; "");
APILARV(encabezados; calendario)
)SECUENCIA(6;7) crea los números del 1 al 42; al restar el offset (la posición del primer día) se alinea el 1 del mes en su casilla correcta. El SI con la doble condición deja en blanco todo lo que se sale del mes, y APILARV pega la fila de cabeceras (encabezados, con las iniciales D L M M J V S) encima.
Enfoque 2: la versión compacta de Leo
Leo comprimió todo en una línea usando TEXTO, BYROW y FILTRAR para eliminar las filas sobrantes automáticamente:
=LET(f;FECHA(A1;B1;1);d;SECUENCIA(6;7;f-DIASEM(f;1)+1);dd;TEXTO(SI(MES(d)=B1;d;"");"d");APILARV(NOMPROPIO(TEXTO(SECUENCIA(;7);"ddd"));FILTRAR(dd;BYROW(1*dd;CONTAR))))Aquí SECUENCIA(6;7;...;1) genera las fechas reales arrancando en el lunes anterior al día 1. TEXTO(...;"d") pinta el número de día solo si pertenece al mes buscado, y FILTRAR con BYROW(...;CONTAR) descarta las semanas que quedan totalmente vacías. Las cabeceras salen de TEXTO(SECUENCIA(;7);"ddd") con NOMPROPIO, sin escribirlas a mano.
Enfoque 3: PIVOTARPOR por número de semana
La versión más avanzada, también de Leo, trata las fechas como datos y las pivota por número de semana:
=LET(a;A1;m;B1;i;FECHA(a;m;1);s;SECUENCIA(DIA(FIN.MES(i;0));;i);EXCLUIR(PIVOTARPOR(NUM.DE.SEMANA(s);APILARH(DIASEM(s);TEXTO(s;"ddd"));TEXTO(s;"dd");SINGLE;;0;;0);1;1))NUM.DE.SEMANA(s) agrupa las fechas por semana (las filas), DIASEM(s) las coloca en su columna de lunes a domingo, y PIVOTARPOR monta la rejilla. EXCLUIR(...;1;1) quita las cabeceras autogeneradas para dejar el calendario limpio.
Funciones clave
SECUENCIA: genera la rejilla de días o el rango de fechas del mes.DIASEM/NUM.DE.SEMANA: sitúan cada fecha en su columna y su semana.FIN.MES/DIA: calculan cuántos días tiene el mes.FILTRAR+BYROW: eliminan las semanas vacías.PIVOTARPOR/EXCLUIR: pivotan las fechas y recortan cabeceras.
Conclusión
Tres formas de pensar el mismo calendario: una aritmética (SECUENCIA con offset), una compacta (TEXTO + FILTRAR) y una relacional (PIVOTARPOR por semana). Ninguna necesita una sola línea de VBA. Es un ejemplo perfecto de cómo las matrices dinámicas de Excel moderno convierten en fórmula lo que antes pedía una macro. De estos retos salen varios cada semana en la comunidad de InflueXcel.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Filtrar filas con todos los valores a cero: 4 enfoques con FILTRAR y BYROW CasoJuan tiene una tabla grande donde muchas filas contienen solo ceros y necesita filtrarlas para quedarse solo con las que tienen datos reales
- Consolidar datos repetidos con REDUCE, APILARV y PIVOTARPOR CasoLa comunidad aborda un caso de consolidación de datos donde hay tareas con encabezados repetidos que necesitan combinarse dinámicamente. El
- Del VBA a una sola fórmula: calcular el RFC mexicano con LET, MAP y expresiones regulares CasoHéctor llega al grupo con un problema que no se ve todos los días: tiene resuelto el cálculo del RFC mexicano, pero lo tiene en VBA, y quier
- Saldo acumulado por mes: tres enfoques (REDUCE+BYROW, PIVOTARPOR+acumulado, MMULT) CasoJuan plantea una pregunta que parece sencilla y se acaba convirtiendo en tres clases magistrales sobre cómo recorrer una matriz mes a mes. T
- Reestructurar datos apilados con LAMBDA y PIVOTARPOR CasoUn miembro de la comunidad comparte un archivo de revisión de Seguridad Social con una tabla amplia (34 columnas x 1540 filas) en formato "a
- Consolidar múltiples hojas con APILARV, referencias 3D y FILTRAR CasoFito necesita consolidar varias hojas de Excel que comparten la misma cabecera pero tienen distinto número de filas con datos de gastos de v
- Funciones personalizadas en Excel: LET, LAMBDA y recursividad TutorialCómo pasar de una fórmula escrita a mano a una función propia que puedes llamar por su nombre en cualquier libro. Los tres vídeos de esta pá
- FILTRAR en Excel: las 5 dudas más buscadas, resueltas (y una extra: filtrar entre fechas) TutorialLe preguntamos a Copilot cuáles son las 5 dudas que más se buscan sobre FILTRAR y las resolvemos una a una en Excel, cada una con un truco e
- Filtrar con múltiples condiciones usando matrices booleanas y BYROW CasoInteresante problema planteado por un miembro sobre cómo filtrar datos que cumplan varias condiciones simultáneas usando operaciones matrici
- Búsqueda multicriterio de productos con LAMBDA para manejar campos vacíos CasoHéctor Mendoza comparte una fórmula compleja para buscar productos en una tabla (tblProductoServicio) usando hasta 3 criterios opcionales: c