エクセル小僧:カレンダを作る(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)始まり]
[カレンダが月曜(2)始まり]
上記の考えを元に、マクロを作ります。
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ずつ加えることで求めます。
6.当月以外の日付を非表示にする。
条件付き書式を使い、先月、来月の日付を非表示にします。
条件付き書式の「数式を使用して。。。」を選択し、次の数式を入力します。(B4セルの場合)
=MONTH(B4) <> MONTH(初日date2)
条件に合致した場合、フォントの色を白くするように書式を設定すればOKです。
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仕事で使っていましたが、
今は、ほとんど使わないので
すっかり忘れてしまいました。
by tarou (2018-04-19 07:34)
tarouさん、
道具って、使わなくなると、忘れてしまいますよね。
(^_0)ノ
by cheese999 (2018-04-20 11:11)
ヤバイぜ! ありがとうございます[__猫]
by cheese999 (2018-04-20 11:13)