[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA カレンダーから稼働日5日前を判断し処理をする』(いち)
現在、下記のコードでインプットボックスにより稼働日で5日前の日付を入力し、その日より前の日付のデータが全て消えるようなマクロを使用しています。
Sub test_click()
Dim tdate, d1 As Date
Dim flag As Boolean
tdate = Date
With Sheets("data")
If .AutoFilterMode Then .AutoFilter.Range.AutoFilter 'フィルター
.Range("M1").AutoFilter
d1 = Application.InputBox(tdate & "より稼働日5日前の日付を入力して下さい。(入力例:18/7/2)", Type:=1) 'インプットボックスにて日付指定 If d1 = 0 Then Exit Sub '0の場合はマクロ終了
.AutoFilter.Range.AutoFilter Field:=13, Criteria1:="<=" & d1 '指定日以前の日付を表示
If WorksheetFunction.Subtotal(103, .AutoFilter.Range.Columns(13)) > 1 Then '削除
.AutoFilter.Range.Offset(1).Resize(.AutoFilter.Range.Rows.Count - 1).EntireRow.Delete flag = True End If
.AutoFilter.Range.AutoFilter
If flag Then MsgBox d1 + 1 & "から" & tdate & "のデータは削除していません。" Else MsgBox "データがありません" End If
End With
End Sub
そこでインプットボックスに毎回稼働日を入力しなくてもいいようにカレンダーを下記の書式で作成しました。
A2に4/1(=DATE(YEAR(A$1),MONTH(A$1)+3,1))B3に4/2(=A2+1)以降4/30まで
3列目には4月の休日の日付けの所に1が入力されています。それ以外は空白。
A4には5/1、以降5/31まで
5列目には4月と同様に休日に1。
・・・・AE24が3/31の稼働カレンダー
このカレンダーを参考にして今日の日付から稼働日5日前を判断させるマクロにするためにはどうしたらいいのでしょうか?
(土日祝関係無しです。)
ご教授頂きたいです。宜しくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows10 >
よく分からないですねー
>A2に4/1(=DATE(YEAR(A$1),MONTH(A$1)+3,1))B3に4/2(=A2+1)以降4/30まで >3列目には4月の休日の日付けの所に1が入力されています。それ以外は空白。 >A4には5/1、以降5/31まで
1.そのまま再現すると こんなものになりますけど・・合っていないですよね?
行 ____A____ ____B____ _C_ 1 2019/1/24 2 2019/4/1 3 2019/4/2 4 2019/5/1 2019/4/3 5 2019/4/4 : : 30 2019/4/29 1
2.休日リストは休日だけで書き出す方が楽じゃないですか?
(半平太) 2019/04/24(水) 12:20
>>A2に4/1(=DATE(YEAR(A$1),MONTH(A$1)+3,1))B3に4/2(=A2+1)以降4/30まで
B3はB2の間違いです。
>>3列目には4月の休日の日付けの所に1が入力されています。それ以外は空白。
3行目の間違いです。
>2.休日リストは休日だけで書き出す方が楽じゃないですか?
このカレンダーを別のブックでも使用しており、統一して使用できればと思ってます。
(いち) 2019/04/24(水) 12:45
1.結局、休日カレンダーの全体範囲はどうなるんでしょうか?
1ケ月が2行なので、1年分だと「A2:AE25」かなと思いますが・・
2.あとちょっと引っかかるのが →「土日祝関係無しです」の意味
世の中の「土日祝」は、この5日前の計算とは無縁で、 休日カレンダーの「1」が立っている日付だけが非稼働日である、と言う意味ですか?
(半平太) 2019/04/24(水) 13:56
>1.結局、休日カレンダーの全体範囲はどうなるんでしょうか?
1ケ月が2行なので、1年分だと「A2:AE25」かなと思いますが・・
その通りです。
>2.あとちょっと引っかかるのが →「土日祝関係無しです」の意味
世の中の「土日祝」は、この5日前の計算とは無縁で、
休日カレンダーの「1」が立っている日付だけが非稼働日である、と言う意味ですか?
こちらもその通りです。
(いち) 2019/04/24(水) 15:16
休日カレンダーがあるシート名が「カレンダー」だとした場合、
求める日付 = Sheets("カレンダー").[WORKDAY.INTL(TODAY(),-5,"0000000",IF(A3:AE5=1,A2:AE4,0))]
(半平太) 2019/04/24(水) 15:29
訂正
>求める日付 = Sheets("カレンダー").[WORKDAY.INTL(TODAY(),-5,"0000000",IF(A3:AE5=1,A2:AE4,0))] ↓ ↓ 求める日付 = Sheets("カレンダー").[WORKDAY.INTL(TODAY(),-5,"0000000",IF(A3:AE25=1,A2:AE24,0))]
(半平太) 2019/04/24(水) 17:49
数式ありがとうございます。このような数式を使ったことがなかったので、なんでかなと悩んでました・・・
年度が変わるとき等まだまだ改善必要になりそうですが、半平太様に教えて頂いたこちらを活用させて頂きます。
またつまづいたら質問させて頂くかもしれません。
ありがとうございました。
(いち) 2019/04/25(木) 14:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.