|
▼nonoka さん:
おはようございます
まず、↑で、コードは元に戻しましょうと申し上げましたが、
もしK列自体も休日なら翌日にしておく必要があれば元に戻さず、
連絡した対処でお願いします。
で、N;AA の日付については、申し上げた通り、関数側で対処が必要です。
この対処を、今のところ以下のように考えています。
たとえば各セルに
=IF(K10="","",IF(AG10=0,"",$K10+AD10+AE10+AF10+AG10))
=IF(K10="","",IF(AH10=0,"",$K10+AD10+AE10+AF10+AG10+AH10))
=IF(K10="","",IF(AL10=0,"",$K10+AD10+AE10+AF10+AG10+AH10+AI10+AJ10+AK10+AL10))
こんなようになっているとします。
これを、VBA側で、たとえばGetWorkDate といったユーザー定義関数を準備して、
=GetWorkDate(K10,AD19,AE10,AF10,AG10) というように書き直します。
この機能は
K10 が空白なら空白
K10に値がある場合は、列挙された最後のセル(この場合はAG10)が空白なら空白。
そうでない場合は、列挙されたものを合計。
こういったものを考えています。
このGetWOrkDateの中で、現在K列で行っているような休日チェックを行います。
ちょっと気になっているのは、現在、この処理を、VBAの中でも、負荷の大きな
Findメソッドを使っている点です。1つ、2つならどうってことはないのですが、
おそらく膨大な数のセルに式が配置されていると思いますので、ここを少しでも
軽くできるかどうかがポイント。
土日も翌日回しということなら、ロジックの中で シート関数のNETWORKDAYS等も
使えるかな?と思っているのですが、いやいや、そうではない、あくまで休日リスト
の日付だけを翌日回しということなら、Findを使わざるを得ないかも。
また、休日リストが、現在のように B4:S200 ではなく 1列にずらっとセット
してあれば、Findより、やや軽めのMATCH関数が使えます。
そこはいかがでしょう?
|
|