前回の続きで質問させていただきます。
こちらの質問で大きな問題を解消し、問題はほぼクリア致しました。
一応、業務ロジックを説明しますと、
このツールを使用した日時作業は、
昼、夕方の二回で行われ、
昼は前日の18:00~当日の12:00までに作成されたファイルの選択。
夕方は当日の12:00~18:00までに作成されたファイルの選択となっています。
ただここで、一つアクションを加えたい。
そのアクションというのが、前日が休日だった場合のファイル選択です。
土曜、日曜もファイルが作成されていて、
休み明けの最初の昼にこのツールを使用した際のファイル選択は、
先週の金の18:00~当日の12:00までに作成されたファイルの選択を行いたいです。
つまり3日前までに遡ってデータ取得を行います。
これだけであるのであれば、
Dim threeDaysBefore = Now - 3などをして、
三日前、二日前、一日前のそれぞれのファイル名を生成すればよいのですが、
例えば、祝日後のファイル選択は二日しか遡る必要は無いし、
祝日、土日と続いた場合は4日遡る必要があります。
そういった場合のロジックとして
国民カレンダー上、赤日になっている日付分だけを遡り、
ファイル名を生成して、ファイル選択することは可能でしょうか。
よろしくお願いします。
追記
自分で編集したコードは最終的に下記のようになりました。
夕方
Private Sub CommandButton1_Click() Dim befIdx As Long ' リストボックスクリア lstConcat.Clear '1a+mmddのファイル名を生成 Dim s1File As String s1File = "1a" s1File = s1File & Right("0" & Month(Now), 2) s1File = s1File & Right("0" & Day(Now), 2) 'yyyymmdd-1のファイル名を生成 Dim s2File As String s2File = Year(Now) s2File = s2File & Right("0" & Month(Now), 2) s2File = s2File & Right("0" & Day(Now), 2) s2File = s2File & "-1" '命名ルールで-1 -2があるので-1だけという処理を追加してるだけです。 ' ファイル名に1a+mmddと付くファイルとyyyymmdd-1の付くファイルを選択し、移動 For befIdx = 0 To lstBefore.ListCount - 1 If InStr(lstBefore.List(befIdx), s1File) > 0 Then lstConcat.AddItem lstBefore.List(befIdx) End If If InStr(lstBefore.List(befIdx), s2File) > 0 Then lstConcat.AddItem lstBefore.List(befIdx) End If Next End Sub
昼
Private Sub CommandButton3_Click() Dim befIdx As Long ' リストボックスクリア lstConcat.Clear '今日のシステム日時を格納 Dim today As Date today = Now '昨日のシステム日時を格納 Dim yesterday As Date yesterday = Now - 1 '1a+mmddのファイル名を生成 Dim s1File As String s1File = "1a" s1File = s1File & Right("0" & Month(today), 2) s1File = s1File & Right("0" & Day(today), 2) '1a+mmdd(-1d)のファイル名を生成(-1dは前日の意 Dim s2File As String s2File = "1a" s2File = s2File & Right("0" & Month(yesterday), 2) s2File = s2File & Right("0" & Day(yesterday), 2) 'yyyymmdd-1のファイル名を生成 Dim s3File As String s3File = Year(today) s3File = s3File & Right("0" & Month(today), 2) s3File = s3File & Right("0" & Day(today), 2) s3File = s3File & "-1" 'yyyymmdd(-1d)のファイル名を生成 Dim s4File As String s4File = s4File & Year(yesterday) s4File = s4File & Right("0" & Month(yesterday), 2) s4File = s4File & Right("0" & Day(yesterday), 2) s4File = s4File & "-1" ' ファイル名に1a+mmddと付く当日及び前日のファイルとyyyymmdd-1の付くファイルを選択し、移動 For befIdx = 0 To lstBefore.ListCount - 1 If InStr(lstBefore.List(befIdx), s1File) > 0 Then lstConcat.AddItem lstBefore.List(befIdx) End If If InStr(lstBefore.List(befIdx), s2File) > 0 Then lstConcat.AddItem lstBefore.List(befIdx) End If If InStr(lstBefore.List(befIdx), s3File) > 0 Then lstConcat.AddItem lstBefore.List(befIdx) End If If InStr(lstBefore.List(befIdx), s4File) > 0 Then lstConcat.AddItem lstBefore.List(befIdx) End If Next End Sub
追記2
どうやら祝日判定には新たにプラグイン的なものを使用しないといけないみたいですね^^;
ちょっと難しそうなので
土日のみで解決したいと思います
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/23 00:06
2017/05/23 00:08
2017/05/23 00:25
2017/05/23 00:26
2017/05/23 00:31
2017/05/23 00:34