Excel VBAに関する質問掲示板です。
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か月分表示
というマクロを作成したいのですが
教えてほしいです。
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,"")
こんな感じの数式で十分じゃん。
=if(month(a1+1)=month(a1),a1+1,"")
[返信 2] Re : カレンダー作成
投稿者 : てらてら 投稿日時 : 2022/05/24(Tue) 20:35:17
こんにちは。
小の月は詰める。
S5は、5月だけだと年が取得できないので、2022/5/1 とする。
(書式設定で「5月」と表示させる)
で作ったのが以下の通り。
こんにちは。
小の月は詰める。
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,"")
甲樹様
ご回答ありがとうございます。
■[返信 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
>
てらてら様
ご回答ありがとうございます。
助かりました…。
無事、管理表の作成ができました。
■[返信 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
>
ピロリさん
回答ありがとうございます。
とても助かりました。
■[返信 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
>
ピロリさん
回答ありがとうございます。
とても助かりました。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
返信入力フォーム
( 処理日時 : 2022-07-07 13:50:35 )