2017-11-15 11 views
0

次のコードがあります。これは今日の+ 6日以外の日付のExcelシートのすべての結果を除外しています。 問題は、私が月曜日にそれを実行すると、私は日曜日にヒットしたということです。 結果が土曜日または日曜日でない限り、常に現在の日付に6日を追加するように変更する必要があります。その後、月曜日を意味する最初の就業日を取ることにします。現在の日付に追加するときの週末日を除外します。

Public Sub GRP_SC_Filter1() 
    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 


    Dim DelDate As Long 


    DelDate = DateSerial(Year(Date), Month(Date), Day(Date) + 6) 


    LR = Sheets("Goods Receivable Planning").Range("A" & Rows.Count).End(xlUp).Row 
    Cells.AutoFilter Field:=13, Criteria1:="<>" & DelDate 

    ALR = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 
    If ALR > 2 Then 
     Range("A2:A" & LR).SpecialCells(xlCellTypeVisible).Select 
     Range("A2:A" & LR).Delete 
     Range("A1").Activate 
    End If 
    Cells.AutoFilter 
' MsgBox "Finished deleting rows" 
    Application.DisplayAlerts = True 
    Application.ScreenUpdating = True 
End Sub 

私が必要とするものに変身させることができれば、本当にありがとうと思います。私は正直に立ち往生しています。前もって感謝します!

+0

あなたは 'にして外観を持っていたことがあります= NetworkDays() 'ワークシート関数?これにより、2つの日付間の作業日数が計算され、必要なものを達成するのに役立ちます。 – Calico

+0

週末が「土、日」の場合は、Excelの関数「WORKDAY」を使用できます。それ以外の場合は、 'WORKDAY.INTL'を使用して週末の日を定義してください。どちらもVBAでは 'WorksheetFunction'オブジェクトのメンバとして利用できます。 –

答えて

0

この機能は、あなたが欲しいものを行う必要があります。

Function GetNextWorkingDay(dt As Date) As Date 
    Select Case Weekday(dt) 
    Case 1 
     GetNextWorkingDay = DateAdd("d", 1, dt) 
    Case 7 
     GetNextWorkingDay = DateAdd("d", 2, dt) 
    Case Else 
     GetNextWorkingDay = dt 
    End Select 
End Function 
0

機能weekDayはあなたをHEPすることができます。 2番目のパラメータは、vbMondayは月曜日が1であると言うだろうか日のリターン1、定義土曜日= 6、日曜日= 7

ので、一つの方法は、次のようになります。

deldate = DateSerial(Year(Date + 3), Month(Date + 3), Day(Date + 3) + 6) 
Do While (Weekday(deldate, vbMonday) >= 6) 
    deldate = deldate + 1 
Loop 
関連する問題