Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


285 / 74190 ←次へ | 前へ→

【79545】Re:基準日の変更
回答  γ  - 17/12/24(日) 10:42 -

引用なし
パスワード
   具体的な例を示すと言うことは例えばこんなことです。

休日テーブルは下記のとおりとする
  A列
1 2017/12/2
2 2017/12/3
3 2017/12/9
4 2017/12/10
5 2017/12/16
6 2017/12/17
7 2017/12/23
8 2017/12/24
9 2017/12/28
10 2017/12/29

希望納期 2017/12/28 は休日であった。
実際の納期は、それの直前の稼働日である 27 になる。
リードタイムを3日とすると、
さらに3日遡った稼働日である、22日となる。

21
22    ←求める日
23 休日
24 休日
25
26
27    ← 納期
28 休日  ← 希望納期

------------------
仮に以上のようなことだとすると、以下のコードでどうか。
微修正はそちらで願いたい。
(B1セルに 2017/12/28 が入力されているとします)

Sub test()
  Dim myAry As Range
  
  Set myAry = Range("A1:A10")
  Debug.Print myDay(Range("B1"), 3, myAry) '→ 2017/12/22 が出力される
End Sub
Function myDay(stDay As Range, myVal As Long, myAry As Range) As Date
  'stDay = 納期希望日
  'myVal = リードタイム
  'MyAry = 定休日データ
  
  Dim k As Long, j As Long
  Dim 納期 As Date
  Dim d As Date
  
  d = stDay.Value
  
  '(1)直前の稼働日を納期とする
  k = 0
  Do
    If WorksheetFunction.CountIf(myAry, d - k) = 0 Then
      納期 = d - k
      Exit Do
    End If
    k = k + 1
  Loop
  
  '(2) リードタイムの考慮
  k = 1
  Do
    If WorksheetFunction.CountIf(myAry, 納期 - k) = 0 Then
      j = j + 1
      If j = myVal Then
        myDay = 納期 - k
        Exit Function
      End If
    End If
    k = k + 1
  Loop
End Function

53 hits

【79542】基準日の変更 T-K 17/12/24(日) 0:46 質問[未読]
【79543】Re:基準日の変更 γ 17/12/24(日) 1:16 発言[未読]
【79544】Re:基準日の変更 T–K 17/12/24(日) 7:28 質問[未読]
【79545】Re:基準日の変更 γ 17/12/24(日) 10:42 回答[未読]
【79546】Re:基準日の変更 T-K 17/12/24(日) 15:31 お礼[未読]
【79547】Re:基準日の変更 γ 17/12/24(日) 21:00 発言[未読]
【79548】Re:基準日の変更 T-K 17/12/24(日) 22:44 発言[未読]
【79549】Re:基準日の変更 γ 17/12/24(日) 23:32 発言[未読]
【79554】Re:基準日の変更 T–K 17/12/25(月) 20:52 お礼[未読]
【79555】Re:基準日の変更 γ 17/12/25(月) 21:57 発言[未読]

285 / 74190 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free