
我想建立一個月曆(每張 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的值高1。
- 將 A5 中的公式複製到儲存格 A6:A9 下。 Excel 應根據需要自動調整公式中的儲存格參考。
- A6:A9 目前將評估為空白。這是正常的。
- 將下列公式代入B5:
=IF(ISERROR(DATEVALUE(CONCATENATE($A$2," ",A5+1,", ",$A$1))),"",A5+1)
- 公式結果應比A5的值高1。
- 將 B5 中的公式複製到儲存格 C5:G5 中。 Excel 應根據需要自動調整公式中的儲存格參考。
- 第 5 行中的公式現在應計算為從 A 列到 G 列遞增的一組數字。
- 選擇 B5:G5 並將這些儲存格向下複製到 B6:G9。 Excel 應根據需要自動調整公式中的儲存格參考。
- 此時,日曆應適當填充給定月份。該月第一天之前和該月最後一天之後的單元格應為空白。
- 對於某些月份,例如 2015 年 1 月,第 9 行將完全空白。這個是正常的。
功能
- 連接將文字字串連接在一起。
- 日期值傳回文字字串表示的日期的 Excel「序號」值。如果字串與已知的日期格式不匹配,或者字串不代表實際日期(例如:「January 32, 2015」或「February 29, 2015」),它將傳回錯誤。
- 工作日傳回介於 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+列($A$4:A4)+(行($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
以反映您希望為其建立日曆的年份。