动态每月 Excel 日历

动态每月 Excel 日历

我想创建一个月历(每张表 1 个月),其中只有年份可以更改(日期也是如此)。我的日历模板已经创建好了。我想要的只是添加一个公式,当我更改年份时,它会根据星期几更改日期。一周从星期日开始

谢谢 !

答案1

这是我的想法。根据需要调整说明以适合您自己的模板。


指示

  1. 将 A1 设置为您想要表示的月份的年份值。
    • 对于这篇文章的第一次修订日期,应该是“2015”。
  2. 将 A2 设置为您想要表示的月份的全名。
    • 对于这篇文章的第一次修订日期,应该是“五月”。
  3. 在 A3:G3 中填写星期几,从 A3 中的“星期日”开始,到 G3 中的“星期六”结束。
  4. 在A4中输入以下公式:=IF(WEEKDAY(DATEVALUE(CONCATENATE($A$2," 1, ",$A$1)))=1,1,"")
    • 根据月份/年份,此公式可能会在此处返回空白值。(对于 2015 年 5 月,它将返回空白值。)这是正常的。
  5. 在B4中输入以下公式:=IF(A4="",IF(WEEKDAY(DATEVALUE(CONCATENATE($A$2," 1, ",$A$1)))=COLUMNS($A$4:B4),1,""),A4+1)
    • 根据月份/年份,此公式可能会在此处返回空白值。(对于 2015 年 5 月,它将返回空白值。)这是正常的。
  6. 将公式从 B4 复制到单元格 C4:G4。Excel 应根据需要自动调整公式中的单元格引用。
    • 此时,公式应在第 4 行的其中一个单元格中计算结果为“1”,并且其后的每个单元格都应返回比前一个单元格更高的增量。“1”之前的单元格应为空白。对于 2015 年 5 月,您应该在 A4:E4 中看到空白,在 F4(星期五)中看到“1”,在 G4(星期六)中看到“2”
  7. 在A5中输入以下公式:=IF(ISERROR(DATEVALUE(CONCATENATE($A$2," ",G4+1,", ",$A$1))),"",G4+1)
    • 公式结果应该比G4的值大一。
  8. 将 A5 中的公式复制到单元格 A6:A9 中。Excel 应根据需要自动调整公式中的单元格引用。
    • A6:A9 目前将计算为空白。这是正常的。
  9. 在 B5 中输入以下公式:=IF(ISERROR(DATEVALUE(CONCATENATE($A$2," ",A5+1,", ",$A$1))),"",A5+1)
    • 公式结果应该比A5的值大一。
  10. 将 B5 中的公式复制到单元格 C5:G5。Excel 应根据需要自动调整公式中的单元格引用。
    • 第 5 行中的公式现在应计算为一组从 A 列到 G 列逐步增加的数字。
  11. 选择 B5:G5 并将这些单元格复制到 B6:G9。Excel 应根据需要自动调整公式中的单元格引用。
    • 此时,日历应根据给定月份适当填充。每月第一天之前和最后一天之后的单元格应为空白。
    • 对于某些月份,例如 2015 年 1 月,第 9 行将完全空白。这是正常现象。

功能

  • 连接将文本字符串连接在一起。
  • 日期值返回文本字符串所表示日期的 Excel“序列号”值。如果字符串与已知日期格式不匹配,或者字符串不代表实际日期(例如:“2015 年 1 月 32 日”或“2015 年 2 月 29 日”),它将返回错误。
  • 工作日返回一个从 1 到 7 的值,代表给定日期的星期几。
  • 返回指定单元格数组所跨越的列数。
  • 如果允许您根据指定公式的计算结果为 TRUE 还是 FALSE 返回所选值(或公式结果)。
  • 错误如果给定的公式导致错误,则返回 TRUE,如果公式未产生错误,则返回 FALSE。

公式解释

  • A4汇总 A1 和 A2 中的信息以生成表示月份第一天的文本字符串。(例如:“2015 年 5 月 1 日”。)然后,检查该日期的星期几是否为星期日。如果是星期日则返回 1,如果不是则返回空白。

  • B4:G4检查前一个单元格是否为空。如果不是,则返回比前一个单元格大一个的值。如果前一个单元格为空,则检查当前星期几是否与给定月份的第一天匹配 - 如果是,则返回 1,如果不是,则返回空白。

  • A5:A9将前一行末尾的值加 1,然后将结果与 A1 和 A2 中的信息相结合以形成日期字符串。检查日期是否确实存在。如果存在,则返回月份日期数字,如果不存在,则返回空白。

  • B5:G9将前一个单元格的值加 1,然后将结果与 A1 和 A2 中的信息相结合以形成日期字符串。检查日期是否确实存在。如果存在,则返回月份日期数字,如果不存在,则返回空白。


截屏

2015 年 5 月的示例输出。

在此处输入图片描述

答案2

New Workbook从模板创建。Calendar sunday搜索字符串。

“日历星期日”搜索字符串

选择天区域并按下菜单Manage Rules中。Conditional Formatting

编辑 Excel 格式规则菜单

添加New Rule

Excel 规则格式对话框

添加规则相等=TODAY()

Excell 添加格式规则等于“=TODAY()”

结果:

Excel 格式规则 日历结果

答案3

在指定的单元格中输入以下项目:

A1:2015 B1:第一天 C1:=DATEVALUE(A1&"-"&A2&"-01")
A2:5 B2:星期天 C2:=C1-WEEKDAY(C1;2)

C4:=TEXT(COLUMNS($A$4:A4);"Ddd")
C5:=IF(TEXT($C$2-1+COLUMNS($A$4:A4)+(ROWS($A$4:A4)-1)*7;"YYYY-MM")=TEXT($C$1;"YYYY-MM");$C$2-1+COLUMNS($A$4:A4)+(ROWS($A$4:A4)-1)*7;"")

然后复制 C4 和 C5 以填充七 (7) 个单元格宽度。
然后复制第 7 行以填充总共六 (6) 行。
选择最后 6 行中的单元格并按CTRL+ 1,单击左侧面板上的自定义并输入单个D自定义格式。

结果将如下所示:

2015第一天 2015-05-01              
5 周-周日 2015-04-26              

周日 周一 周二 周三 周四 周五 周六
                    1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31                      

这将在 Excel、LibreOffice 以及任何其他电子表格中发挥作用。

答案4

Linux:

打开终端,然后输入:

ncal 2015并按ENTER(在$提示时)。

输出将如下所示:

                                  2015
    January           February          March             April             
Su     4 11 18 25     1  8 15 22        1  8 15 22 29        5 12 19 26   
Mo     5 12 19 26     2  9 16 23        2  9 16 23 30        6 13 20 27   
Tu     6 13 20 27     3 10 17 24        3 10 17 24 31        7 14 21 28   
We     7 14 21 28     4 11 18 25        4 11 18 25        1  8 15 22 29   
Th  1  8 15 22 29     5 12 19 26        5 12 19 26        2  9 16 23 30   
Fr  2  9 16 23 30     6 13 20 27        6 13 20 27        3 10 17 24      
Sa  3 10 17 24 31     7 14 21 28        7 14 21 28        4 11 18 25      

    May               June              July              August            
Su     3 10 17 24 31     7 14 21 28        5 12 19 26        2  9 16 23 30
Mo     4 11 18 25     1  8 15 22 29        6 13 20 27        3 10 17 24 31
Tu     5 12 19 26     2  9 16 23 30        7 14 21 28        4 11 18 25   
We     6 13 20 27     3 10 17 24        1  8 15 22 29        5 12 19 26   
Th     7 14 21 28     4 11 18 25        2  9 16 23 30        6 13 20 27   
Fr  1  8 15 22 29     5 12 19 26        3 10 17 24 31        7 14 21 28   
Sa  2  9 16 23 30     6 13 20 27        4 11 18 25        1  8 15 22 29   

    September         October           November          December          
Su     6 13 20 27        4 11 18 25     1  8 15 22 29        6 13 20 27   
Mo     7 14 21 28        5 12 19 26     2  9 16 23 30        7 14 21 28   
Tu  1  8 15 22 29        6 13 20 27     3 10 17 24        1  8 15 22 29   
We  2  9 16 23 30        7 14 21 28     4 11 18 25        2  9 16 23 30   
Th  3 10 17 24        1  8 15 22 29     5 12 19 26        3 10 17 24 31   
Fr  4 11 18 25        2  9 16 23 30     6 13 20 27        4 11 18 25      
Sa  5 12 19 26        3 10 17 24 31     7 14 21 28        5 12 19 26      

... 当前日期标有“反转块”数字。复制并粘贴为文本。
所需的工作量取决于您使用的工具。


编辑:在 Bash shell 提示符下输入;
$ y=2015; for (( i=1 ; i<13 ; i++)) do cal $i $y ; done | sed -re 's/([^ ]+ 2015|[a-zåäö]{2}|[ 0-9]{2} )/"\1",/g' | sed -re 's/"\,[ ]*$/"/' >calendar-$y.csv

创建一个可以加载到任何电子表格中的 CSV 文件。更改y=2015以反映您希望创建日历的年份。

相关内容