Excel2016 特定の曜日のみ表示するカレンダー(スケジュール表)を作成したいです。
添付のExcelファイルは、関数や表示形式の設定はしておりません。
下記の条件を満たす関数またはVBA(マクロ)のコードを、どなたか教えてください。
内訳
・添付ファイルでは、6月までしか表示されておりませんが、1つのシートに1月~12月まであります。
・A1の年度を変更したら、その年の各月の火曜日と木曜日の日にちのみを表示する。
・火曜日、または木曜日が祝日の場合は、繰り下げた日にちを表示する。
・会社の定休日は、土日祝日と12/31~1/3となります。
・同じブックの別シート(シート2)に、1年間の祝日と会社の定休日を入力し、名前の定義で「祝日等」にしております。
どうぞよろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
あ”~~~!
細かい検証をしていませんでした。
今までのコードは消去し
↓のコードにしてください。
尚、よく確認してみると第6週目がある曜日は日・月までなので
今回の場合、火・木限定というコトは結局5週間だけの処理で良かったですね。
Sub Sample3()
Dim i As Long, k As Long, cnt As Long
Dim myDay As Date
Dim myR, myAry
With Worksheets("Sheet1")
myAry = Array("A4", "H4", "A12", "H12", "A20", "H20", "A28", "H28", "A36", "H36", "A44", "H44")
For k = 0 To UBound(myAry)
With .Range(myAry(k)).Offset(2).Resize(5)
.NumberFormatLocal = "d日"
.ClearContents
End With
With .Range(myAry(k)).Offset(2, 3).Resize(5)
.NumberFormatLocal = "d日"
.ClearContents
End With
.Range(myAry(k)).Offset(2, 3).Resize(5).ClearContents
cnt = 1
myR = .Range(myAry(k)).Offset(2).Resize(5, 4)
For i = 1 To Day(WorksheetFunction.EoMonth(DateSerial(.Range("A1"), k + 1, 1), 0))
myDay = DateSerial(.Range("A1"), k + 1, i)
If WorksheetFunction.Weekday(myDay) = 7 Then
cnt = cnt + 1
End If
If WorksheetFunction.Weekday(myDay) = 3 Then
If WorksheetFunction.Weekday(WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))) <> 5 Then
If Month(WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))) = k + 1 Then '//●//
myR(cnt, 1) = WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))
End If
End If
ElseIf WorksheetFunction.Weekday(myDay) = 5 Then
If WorksheetFunction.Weekday(WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))) <> 3 Then
If Month(WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))) = k + 1 Then '//●//
myR(cnt, 4) = WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))
End If
End If
End If
Next i
.Range(myAry(k)).Offset(2).Resize(5, 4) = myR
Next k
End With
End Sub
※ 「●」の部分を追加しています。
今度はどうでしょうか?m(_ _)m
完璧です。
こんなに迅速かつ親切にご対応いただきまして、本当にうれしいです。
tom04さんには、以前もご回答いただいております。
いつも、私の質問を見つけてくださって、本当にありがとうございました。
また、よろしくお願いいたします。
No.2
- 回答日時:
No.1です。
投稿後画像をもう一度よく見ると
第二火曜日は2行目!といった感じにしなくてはならないのですね。
そして、WORKDAY関数で火・木曜日を求めた場合
万一連休が続き火・木曜に重なる場合も考慮する必要があるようなので・・・
前回のコードはすべて消去し↓のコードに変更してください。
そして今回は6週にも対応しています。
Sub Sample2()
Dim i As Long, k As Long, cnt As Long
Dim myDay As Date
Dim myR, myAry
With Worksheets("Sheet1")
myAry = Array("A4", "H4", "A12", "H12", "A20", "H20", "A28", "H28", "A36", "H36", "A44", "H44")
For k = 0 To UBound(myAry)
With .Range(myAry(k)).Offset(2).Resize(6) '//★//
.NumberFormatLocal = "d日"
.ClearContents
End With
With .Range(myAry(k)).Offset(2, 3).Resize(6) '//★
.NumberFormatLocal = "d日"
.ClearContents
End With
.Range(myAry(k)).Offset(2, 3).Resize(6).ClearContents '//★/
cnt = 1
myR = .Range(myAry(k)).Offset(2).Resize(6, 4) '//★//
For i = 1 To Day(WorksheetFunction.EoMonth(DateSerial(.Range("A1"), k + 1, 1), 0))
myDay = DateSerial(.Range("A1"), k + 1, i)
'//▼ココから少し訂正//
If WorksheetFunction.Weekday(myDay) = 7 Then
cnt = cnt + 1
End If
If WorksheetFunction.Weekday(myDay) = 3 Then
If WorksheetFunction.Weekday(WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))) <> 5 Then
myR(cnt, 1) = WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))
End If
ElseIf WorksheetFunction.Weekday(myDay) = 5 Then
If WorksheetFunction.Weekday(WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))) <> 3 Then
myR(cnt, 4) = WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))
End If
End If
Next i
'//▲ココまで//
.Range(myAry(k)).Offset(2).Resize(6, 4) = myR '//★//
cnt = 1
Next k
End With
End Sub
今度はどうでしょうか?m(_ _)m
tom04 様
ご回答いただきまして、ありがとうございます。
修正いただきましたコードにて、早速実行入力、実行させていただきました。
第二火曜日の2行目、5月の大型連休も考慮したコードに修正いただいて、本当に感謝いたしております。
ただ、12月のカレンダーに翌年の1月1日が表示されてしまいます。
そちらについても、考慮していただくことは可能でしょうか?
No.1
- 回答日時:
こんばんは!
VBAになりますが、一例です。
尚、前提条件として、お示しのデータシート名は「Sheet1」とし
A1セルの書式設定は
ユーザー定義から
A1 → 0年
とし、単に2020という数値のみを入力しているとします。
標準モジュールです。
Sub Sample1()
Dim i As Long, k As Long, cnt As Long
Dim myDay As Date
Dim myR, myAry
With Worksheets("Sheet1")
myAry = Array("A4", "H4", "A12", "H12", "A20", "H20", "A28", "H28", "A36", "H36", "A44", "H44")
For k = 0 To UBound(myAry)
With .Range(myAry(k)).Offset(2).Resize(5) '//★//
.NumberFormatLocal = "d日"
.ClearContents
End With
With .Range(myAry(k)).Offset(2, 3).Resize(5) '//★
.NumberFormatLocal = "d日"
.ClearContents
End With
.Range(myAry(k)).Offset(2, 3).Resize(5).ClearContents '//★/
cnt = 1
myR = .Range(myAry(k)).Offset(2).Resize(5, 4) '//★//
For i = 1 To Day(WorksheetFunction.EoMonth(DateSerial(.Range("A1"), k + 1, 1), 0))
myDay = DateSerial(.Range("A1"), k + 1, i)
If WorksheetFunction.Weekday(myDay) = 3 Then
myR(cnt, 1) = WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))
ElseIf WorksheetFunction.Weekday(myDay) = 5 Then
myR(cnt, 4) = WorksheetFunction.WorkDay(myDay - 1, 1, Range("祝日等"))
cnt = cnt + 1
End If
Next i
.Range(myAry(k)).Offset(2).Resize(5, 4) = myR '//★//
cnt = 1
Next k
End With
End Sub
※ お示しの画像では1か月5週間限定となっているので
5行だけの操作にしていますが、まれに1か月が6週になる月もあるはずです。
6週間に対応するコードにしても良かったのですが、
画像の配置だと11行目・19行目・・・にデータがある場合そのデータも消えてしまいますので
画像通り5週間限定としています。
6週対応にしたい場合はコード内の「★」の行の
「5」を「6」に変更してみてください。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) エクセルの祝日に色が反映しない 4 2022/05/18 09:58
- Excel(エクセル) Excelシフト表 固定シフトの自動変換化 1 2022/04/14 16:10
- その他(Microsoft Office) エクセルの休日について教えてください。 1 2023/01/06 15:45
- Excel(エクセル) 条件付き書式で文字入力 6 2022/08/29 10:40
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) Excelで祝日を除く1回目の金曜日を返す 3 2023/01/31 16:07
- Visual Basic(VBA) 祝日を除いた月曜から土曜までの1週間分の日付行を選択し、別シートへカットアンドペーストしたい 13 2023/07/13 22:46
- Excel(エクセル) エクセルでカレンダーを作りたい 5 2023/05/16 07:32
- Visual Basic(VBA) 翌日にお休み予定の従業員がいる場合にアラートを出したい 1 2023/07/11 11:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
祝日って、ごみ収集もお休みな...
-
金土祝前って、日曜は入るんで...
-
Excel 2ヶ月後の日付(土日祝...
-
案内状に記載する日付の書き方
-
今日って平日ですか?祝日ですか?
-
国旗掲揚日を教えてください
-
GWって、祝日になりますか? 会...
-
土曜は平日?
-
日本の安易な祝日、多すぎ。 休...
-
結局、今月の27日から5月の6...
-
父母の日はただの日曜
-
ゴールドジムのウィークエンド...
-
【勤労感謝の日に働いている人...
-
いいかげん
-
日本のAVでは、アンアン!が主...
-
なぜ6月は祝日がないんですか?...
-
GWは、何の略だと思いますか?
-
ゴールデンウィークと平日(2...
-
中々治療が上手くいかずいつ ど...
-
ゴールデンウィークなのに○○・...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
案内状に記載する日付の書き方
-
金土祝前って、日曜は入るんで...
-
土曜は平日?
-
ゴールドジムのウィークエンド...
-
Excel 2ヶ月後の日付(土日祝...
-
2024年のGoogleカレンダーについて
-
GW以降と6月に祝日がないことを...
-
祝日って、ごみ収集もお休みな...
-
父母の日はただの日曜
-
GWって、祝日になりますか? 会...
-
土日祝日以外の万年カレンダー...
-
EXCEL関数(土日祝日自動色分け)
-
電子カレンダーで日本の祝日に...
-
国旗掲揚日を教えてください
-
5/6日は振替休日になっています...
-
いいかげん
-
Excel2016 特定の曜日のみ表示...
-
11月23日木曜・勤労感謝の日(...
-
DELLのデスクトップPC (Optiple...
-
Find関数で日付を検索した時に...
おすすめ情報
tom04 様
ご回答いただきまして、ありがとうございます。
修正いただきましたコードにて、早速実行入力、実行させていただきました。
第二火曜日の2行目、5月の大型連休も考慮したコードに修正いただいて、本当に感謝いたしております。
ただ、12月のカレンダーに翌年の1月1日が表示されてしまいます。
そちらについても、考慮していただくことは可能でしょうか?