- ベストアンサー
休日を除いた日数の計算方法
- エクセルのVBAを使って休日を除いた日数を計算する方法について教えてください。
- ソースコードの意味がわからなくて詰まっています。アドバイスをいただけると助かります。
- セルの値を参照して、休日の場合は日数を減算し、それ以外の場合は通常の日数として計算する方法が知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。補足ありがとうございました。 祝日の延長を考慮せずに、私なりに下記を組んで見ました。参考にしてください。祝日を考慮するところが、本当は知りたかったかも知れません。土日で祝日と言うケースもあり、結構難しいですね。 Sub test01() For i = 1 To 31 '1日から31日まで d1 = Cells(i, 1) 'A列のデータ sn = Cells(i, 3) '作業に必要日数。C列データ n = 0 '加える日数は0よりスタート While sn > 0 '作業日数が0になるまで繰り返し ' 土日の判定。第3タイプ。土=5、日=6 wd = WorksheetFunction.Weekday(d1 + n, 3) If wd = 5 Or wd = 6 Then '土日か Else sn = sn - 1 '土日なら作業日数より-1 End If n = n + 1 '更に次ぎの日を土日かチェックのため '+1 Wend Cells(i, 4) = d1 + n - 1 'D列に求めた日をセット '両端入れのため-1 Next i End Sub ------- 2003/7/1 1 2003/7/1 2003/7/1 2 2003/7/2 2003/7/1 3 2003/7/3 2003/7/1 4 2003/7/4 2003/7/1 5 2003/7/7 2003/7/1 6 2003/7/8 2003/7/1 7 2003/7/9 2003/7/1 8 2003/7/10 2003/7/1 9 2003/7/11 2003/7/1 10 2003/7/14 2003/7/1 11 2003/7/15
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
>「休日を除いた日数」を求めたいと言うことのようですが スタート日や終わりの日はどのセルにセットされているんですか。 ・あとエクセルでのWEEKDAY関数に当たるような 判定はどこでやっているのですか。 ・祝日を指定する情報(日)はどこにありますか。 ・ロジックはどういうことになるのですか。 ●具体的に個別のプログラムコードを質問する場合は、 ロジックの概略や各行ステップのコメントをいれるとかして、回答者の負担を減らし、かつ正確理解を助けるべきではと感じました。回答者へ与えるテストではないのですから。 プログラムコードは色々の組みかたがあり、他人にはわかりにくいものです。 私の理解力不足で言っている面はあるとおもいますが、よろしく。
お礼
ありがとうございました。
補足
質問が適切でなくて申し訳ありませんでした。 下記のように訂正いたしましたので、宜しくお願いします。 エクセルシートのC列に決められた作業日数が入力されており、実際には、土日を含まず何日後に出来るか、実際に何日必要かというものを計算できるようにしたいとロジックを組んでいます。 Sub 実際の日数() Dim POWPOS As Integer Dim COLPOS As Integer Dim POWPOS2 As Integer Dim COLPOS2 As Integer Dim NO As Integer 'C列にある指定日数の残数カウンター Dim KIKAN As Integer 'D列に結果をかえすエリア(休日を考慮した日数) Set WS = Worksheets("Sheet1") 'シート1の内容をWS:ワークに代入 '計算 POWPOS = 1 COLPOS = 2 POWPOS2 = 1 COLPOS2 = 3 KIKAN = 0 NO = WS.Cells(POWPOS2, COLPOS2) 'C1の値を指定日数の残数カウンターに代入 Do If WS.Cells(POWPOS, COLPOS) = Y Then 'B列に休日フラグ:Yがあるかどうか KIKAN = KIKAN + 1 'あれば、D列にかえす日数に1を加える Else KIKAN = KIKAN + 1 'なければ、D列にかえす日数に1を加える NO = NO - 1 'なければ、指定日数の残数カウンターから1を減らす End If POWPOS = POWPOS + 1 Loop Until NO = 0 COLPOS2 = COLPOS2 + 1 WS.Cells(POWPOS2, COLPOS2) = KIKAN End Sub A1からA31まで2003/07/01が入力されています。 B1からB31までは隣のA列の日付が土日であればYが入力されています C1からC31までは日数が入力されています。 D1からD31まではC列の値をみて土日を含まない値を計算して出力するようにしています。 例:A1から2003/07/01から入力されている場合、C1が6であればD1には土日、2日を除く8が出力されるようにしています。 以上の作業をC31が終わるまで繰り返すようにしています。
お礼
ご丁寧な回答ありがとうございました。 参考させていただきます。 また、宜しくお願いします。