我想创建一个月历(每张表 1 个月),其中只有年份可以更改(日期也是如此)。我的日历模板已经创建好了。我想要的只是添加一个公式,当我更改年份时,它会根据星期几更改日期。一周从星期日开始
谢谢 !
答案1
这是我的想法。根据需要调整说明以适合您自己的模板。
指示
- 将 A1 设置为您想要表示的月份的年份值。
- 对于这篇文章的第一次修订日期,应该是“2015”。
- 将 A2 设置为您想要表示的月份的全名。
- 对于这篇文章的第一次修订日期,应该是“五月”。
- 在 A3:G3 中填写星期几,从 A3 中的“星期日”开始,到 G3 中的“星期六”结束。
- 在A4中输入以下公式:
=IF(WEEKDAY(DATEVALUE(CONCATENATE($A$2," 1, ",$A$1)))=1,1,"")
- 根据月份/年份,此公式可能会在此处返回空白值。(对于 2015 年 5 月,它将返回空白值。)这是正常的。
- 在B4中输入以下公式:
=IF(A4="",IF(WEEKDAY(DATEVALUE(CONCATENATE($A$2," 1, ",$A$1)))=COLUMNS($A$4:B4),1,""),A4+1)
- 根据月份/年份,此公式可能会在此处返回空白值。(对于 2015 年 5 月,它将返回空白值。)这是正常的。
- 将公式从 B4 复制到单元格 C4:G4。Excel 应根据需要自动调整公式中的单元格引用。
- 此时,公式应在第 4 行的其中一个单元格中计算结果为“1”,并且其后的每个单元格都应返回比前一个单元格更高的增量。“1”之前的单元格应为空白。对于 2015 年 5 月,您应该在 A4:E4 中看到空白,在 F4(星期五)中看到“1”,在 G4(星期六)中看到“2”。
- 在A5中输入以下公式:
=IF(ISERROR(DATEVALUE(CONCATENATE($A$2," ",G4+1,", ",$A$1))),"",G4+1)
- 公式结果应该比G4的值大一。
- 将 A5 中的公式复制到单元格 A6:A9 中。Excel 应根据需要自动调整公式中的单元格引用。
- A6:A9 目前将计算为空白。这是正常的。
- 在 B5 中输入以下公式:
=IF(ISERROR(DATEVALUE(CONCATENATE($A$2," ",A5+1,", ",$A$1))),"",A5+1)
- 公式结果应该比A5的值大一。
- 将 B5 中的公式复制到单元格 C5:G5。Excel 应根据需要自动调整公式中的单元格引用。
- 第 5 行中的公式现在应计算为一组从 A 列到 G 列逐步增加的数字。
- 选择 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
添加New Rule
添加规则相等=TODAY()
结果:
答案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
以反映您希望创建日历的年份。