|
▼nonoka さん:
こんにちは
アップされたコード、各種変数がそれぞれ14、そこへの値のセットも14行、処理も14・・
というところが気になりましたので、変数を配列にして、変数定義も1行、値のセットも1行
処理もループでコンパクトに・・・・
ということでコードを書き始めたんですが、考え直しました。
コードはコンパクトになったとしても、そのためのバグつぶしに時間がかかるかもしれませんし
今後の、そちらでの運用過程で追加改訂なども考えられ、その時に、nonokaさんが理解して
コード対応を行わなければいけないですよね。
なので、とりあえず・・・というか・・・最終的に。
以下のプロシジャを追加してください。
Function GetWorkDate(ByVal dt As Date) As Date
Dim a As Variant
With Sheets("holiday")
Do
a = Application.Match(CDbl(dt), .Range("B4", .Range("B" & .Rows.Count).End(xlUp)), 0)
If Not IsNumeric(a) Then Exit Do
dt = dt + 1
Loop
End With
GetWorkDate = dt
End Function
で、現在、N列〜AA列に日付をセットしておられるところ、たとえば
.Range("N1").Value = .Range("K1").Value + Val(s(1))
ここを
.Range("N1").Value = GetWorkDate(.Range("K1").Value + Val(s(1)))
こんなふうに変更してみてください。
セットしようとしている日付が休日リストにあった場合、翌日、翌々日。。。と
一番近い営業日にかえてセットします。
|
|