|
こんにちは。
初めて質問いたします。
ユーザー定義関数で、シート上での結果とコード内での結果に違算があり、原因がつかみかねています。
マイクロソフトのユーザー定義関数の制限によるといろいろ書いてありますが、
特段プロパティもメッソドも使わず、セル値を変更することもなく、ただ参照しているだけのコードです。具体的には以下の通りです。
ワークシートDB とワークシートHolidayがあり、DBにはテーブルがセットされ、以下のフィールドとデータがあります。
ワークシートDBの一部
PerDay Quantity StDate EnDate
14.4 400 20/1/7 =EnDate([@PerDay],[@Quantity],[@StDate])
ワークシートHoliday、セルA1から下方へセット
Holiday
2020/1/1
2020/1/2
2020/1/3
2020/1/4
2020/1/5
2020/1/12
2020/1/19
2020/1/25
2020/1/26
2020/2/1
2020/2/2
2020/2/9
Function EnDate(ByVal PerDay As Single, Quantity As Single, StDate As Date) As Date
'日産、生産数量、開始日から終了日を休日リストを参照しつつ求める
Dim wsHoliday As Worksheet
Dim ProdDays As Single, d As Date, h As Range
ProdDays = Quantity / PerDay '生産日数をセット
Set wsHoliday = Worksheets("Holiday") 'ワークシートのセット
d = StDate '基点をセット
Do Until ProdDays <= 0 '生産日数が0以下になればDoLoop終了
For Each h In wsHoliday.Cells(1, 1).CurrentRegion '休日それぞれについて
If d = h.Value Then '日付と休日が一致すれば
ProdDays = ProdDays + 1 '生産日数を一日増やす
End If
Next h
ProdDays = ProdDays - 1 'ループ一回ごとに生産日数を一日減らす
d = d + 1 '次の日をセット
Loop
EnDate = d '終了日を返す
End Function
結果、シート上では2020/2/4、コード実行の結果は2020/2/11 でした。
シート上では休日が加算されていない感じですね。
原因がつかめないので、ChangeイベントでEnDateを実行するようにしたのですが、今後の知見のためにもご教授いただきたくよろしくお願いいたします。
|
|