質問: excel2016 特定の曜日のみ表示するカレンダー(スケジュール表)を作成したいです excel2016 特定の曜日のみ表示するカレンダー(スケジュール表)を作成したいです。 添付のexcelファイルは、関数や表示形式の設定はしておりません。 下記の条件を満たす関数またはvba(マクロ)のコードを、どなたか教えてください。 内訳 ・添付ファイルでは、6月までしか表示されておりませんが、1つのシートに1月~12月まであります。 ・a1の年度を変更したら、その年の各月の火曜日と木曜日の日にちのみを表示する。 ・火曜日、または木曜日が祝日の場合は、繰り下げた日にちを表示する。 ・会社の定休日は、土日祝日と12/31~1/3となります。 ・同じブックの別シート(シート2)に、1年間の祝日と会社の定休日を入力し、名前の定義で「祝日等」にしております。 どうぞよろしくお願いいたします。
回答: あ”~~~! 細かい検証をしていませんでした。 今までのコードは消去し ↓のコードにしてください。 尚、よく確認してみると第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