SSブログ

エクセル小僧:カレンダを作る(2) [コンピューター]

エクセル小僧:カレンダを作る
http://cheese999.blog.so-net.ne.jp/2018-04-05

の続きです。1か月あたり、7列 X 6行の枠を作ったら、そこに日付を埋めていきます。
その方法は、

【超便利!】Excel(エクセル)でカレンダーを作成する方法
https://techacademy.jp/magazine/9927

を参考に作りました。

1.初日の日付を得る

"初日date2"という名前のセルを作り、そこに初日の日付(例:2018/4/1)を入力しておきます。

2.初日の曜日を得る

WEEKDAY関数で初日の曜日を得ます。

=WEEKDAY(初日date2)

WEEKDAY関数は、1 (日曜) ~ 7 (土曜) を返してきます。

3.カレンダの第一列の曜日を得る

"週1日目"というセルに、カレンダの第一列の曜日("日曜"、"月曜")を入力しておきます。

4.カレンダの左上のセルの日付を得る

上記の1.~3.の情報を元に、カレンダの左上のセルの日付を計算します。
初日の曜日(1-7)から、カレンダの第一列の曜日(1, 2)を引いたものを、初日の日付から引くことで、カレンダの左上のセルの日付を得ることを考えます。
カレンダが月曜(2)始まりで、初日が日曜(1)の場合、

初日の曜日 - カレンダの第一列の曜日 = 1 - 2 = -1

と負の値(=未来)になってしまうので、引き算をした後で7を足して、7で割った余りを求めることにします。

[カレンダが日曜(1)始まり]
初日の曜日a=(初日の曜日 - カレンダの第一列の曜日 + 7) mod 7カレンダの左上のセルの日付=初日-a
1(日曜)(1 - 1 + 7) mod 7 = 0初日 - 0 = 1 - 0 = 1日
2(月曜)(2 - 1 + 7) mod 7 = 1初日 - 1 = 1 - 1 = 0 = 先月の最終日
3(火曜)(3 - 1 + 7) mod 7 = 2初日 - 2 = 1 - 2 = -1 = 先月の最終日 - 1日
4(水曜)(4 - 1 + 7) mod 7 = 3初日 - 3 = 1 - 3 = -2 = 先月の最終日 - 2日
5(木曜)(5 - 1 + 7) mod 7 = 4初日 - 4 = 1 - 4 = -3 = 先月の最終日 - 3日
6(金曜)(6 - 1 + 7) mod 7 = 5初日 - 5 = 1 - 5 = -4 = 先月の最終日 - 4日
7(土曜)(7 - 1 + 7) mod 7 = 6初日 - 6 = 1 - 6 = -5 = 先月の最終日 - 5日


[カレンダが月曜(2)始まり]
初日の曜日a=(初日の曜日 - カレンダの第一列の曜日 + 7) mod 7カレンダの左上のセルの日付=初日-a
1(日曜)(1 - 2 + 7) mod 7 = 6初日 - 6 = 1 - 6 = -5 = 先月の最終日 - 5日
2(月曜)(2 - 2 + 7) mod 7 = 0初日 - 0 = 1 - 0 = 1 = 1日
3(火曜)(3 - 2 + 7) mod 7 = 1初日 - 1 = 1 - 1 = 0 = 先月の最終日
4(水曜)(4 - 2 + 7) mod 7 = 2初日 - 2 = 1 - 2 = -1 = 先月の最終日 - 1日
5(木曜)(5 - 2 + 7) mod 7 = 3初日 - 3 = 1 - 3 = -2 = 先月の最終日 - 2日
6(金曜)(6 - 2 + 7) mod 7 = 4初日 - 4 = 1 - 4 = -3 = 先月の最終日 - 3日
7(土曜)(7 - 2 + 7) mod 7 = 5初日 - 5 = 1 - 5 = -4 = 先月の最終日 - 4日


上記の考えを元に、マクロを作ります。

Function myDate11(myYoubi1 As String, myDate As Date)
  '【機能】初日date2、週1日目から、カレンダの左上セルの日付を求める
  '【変数】
  Dim num1 As Integer ' 整数
  '【実行コード】
  Select Case myYoubi1
  Case "月曜"
    num1 = 2
  Case "日曜"
    num1 = 1
  End Select
  myDate11 = myDate - ((Weekday(myDate) - num1 + 7) Mod 7)
End Function

5.それ以外のセルの日付を得る

それ以外のセルの日付は、カレンダの左上のセルの日付に+1ずつ加えることで求めます。

セル数式
B4=myDate11(週1日目,初日date2)
C4=B4+1
D4=C4+1
以下、同様


6.当月以外の日付を非表示にする。

条件付き書式を使い、先月、来月の日付を非表示にします。
条件付き書式の「数式を使用して。。。」を選択し、次の数式を入力します。(B4セルの場合)

=MONTH(B4) <> MONTH(初日date2)

条件に合致した場合、フォントの色を白くするように書式を設定すればOKです。

excel_calender.jpg
ヤバイぜ!(14)  コメント(3) 
共通テーマ:パソコン・インターネット

ヤバイぜ! 14

コメント 3

tarou

お早うございます、花の木公園(ツツジ)に
コメントを有難うございました。
太田和つつじの丘にも、行って来ました。

Excel仕事で使っていましたが、
今は、ほとんど使わないので
すっかり忘れてしまいました。

by tarou (2018-04-19 07:34) 

cheese999

tarouさん、
道具って、使わなくなると、忘れてしまいますよね。
(^_0)ノ
by cheese999 (2018-04-20 11:11) 

cheese999

ヤバイぜ! ありがとうございます[__猫]
by cheese999 (2018-04-20 11:13) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字(英大文字の「オー」、英小文字の「ユー」、アラビア数字の「ハチ」、アラビア数字の「イチ」、アラビア数字の「ニ」)を入力してください。

Facebook コメント

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。