[[20241225154529]] 『21日始まりの年間カレンダーの作成方法を教えて下』(初投稿です) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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

?期のカレンダーじゃないんだ
社内の休日発表が年末だったり年明けだったりするので
12〜1月のカレンダーが遅れたりするのが痛い所
文字の色塗り等は、休日表なるもの参照しているので
発表まで12〜1月分は途中までか本年と同じに作って
発表後休日表とともに作り直してた
条件付き書式に任せてもいいし

(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

不要な日にちは、条件付き書式設定で文字の色をグレーにするとか、
白にして見えなくするようにしたらいいと思いますが、
それも考えてあげないといけない感じですか?
(まっつわん) 2024/12/26(木) 17:06:41

 > >暇な人様
 > すみません、これはコピペしてどこかに張り付ければいいのでしょうか?
 そうです。

 ↓の動画(音声なし)
 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.