[[20190424082707]] 『VBA カレンダーから稼働日5日前を判断し処理をす』(いち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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行目の間違いです。


A1に2019
A2に4/1 B2に4/2 C2に4/3 D2に4/4 と2行目に4月
A3に1 B3は空白(4/1が休日の場合で4/2が稼働日の場合) 

 >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.