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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
EXCEL 火曜日と金曜日だけを抜き出したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelでASCを使って全角を半角...
-
今まで文字化けなく開けていたc...
-
Microsoft 365Excelの見開きペ...
-
Excel関数について教えてくださ...
-
マクロの処理が遅くなった
-
スプレッドシートで指定された...
-
エクセルの質問です。 F列からL...
-
Excel関数について教えてくださ...
-
エクセルのセル内に分数などの...
-
作成した数式を値として表示し...
-
ワークシートに出現したこの画...
-
条件付き書式設定で罫線を引き...
-
EXCELの散布図で日付が1900年に...
-
タイムスタンプとテキストから...
-
シートの情報を別のシートへま...
-
Excelでの文字色
-
【マクロ】VLOOKUPにて参照元に...
-
エクセルの文字が途中から消える
-
エクセルの数式バーのフォント...
-
エクセルでファイルの最終更新...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
金土祝前って、日曜は入るんで...
-
土曜は平日?
-
案内状に記載する日付の書き方
-
「海の日」と「山の日」は何の...
-
Excel 2ヶ月後の日付(土日祝...
-
祝日って、ごみ収集もお休みな...
-
国旗掲揚日を教えてください
-
2024年のGoogleカレンダーについて
-
電子カレンダーで日本の祝日に...
-
2017年は「社畜イヤー」? 祝日...
-
土日祝日以外の万年カレンダー...
-
土日祝日がお仕事の方教えて下...
-
EXCEL関数(土日祝日自動色分け)
-
サンレディースの即払いで祝日...
-
OutLook2000のカレンダー表示に...
-
Find関数で日付を検索した時に...
-
2009年9月は20日から2...
-
Excel2016 特定の曜日のみ表示...
-
グーグルカレンダー
-
日本の安易な祝日、多すぎ。 休...
おすすめ情報
tom04 様
ご回答いただきまして、ありがとうございます。
修正いただきましたコードにて、早速実行入力、実行させていただきました。
第二火曜日の2行目、5月の大型連休も考慮したコードに修正いただいて、本当に感謝いたしております。
ただ、12月のカレンダーに翌年の1月1日が表示されてしまいます。
そちらについても、考慮していただくことは可能でしょうか?