『締切日のカレンダー作り』(なおくん) 10日、20日、月末が支払い日(土日祝の場合は前日)で、その5日前と4日前が締切なので、そのカレンダーを作成したいです。 今はカレンダーを目でみて数えています。 < 使用 Excel:unknown、使用 OS:unknown > ---- 少し落ち着きましょう。 まず↓と二重投稿になっているので対処することをおすすめします。 [[20210625195057]] 『締め日のカレンダー作り』(なおくん) つぎに、回答者には貴方のPC画面は見えませんから、頑張って行・列を含め、シートのレイアウトを伝えていただかないとさっぱりわかりません。 また、今回の質問では【休日】が絡んでくるので、どこかにそのリストを用意する必要があるとおもいます。 (もこな2) 2021/06/25(金) 20:10 ---- おはよ〜ございます ^^ 遠大なご計画をお持ちのご様子なので まずは、、、千里の道も一歩から。。。で ^^; 国民の休日マスター、の作成など。ご勘案の砌、何かの足しにでも。。。m(_ _)m まず内閣府のHPにあるsyukujitsu.csvをDLしてこのマクロを記述するブックと 同じフォルダにほり込んじゃってください。 csvなので。その、そのまま開いてしまえば取り込めますけどね。あえて、VBAの お勉強みたいな感じです。( ̄▽ ̄) あとは、これに、御社特有の休日等があれば、登録すれば休日マスタが出来ると思います。^^; Option Explicit Sub OneInstanceMain() Const sFnm As String = "syukujitsu.csv" Dim i As Long Dim n As Long Dim v() As Variant Dim sM() As Variant Dim idx() As Variant Dim tmp As Variant Dim fdNm As String Dim buf As Variant Dim t As Double t = Timer fdNm = ThisWorkbook.Path & "\" & sFnm If Dir(fdNm) = "" Then Exit Sub Open fdNm For Input As #1 Do Until EOF(1) Line Input #1, buf tmp = Split(buf, ",") If i > 0 Then If DateValue(tmp(0)) > DateSerial(2020, 12, 31) Then ReDim Preserve idx(n) idx(n) = tmp n = n + 1 End If Erase tmp tmp = Empty End If i = i + 1 If i Mod 10 = 0 Then DoEvents Loop Close #1 sM = Application.Index(idx, 0, 0) Erase idx With Worksheets("Sheet1") .UsedRange.Clear .Cells(1).Resize(UBound(sM, 1), 2) = sM .UsedRange.Columns.AutoFit End With Erase v, sM, idx MsgBox "終了 " & Format(Int(Timer - t) / 24 / 60 / 60, "hh : mm : ss") & _ Format((Timer - t) - Int(Timer - t), ".000") & " 秒" End Sub (隠居じーさん) 2021/06/26(土) 08:39 ---- 当サイトからからの引用 https://plaza.rakuten.co.jp/carrascombu/diary/201504220000/ (**) 2021/06/26(土) 10:45 ---- (隠居じーさん)さん ありがとうございます。 DLしてやってみました。 0.09秒で2021年〜2022年の情報を取得できました。^^ で、支払い日に活用。。。ん?ん?と思いましたが... 全部自動引き落としじゃんじゃん...笑 (あみな) 2021/06/26(土) 11:29 ---- 言いこと思った... 有給計画作ろ... 独り言で...すいません。 (あみな) 2021/06/26(土) 11:37 ---- 御試しいただき、ありがとうございました。 (#^^#) m(__)m (隠居じーさん) 2021/06/26(土) 11:45 ---- すみません。まだ祝日についていってないです。 支払い日が10日、20日、月末で締切日カレンダーを作成しています。今は数えて。。。 (なおくん) 2021/06/26(土) 12:09 ---- こんばんは ^^ 他にもスマートな方法がたくさん有るとは存じますが。 ほんの、一案で。 1.まず、作業列2個用意し、その一つに休日の目印を何でも良いので書き込む 2.締め日を先頭に逆戻り[日付を]遡る日数が無い場合は、中止し次の処理へ   で、最初に作業列が空白[平日]の行の二個   目の作業列に〆と書込み次へ、    3.これをカレンダーの初日から最終日まで繰り返す とかで何とか成るよぉ〜な気が。。。 気がするだけで。済みません。。。m(__)m (隠居じーさん) 2021/06/26(土) 21:33 ---- ニックネームで不快な気持ちにさせてしまったようで、すみません。 自己愛というか子供の名前です。まだ小さくて可愛いから、ちょびっとテンション上がるんです。。。 (なおくん) 2021/06/26(土) 21:47 ---- 2021 支払日  締切本店  締切営業所 到着締切 1月  8(金) 4 12/28 5 20(水) 14 13 15 29(金) 25 22 26 2月  10(水) 4 3 5 19(金) 15 12 16 26(金) 19 18 22 カレンダーというか、このような一覧を作成したいです まず、支払日が10日、20日、月末なのですが、土日祝の場合は前になります。 (なおくん) 2021/07/17(土) 07:41 ---- おはようございます ^^ なおくん[おこさんの]おげんきですか〜(*^^*)/// ちょい、整理のお手伝いだけでも、少し見にくかったので下記の様な感じでせうか 違っていましたら相違点と、 締切本店、 締切営業所、 到着締切の規則性等とセル番地 をさらに、ご説明賜れば、多数、アドバイスが有るかもしれません。。。← 多分 ^^; m(_ _)m 2021 支払日 締切本店 締切営業所 到着締切 1月 8(金) 4 12/28 5 20(水) 14 13 15 29(金) 25 22 26 2月 10(水) 4 3 5 19(金) 15 12 16 26(金) 19 18 22 (隠居じーさん) 2021/07/17(土) 09:06 ---- こんにちは、 まだ、完成してなかったんですね。 (なお)さんの掲示された一覧表の完成図は、例えが悪いですが... 今夜は、カレーライスが食べたいです。っと言っているに近いと思います。 美味しいカレーライスが食べたいのなら、準備が必要ですよね? 1.材料買ってきて 2.材料を刻んで 3.煮込む 4.食べる 最低限の準備をする。 1.ルーは、(隠居じーさん)さんが、内閣府のHPにあるsyukujitsu.csvの情報を掲示してくれました。 2.後は、ジャガイモと人参と、玉ねぎ、鶏肉などを用意しないとカレーライスはできません。 ・作業列は使用して良いかどうかの有無 ・VBAで全部するのか?ワークシート関数だけなのか?両方混ぜてしていいのか? ・規則性等とセル番地 3.いつまでの情報を取得したいのかなど、祝日の規則性を考えるのが一番大変なのではないのかと思っております。 1〜3の大変なことを、お願いします。と言っているのではないのかと思っています。 レトルトのカレーライスで良いのなら、ご自身で目で見て確認するか、毎月一覧表で計算すれば 良いと思います。     (あみな) 2021/07/17(土) 11:54 ---- 追記 もし、カレンダーが制作されていないのであれば参考までに ↓エクセルの初歩的な日付けを管理する為の、条件付き書式の例ですが  これで十分な、下準備はできるかもです。 土曜は青、日曜は赤、祝日はオレンジに!エクセルのスケジュール表で日付を色分けする方法 https://forest.watch.impress.co.jp/docs/serial/exceltips/1248376.html (あみな) 2021/07/17(土) 13:17 ---- こんばんわ ^^ 憶測で、実際のところは、なおくん さんに、お聞きしないと 解りませんが、 労使間の協定書等に、【当社規定の休日については、他の休日と重複しても 振替はしないものとする。】みたいな取り決めがあり年末年始のお休みは12 月29日〜1月3日、くらいかなぁと想像すると '締切本店 〆4 営業日前 '締切営業所 〆5 営業日前 '到着締切 締切本店 1 営業日後 みたいな、条件でせうかね??;。。。 m(__)m (隠居じーさん) 2021/07/17(土) 21:15 ---- 調子乗って自分の能力以上に回答してますけど、、レイアウトだけは欲しいですよね? [[20110209184943]] 『[談]シートレイアウトの投稿どうしてますか?』(momo) あと、回答者を乗せるテクニックも大事ですよね?本気度というかぁ、、ね?隠居じーさん さん(^^; (SoulMan) 2021/07/17(土) 21:23 ----  (^◇^)v SoulManさん。。。いつもありがとうございます。 すみませ〜〜〜ん。。。m(_ _)m。。。^^; (隠居じーさん) 2021/07/17(土) 21:31 ---- こんばんは ^^ 最近あまり、コード、書いてなかったのと、暇してましたので 書いてみました。殴り書きの様な。。。いい加減なコードです。 新規ブックで、同フォルダにsyukujitsu.csvをご用意ください。 別途書込みの特有休日とか、その他の日付判定は超、恐怖のエス パー判断です。指定期日と休日マスタの整合性とか、他、汎用性 エラー処理は一切、考量しておりません。動くだけ〜〜〜の欠陥 満載コードに付き、ご勘案の際の参考程度にお止め下さいませ。 www あってるかなぁ〜 ^^; Sheet1に祭日マスタが Sheet2にカレンダーが作成されます。 一シートにして、全て配列処理したかったのですが手抜きです。 ( ̄▽ ̄;)。。。m(_ _)m Option Explicit Sub mYcalendarMk() Dim i As Double Dim j As Long Dim x As Long Dim n As Long Dim fYmd As Double Dim eYmd As Double Dim v() As Variant Dim w() As Variant Dim idxw() As Variant Dim nh() As Variant Dim idx() As Variant Dim r As Range Dim t As Double t = Timer kYujitu_MasterMK With Worksheets("Sheet1") nh = .Cells(1).CurrentRegion.Value End With fYmd = DateSerial(2020, 12, 1) eYmd = DateSerial(2021, 12, 31) For i = fYmd To eYmd ReDim v(1 To 4) v(1) = i v(2) = Format(i, "aaa") For j = 1 To UBound(nh, 1) If i = CDbl(nh(j, 1)) Then v(3) = "NH" Exit For End If Next If Weekday(i) = 1 Or Weekday(i) = 7 Then If v(3) = "" Then v(3) = "休日" Else v(3) = v(3) & "休日" End If End If ReDim Preserve idx(n) idx(n) = v If Day(i) = 10 Or Day(i) = 20 Or Day(i) = Day(DateSerial(Year(i), Month(i) + 1, 0)) Then x = 0 Do If n - x < 0 Then Exit Do If idx(n - x)(3) = "" Then idx(n - x)(4) = "〆" Exit Do End If x = x + 1 Loop End If n = n + 1 Next n = 0 For i = LBound(idx) To UBound(idx) If idx(i)(3) = "" Then ReDim Preserve idxw(n) idxw(n) = Array(idx(i)(1), idx(i)(2), idx(i)(4)) n = n + 1 End If Next ReDim w(1 To (12 * 3) + (12 * 2), 1 To 5) i = 1: n = 1: j = 1 Do If idxw(j)(2) = "〆" And Year(idxw(j)(0)) >= 2021 Then If i = 1 Then w(n, 1) = Month(idxw(j)(0)) & "月" End If w(n, 2) = Format(Day(idxw(j)(0)), "00") & Format(idxw(j)(0), "(aaa)") w(n, 3) = idxw(j - 4)(0) w(n, 4) = idxw(j - 5)(0) w(n, 5) = idxw(j - 4 + 1)(0) i = i + 1 If i > 3 Then n = n + 2 Else n = n + 1 End If i = IIf(i > 3, 1, i) End If j = j + 1 If j > UBound(idxw) Then Exit Do If j Mod 64 = 0 Then DoEvents Loop With Worksheets("Sheet2") .Activate .UsedRange.Clear .Cells(1).Resize(, 5) = Array(Year(idxw(Int(UBound(idxw) / 2))(0)), _ "支払日", "締切本店", "締切営業所", "到着締切") .Cells(3, 1).Resize(UBound(w, 1), 5) = w Set r = Intersect(.UsedRange, .Range("A:E")) r.Offset(2, 2).Resize(r.Rows.Count - 2, 3).NumberFormatLocal = "m/d" .UsedRange.Columns.AutoFit End With MsgBox "終了 " & Format(Int(Timer - t) / 24 / 60 / 60, "hh : mm : ss") & _ Format((Timer - t) - Int(Timer - t), ".000") & " 秒" End Sub Private Sub kYujitu_MasterMK() Const sFnm As String = "syukujitsu.csv" Dim i As Long Dim n As Long Dim v() As Variant Dim sM() As Variant Dim idx() As Variant Dim tmp As Variant Dim fdNm As String Dim buf As Variant Dim zY, zM, zD, lr& fdNm = ThisWorkbook.Path & "\" & sFnm If Dir(fdNm) = "" Then Exit Sub Open fdNm For Input As #1 Do Until EOF(1) Line Input #1, buf tmp = Split(buf, ",") If i > 0 Then If DateValue(tmp(0)) > DateSerial(2020, 12, 0) Then ReDim Preserve idx(n) idx(n) = tmp n = n + 1 End If Erase tmp tmp = Empty End If i = i + 1 If i Mod 10 = 0 Then DoEvents Loop Close #1 sM = Application.Index(idx, 0, 0) Erase idx With Worksheets("Sheet1") .UsedRange.Clear .Cells(1).Resize(UBound(sM, 1), 2) = sM zY = Year(Date) - 1: zM = 12: zD = 29 lr = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 Do n = DateSerial(zY, zM, zD) .Cells(lr, 1) = n .Cells(lr, 1).Offset(, 1) = "KH" .Cells(lr, 1).NumberFormatLocal = "yyyy/mm/dd" zD = zD + 1 lr = lr + 1 If Day(DateSerial(zY, zM, zD)) = 4 Then zY = zY + 1 zM = 12 zD = 29 End If If zY = 2023 Then Exit Do DoEvents Loop .Cells(1).CurrentRegion.Sort key1:=.Columns(1), order1:=xlAscending, Header:=xlNo .UsedRange.Columns.AutoFit End With End Sub (隠居じーさん) 2021/07/18(日) 17:44 ---- 隠居じーさん 整理していただきありがとうございます。 携帯だとズレてしまうようで困っていました。 そうです。12/29から1/3までお休みです。   祝日シートを作成して、完成させた表シートを作成して、次何をすればいいか考えていました。10日、20日、月末末を特定するシートを作ってみようかと思っていました。 (なおくん) 2021/07/18(日) 22:17 ---- m(_ _)m でわ、でわ (隠居じーさん) 2021/07/18(日) 22:48 ---- あみなさん 教えていただいたエクセルの土日祝の色付けやってみました^ ^ とりあえず10日、20日、30日は目でみて入力して、 =WORKDAYで作成してみようと思います。 (なおくん) 2021/07/26(月) 10:48 ---- (なおくん)さん (隠居じーさん)さんが掲示してくださったコードでばっちり?  完成したのかしら^^; (あみな) 2021/07/27(火) 16:57 ---- いえ、まだあみなさんから教えていただいた土日祝を色付けした シートと祝日シートを作成しただけです。 せっかくなので、どうなるのかしてみたかったのですが、コードをどうしていいか分からないです。 あと理解できないのでどうしたらできるか、まだ考え中です。コードの中身を探ったりしています。 (なおくん) 2021/07/27(火) 23:28 ---- VBAの本をさっと、目を通されるか エクセル マクロの実行方法 とかで、検索してみて下さい 動かして見て、不都合があれば、こちらで、エラー番号、メッセージ 情報のアドレス確認[Soulmanさんが教えて下さったコード使用^^;] 、停止箇所等、ご提示賜れば、また、たくさんアドバイスが有るかもし れません。。。あみな さん、もおしえてくださるかも。。。← 多分。。。^^; でわでわ m(_ _)m (隠居じーさん) 2021/07/28(水) 08:00 ---- おはようございます。 あみな(VBA5級)の私では、(ヾノ・∀・`)ムリムリ (隠居じーさん)さんの掲示してくださったコードの意味の半分位しか 理解できません。調べても2〜3日は掛かるですね。 (なおくん)さんは、ご自身で作成されたカレンダーのレイアウトを (SoulMan)さんが教えてくれた、下記コードを利用して早くここのスレッドに アップすることですね。 [[20110209184943]] 『[談]シートレイアウトの投稿どうしてますか?』(momo) >せっかくなので、どうなるのかしてみたかったのですが、コードをどうしていいか分からないです。 >あと理解できないのでどうしたらできるか、まだ考え中です。コードの中身を探ったりしています。 自分で考えるより、シートレイアウトを掲示すれば、 (隠居じーさん)さんが手取り足取り教えてくれます。 参照のズレも全部治してくれますよ。きっと...^^ (あみな) 2021/07/28(水) 09:43 ---- ありがとうございます。 マクロもVBAも全く分からないので、アマゾンでVBAの本買いました。 自動化なのですね。。。 (なおくん) 2021/07/29(木) 22:24 ---- こんばんは 消込作業のスレッドと、カレンダーのフォームは もしかして連動した内容ですか? (あみな) 2021/07/29(木) 22:42 ---- あみなさん おはようございます。 ありがとうございます、別ものです。 消し込みは、5年後に紙の伝票はなくなると同時に必要なくなります。それまで待とうかな。。。 カレンダーは、できるなら貸し借りカレンダーも作成したいので、理解したいなぁと思います。 無理だと思われてるとは思いますが、今までΣしか使ったことなかった私にとっては、この2ヶ月でかなりエクセル解るようになったので、気長に〜^_^ 隠居じーさんに2つ目のスレッドで書いていただいたことをしてみるのと、本届いたらコードの実行をしてみます。 せっかくコード書いていただいてその話してるのに、マクロもVBAも聞いたことないなんて言われたらイライラしますよね、すみません。 (なおくん) 2021/07/31(土) 06:33 ---- >>せっかくコード書いていただいてその話してるのに、 >>マクロもVBAも聞いたことないなんて言われたらイラ >>イラしますよね、すみません。 ↑ これ、私の事でしたら。。。(@  @) ぜんぜん、いらついて、いません。。。(^◇^) 楽しく、お勉強させていただいておりまっす。 【消し込み】、も挑戦して。。。^^; VBA、お勉強!、がんばってくださいね〜〜〜。。。(#^^#)/// 元、隠居じーさん m(__)m (隠居Z) 2021/07/31(土) 09:04