Excel VBA 質問スレッド No.746 (解決済)

カレンダー作成

投稿者 : はて?     投稿日時 : 2022/05/24(Tue) 13:49:48     OS : 未指定     EXCEL : 未指定
3か月分の納期管理表を作りたいと思っています。
説明がとても下手くそでスミマセン。

セルS3に5月を入力すると
S4~AW4に日付が入力される。
S5~AW5に曜日が入力される。
セルAX3に自動で6月と入力される
AX4~CA4に日付が入力される。
AX5~AX5に曜日が入力される。



常に3か月分表示



というマクロを作成したいのですが
教えてほしいです。

[返信 1] Re : カレンダー作成
投稿者 : 甲樹     投稿日時 : 2022/05/24(Tue) 15:39:54
こんな感じの数式で十分じゃん。

=if(month(a1+1)=month(a1),a1+1,"")

[返信 2] Re : カレンダー作成
投稿者 : てらてら     投稿日時 : 2022/05/24(Tue) 20:35:17
こんにちは。

小の月は詰める。
S5は、5月だけだと年が取得できないので、2022/5/1 とする。
(書式設定で「5月」と表示させる)

で作ったのが以下の通り。

Sub setMyCalendar()

Dim y As Long, m As Long, i As Long
Dim d As Long
Dim endDay As Date, myDate As Date

myDate = Range("S3").Value '2022/5/1 など
y = Year(myDate)
m = Month(myDate)

Range("AS3:DS5").ClearContents '残骸があれば消しておく

endDay = DateSerial(y, m + 3, 1) - 1 '3か月後の末日

i = 0

Do While myDate + i <> endDay + 1

d = Format(myDate + i, "d") '日
Cells(4, 19 + i) = d

If d = 1 And i > 1 Then
Cells(3, 19 + i) = Format(myDate + i, "m月") '月
End If

Cells(5, 19 + i) = Format(myDate + i, "aaa") '曜日

i = i + 1

If i > 300 Then Exit Sub '無限ループ除けのお守り
Loop

End Sub

 

[返信 3] Re : カレンダー作成
投稿者 : ピロリ     投稿日時 : 2022/05/24(Tue) 23:32:42
私は、てらてらさん と違う切り口で一案を ...
データは全て日付とし、セルの書式設定で 月・日・曜日を表示させる案です。
前提条件は てらてらさん と同様です。
Sub set_Calendar()
Dim cnt As Integer
Dim i As Integer

'カレンダーの領域(列)は 31日×3か月分を確保するものとします。
Range(Cells(3, "S").Offset(0, 1), Cells(3, "S").Offset(2, 31 * 3 - 1)).ClearContents
'S列を除くカレンダー領域を消去します
Range("S4") = Range("S3") 'S3セルは 2022/5/1など(月初め)が前提
Range("S5") = Range("S3") 'S3セルは 2022/5/1など(月初め)が前提
cnt = 0 '月カウンタの初期化
For i = 1 To 31 * 3 - 1
If Format(Range("S4").Offset(0, i - 1) + 1, "m") <> _
Format(Range("S4").Offset(0, i - 1), "m") Then
'次の月を処理しようとしている場合
cnt = cnt + 1 '月カウンタの更新
If 3 <= cnt Then Exit For '3か月を超える場合はループを抜ける
Range("S3").Offset(0, i) = Range("S4").Offset(0, i - 1) + 1 '月の書込み
End If
Range("S4").Offset(0, i) = Range("S4").Offset(0, i - 1) + 1 '日の書込み
Range("S5").Offset(0, i) = Range("S5").Offset(0, i - 1) + 1 '曜日の書込み
Next i
Range(Cells(3, "S"), Cells(3, "S").Offset(0, 31 * 3 - 1)).NumberFormatLocal = "m月"
Range(Cells(4, "S"), Cells(4, "S").Offset(0, 31 * 3 - 1)).NumberFormatLocal = "d"
Range(Cells(5, "S"), Cells(5, "S").Offset(0, 31 * 3 - 1)).NumberFormatLocal = "aaa"
'月・日・曜日の書式を設定
End Sub

[返信 4] Re : カレンダー作成
投稿者 : はて?     投稿日時 : 2022/05/25(Wed) 16:26:27
■[返信 1] 甲樹さん(2022-05-24 15:39:54)の記事
> こんな感じの数式で十分じゃん。

> =if(month(a1+1)=month(a1),a1+1,"")

甲樹様
ご回答ありがとうございます。

[返信 5] Re : カレンダー作成
投稿者 : はて?     投稿日時 : 2022/05/26(Thu) 10:58:43
■[返信 2] てらてらさん(2022-05-24 20:35:17)の記事
> こんにちは。

> 小の月は詰める。
> S5は、5月だけだと年が取得できないので、2022/5/1 とする。
> (書式設定で「5月」と表示させる)

> で作ったのが以下の通り。

> Sub setMyCalendar()

> Dim y As Long, m As Long, i As Long
> Dim d As Long
> Dim endDay As Date, myDate As Date

> myDate = Range("S3").Value '2022/5/1 など
> y = Year(myDate)
> m = Month(myDate)

> Range("AS3:DS5").ClearContents '残骸があれば消しておく

> endDay = DateSerial(y, m + 3, 1) - 1 '3か月後の末日

> i = 0

> Do While myDate + i <> endDay + 1

> d = Format(myDate + i, "d") '日
> Cells(4, 19 + i) = d

> If d = 1 And i > 1 Then
> Cells(3, 19 + i) = Format(myDate + i, "m月") '月
> End If

> Cells(5, 19 + i) = Format(myDate + i, "aaa") '曜日

> i = i + 1

> If i > 300 Then Exit Sub '無限ループ除けのお守り
> Loop

> End Sub
>  

てらてら様
ご回答ありがとうございます。
助かりました…。
無事、管理表の作成ができました。

[返信 6] Re : カレンダー作成
投稿者 : はて?     投稿日時 : 2022/05/26(Thu) 14:30:12
■[返信 3] ピロリさん(2022-05-24 23:32:42)の記事
> 私は、てらてらさん と違う切り口で一案を ...
> データは全て日付とし、セルの書式設定で 月・日・曜日を表示させる案です。
> 前提条件は てらてらさん と同様です。
> Sub set_Calendar()
> Dim cnt As Integer
> Dim i As Integer

'カレンダーの領域(列)は 31日×3か月分を確保するものとします。
> Range(Cells(3, "S").Offset(0, 1), Cells(3, "S").Offset(2, 31 * 3 - 1)).ClearContents
'S列を除くカレンダー領域を消去します
> Range("S4") = Range("S3") 'S3セルは 2022/5/1など(月初め)が前提
> Range("S5") = Range("S3") 'S3セルは 2022/5/1など(月初め)が前提
> cnt = 0 '月カウンタの初期化
> For i = 1 To 31 * 3 - 1
> If Format(Range("S4").Offset(0, i - 1) + 1, "m") <> _
> Format(Range("S4").Offset(0, i - 1), "m") Then
'次の月を処理しようとしている場合
> cnt = cnt + 1 '月カウンタの更新
> If 3 <= cnt Then Exit For '3か月を超える場合はループを抜ける
> Range("S3").Offset(0, i) = Range("S4").Offset(0, i - 1) + 1 '月の書込み
> End If
> Range("S4").Offset(0, i) = Range("S4").Offset(0, i - 1) + 1 '日の書込み
> Range("S5").Offset(0, i) = Range("S5").Offset(0, i - 1) + 1 '曜日の書込み
> Next i
> Range(Cells(3, "S"), Cells(3, "S").Offset(0, 31 * 3 - 1)).NumberFormatLocal = "m月"
> Range(Cells(4, "S"), Cells(4, "S").Offset(0, 31 * 3 - 1)).NumberFormatLocal = "d"
> Range(Cells(5, "S"), Cells(5, "S").Offset(0, 31 * 3 - 1)).NumberFormatLocal = "aaa"
'月・日・曜日の書式を設定
> End Sub



ピロリさん
回答ありがとうございます。
とても助かりました。

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2022-07-07 13:50:35 )

Page
Top