ダイナミックな月間 Excel カレンダー

ダイナミックな月間 Excel カレンダー

年(日付も)のみ変更できる月間カレンダー(1シートあたり1か月)を作成したいと考えています。カレンダーのテンプレートはすでに作成されています。必要なのは、年を変更したときに曜日に応じて日付を変更する数式を追加することだけです。週は日曜日から始まります。

ありがとう !

答え1

これが私が考え出したものです。必要に応じて、独自のテンプレートに合うように手順を調整してください。


説明書

  1. A1 を、表示したい月の年の値に設定します。
    • この投稿の最初の改訂日は「2015」になります。
  2. A2 を、表示したい月の完全な名前に設定します。
    • この投稿の最初の改訂日は「5月」になります。
  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」と評価され、その後の各セルは前のセルよりも大きい増分を返します。「1」の前のセルは空白である必要があります。2015 年 5 月の場合、A4:E4 が空白、F4 (金曜日) が「1」、G4 (土曜日) が「2」になります。
  7. 次の数式をA5に入力します。=IF(ISERROR(DATEVALUE(CONCATENATE($A$2," ",G4+1,", ",$A$1))),"",G4+1)
    • 数式の結果は G4 の値より 1 大きくなるはずです。
  8. A5 の数式をセル A6:A9 までコピーします。Excel は必要に応じて数式内のセル参照を自動的に調整します。
    • A6:A9 は今のところ空白として評価されます。これは正常です。
  9. 次の数式をB5に入力します。=IF(ISERROR(DATEVALUE(CONCATENATE($A$2," ",A5+1,", ",$A$1))),"",A5+1)
    • 数式の結果は A5 の値より 1 大きくなるはずです。
  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 を返します。

数式の説明

  • A4A1 と A2 から情報を集めて、月の最初の日を表すテキスト文字列を生成します。(例: 「2015 年 5 月 1 日」) 次に、その日付の曜日が日曜日かどうかを確認します。日曜日の場合は 1 を返し、そうでない場合は空白を返します。

  • B4:G4前のセルが空白かどうかを確認します。空白でない場合は、前のセルより 1 つ大きい値を返します。前のセルが空白の場合は、現在の曜日が指定された月の最初の日と一致するかどうかを確認します。一致する場合は 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

リナックス:

ターミナルを開き、次のように入力します。

ncal 2015ENTER(プロンプトで)を押します$

出力は次のようになります。

                                  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 シェルプロンプトで入力します。
$ 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カレンダーを作成する年を反映するように変更します。

関連情報