No.4です。
> Label1.Captionに出荷日
> Textbox1.Textに出荷日-4の日付
> Textbox4.Textに出荷日-1の日付
以下を試してみてください。
コマンドボタンをクリックすると、テキストボックスに日付が表示されるようにするとして、
( Label1.Caption に日付が表示されていることが前提です )
◆ コマンドボタンのクリックイベントに↓
'--------------------------------
Private Sub CommandButton1_Click()
Dim myDate As Date
Dim myHoliday As Range
Const Nissu As Integer = -4
If IsDate(Me.Label1.Caption) Then
myDate = CDate(Me.Label1.Caption)
On Error GoTo ErrHandler:
'---休日リスト
Set myHoliday = Workbooks("カレンダーマスター.xls").Worksheets("Sheet1").Range("A1:A200")
Me.TextBox1.Text = fWorkday(myDate, Nissu, myHoliday)
Me.TextBox2.Text = fWorkday(myDate, Nissu + 1, myHoliday)
Me.TextBox3.Text = fWorkday(myDate, Nissu + 2, myHoliday)
Me.TextBox4.Text = fWorkday(myDate, Nissu + 3, myHoliday)
Else
Me.TextBox1.Text = ""
Me.TextBox2.Text = ""
Me.TextBox3.Text = ""
Me.TextBox4.Text = ""
End If
Set myHoliday = Nothing
Exit Sub
ErrHandler:
If Err.Number = 9 Then
MsgBox "カレンダーマスター.xls が開いているか確認してください。", vbInformation
End If
End Sub
'--------------------------------
◆ 標準モジュールに↓
( No.4 のと差し替えてください。値渡し ByVal にするなど変更しています )
'--------------------------------
Function fWorkday(ByVal d As Date, n As Integer, h As Range) As Date
Dim ret As Integer
Dim cntDay As Integer
Do Until cntDay = n
If n > 0 Then
d = d + 1
Else
d = d - 1
End If
ret = WorksheetFunction.CountIf(h, d)
If n > 0 Then
If ret = 0 Then
cntDay = cntDay + 1
End If
Else
If ret = 0 Then
cntDay = cntDay - 1
End If
End If
Loop
fWorkday = d
End Function
'--------------------------------
お礼
shiotan99さん、どうもありがとうございました。 私がやりたかったことが、スッキリ解決しました! 本当に本当に大感謝しております。 どうもありがとうございました!!!