[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『21日始まりの年間カレンダーの作成方法を教えて下さい。』(初投稿です)
日曜始まりで21日〜20日の年間カレンダーを作成したいです。
21日と1日には、月も表示させたいです。
例)1月の場合 12/21〜1/20で1ヶ月
21日→12/21
1日→1/1 と表示させたい。
よろしくお願いいたします。
< 使用 Excel:Excel2021、使用 OS:Windows11 >
コード作成の丸投げ依頼ですが
たたき台として
Option Explicit
Sub Test() Dim ws As Worksheet Dim month As Long Dim startYear As Integer Dim startDate As Date Dim endDate As Date Dim currentDate As Date Dim row As Integer, col As Integer Dim monthNames(1 To 12) As String
' 月名の設定 monthNames(1) = "1月": monthNames(2) = "2月": monthNames(3) = "3月" monthNames(4) = "4月": monthNames(5) = "5月": monthNames(6) = "6月" monthNames(7) = "7月": monthNames(8) = "8月": monthNames(9) = "9月" monthNames(10) = "10月": monthNames(11) = "11月": monthNames(12) = "12月"
' ユーザーに年度の入力を求める startYear = InputBox("カレンダーを作成する年度を入力してください(例:2024)")
' 新しいワークシートを作成 Set ws = ThisWorkbook.Sheets.Add ws.Name = startYear & "年度カレンダー"
' 12ヶ月分のカレンダーを作成 For month = 1 To 12 startDate = DateSerial(startYear, month, 21) If month = 12 Then endDate = DateSerial(startYear + 1, 1, 20) Else endDate = DateSerial(startYear, month + 1, 20) End If
' カレンダーのヘッダーを作成 row = (month - 1) * 8 + 1 ws.Cells(row, 1).Value = monthNames(month) ws.Cells(row + 1, 1).Value = "日" ws.Cells(row + 1, 2).Value = "月" ws.Cells(row + 1, 3).Value = "火" ws.Cells(row + 1, 4).Value = "水" ws.Cells(row + 1, 5).Value = "木" ws.Cells(row + 1, 6).Value = "金" ws.Cells(row + 1, 7).Value = "土"
' 日付を配置 row = row + 2 col = Weekday(startDate, vbSunday) currentDate = startDate
Do While currentDate <= endDate If col > 7 Then col = 1 row = row + 1 End If
If Day(currentDate) = 21 Or Day(currentDate) = 1 Then ws.Cells(row, col).Value = Format(currentDate, "m/d") Else ws.Cells(row, col).Value = Day(currentDate) End If
currentDate = currentDate + 1 col = col + 1 Loop Next month
' セルの書式設定 ws.Cells.HorizontalAlignment = xlCenter ws.Columns.AutoFit End Sub
(暇な人) 2024/12/25(水) 16:20:52
>日曜始まりで21日〜20日の年間カレンダーを作成したい
シート上にどのような配置でカレンダーにするのでしょう?
というか、
「12月21日を含む週の日曜の日付を求めたい」
が、やりたいことですか?
それさえわかれば、前の日から+1していけばいいような気がしますが、
いかがでしょうか?
(まっつわん) 2024/12/25(水) 16:36:29
こういう形式のカレンダーにしてしまえば楽ですよ(´・ω・`) 2024/12/25(水) 16:39:50
(why) 2024/12/25(水) 16:48:49
45658 日 月 火 水 木 金 土 =B2-10-WEEKDAY(B2-11) =B4+1 =C4+1 =D4+1 =E4+1 =F4+1 =G4+1 =B4+7 =C4+7 =D4+7 =E4+7 =F4+7 =G4+7 =H4+7 =B5+7 =C5+7 =D5+7 =E5+7 =F5+7 =G5+7 =H5+7 =B6+7 =C6+7 =D6+7 =E6+7 =F6+7 =G6+7 =H6+7 =B7+7 =C7+7 =D7+7 =E7+7 =F7+7 =G7+7 =H7+7 =B8+7 =C8+7 =D8+7 =E8+7 =F8+7 =G8+7 =H8+7
=EDATE(B2,1) 日 月 火 水 木 金 土 =B12-10-WEEKDAY(B12-11) =B14+1 =C14+1 =D14+1 =E14+1 =F14+1 =G14+1 =B14+7 =C14+7 =D14+7 =E14+7 =F14+7 =G14+7 =H14+7 =B15+7 =C15+7 =D15+7 =E15+7 =F15+7 =G15+7 =H15+7 =B16+7 =C16+7 =D16+7 =E16+7 =F16+7 =G16+7 =H16+7 =B17+7 =C17+7 =D17+7 =E17+7 =F17+7 =G17+7 =H17+7 =B18+7 =C18+7 =D18+7 =E18+7 =F18+7 =G18+7 =H18+7
とりあえず、こんな感じとか。。。
(もっとスマートなやり方があるかも^^;)
45658 となっているところがB2セルで、2025/1/1と入っている感じ。
後は、セルの書式設定や条件付き書式設定を使って上手く表示させてください。
祝日は別にリストを作って参照すればよいでしょう。
祝日も計算で出るけど、法律がちょいちょい変わったりして結局メンテナンス
する必要があるので、手入力でもよいかと。
(まっつわん) 2024/12/25(水) 17:16:20
すみません、これはコピペしてどこかに張り付ければいいのでしょうか?
エクセル初心者で申し訳ないです・・・
(初投稿です) 2024/12/26(木) 13:53:02
タイムカードが20日締めなのですが、
毎月の休日数(21〜翌20日)と年間休日数(12/21〜翌12/20)で知りたいです。
画像の貼付け方法がわからず、どのようなカレンダーか説明するのが難しいですね…
来年1月のカレンダーは以下の通り作成したいです。
2025年1月
日 月 火 水 木 金 土
12/21
22 23 24 25 26 27 28
29 30 31 1/1 2 3 4
…
19 20
(初投稿です) 2024/12/26(木) 14:06:12
頭の体操の為、数式でやってみた。暇な人のマクロ案がいいのでは?
2024/12月の場合(他の年月は先頭の2024と12を変える) =LET(y,2024,m,12,start,DATE(y,m,21),last,DATE(y,m+1,20),top,FLOOR(start-1,7)+1,wk,ROUNDUP((last-top+1)/7,0),all,SEQUENCE(1,7,top)+SEQUENCE(wk,,0)*7,IFS(all<start,"",all>last,"",all=start,TEXT(all,"m/d"),all=DATE(y,m+1,1),TEXT(all,"m/d"),TRUE,TEXT(all,"d")))
__E __F __G __H __I __J __K__ 4 日 月 火 水 木 金 土 5 12/21 6 22 23 24 25 26 27 28 7 29 30 31 1/1 2 3 4 8 5 6 7 8 9 10 11 9 12 13 14 15 16 17 18 10 19 20
(まる2021) 2024/12/26(木) 15:00:53
では、私も参考出品 2021では使えない関数つかっているので、申し訳ないです。
=LAMBDA(y,m,LET(d0,DATE(y,m-1,20),MAP(SEQUENCE(6,7,d0-WEEKDAY(d0,2)),LAMBDA(x,IF(OR(x<DATE(y,m-1,21),x>DATE(y,m,20)),"",x)))))(2025,1) (´・ω・`) 2024/12/26(木) 15:34:32
こうしたら2021でも大丈夫かな? =LET(y,2025,m,1,d0,DATE(y,m-1,20),cal,SEQUENCE(6,7,d0-WEEKDAY(d0,2)),TEXT(cal,IFS(cal<DATE(y,m-1,21),"",cal>DATE(y,m,20),"",DAY(cal)=21,"m/d",DAY(cal)=1,"m/d",TRUE,"d"))) (´・ω・`) 2024/12/26(木) 16:12:22
> >暇な人様 > すみません、これはコピペしてどこかに張り付ければいいのでしょうか? そうです。
↓の動画(音声なし) https://www.excelspeedup.com/hajimetenovba/ を参考にして、マクロを実行してみて下さい。 文章で要点を書くと以下。
(1)ALT を押したまま F11 をクリックすると、VBAのエディタが起動できます。
(2)「挿入」メニューの「標準モジュール」をクリックします。
(3)貰ったプログラムコードを選択して、CTRL + C でコピーします。 「標準モジュール」の画面の最初の部分に、CTRL + V で貼り付けします。 これで、「標準モジュール」に、プログラム(コード)が入力できたはずです。 (4)「F5」キーを押して、マクロを実行して下さい。 (もっと暇な人) 2024/12/26(木) 17:17:54
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.