Excel VBA質問箱 IV

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

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


3317 / 13644 ツリー ←次へ | 前へ→

【62932】日付の再計算 slipknot 09/9/23(水) 10:00 質問[未読]
【62933】Re:日付の再計算 kanabun 09/9/23(水) 11:31 発言[未読]
【62934】Re:日付の再計算 kanabun 09/9/23(水) 11:53 発言[未読]
【62935】Re:日付の再計算 slipknot 09/9/23(水) 22:30 お礼[未読]

【62932】日付の再計算
質問  slipknot E-MAIL  - 09/9/23(水) 10:00 -

引用なし
パスワード
   仕事を完了しなければならない日付があらかじめ設定されているがその日付が土・日等のカレンダー上で休日であった場合にその前の平日日付へ再計算させるようなマクロを作りたいのですがどのような構文が好ましいのでしょうか?
FindやFindNext構文を使って試みてはみましたが旨くできませんでした。
宜しくお願いします。

【62933】Re:日付の再計算
発言  kanabun  - 09/9/23(水) 11:31 -

引用なし
パスワード
   ▼slipknot さん:
>仕事を完了しなければならない日付があらかじめ設定されているがその日付が土・日等のカレンダー上で休日であった場合にその前の平日日付へ再計算させるようなマクロ

以下のような考え方でどうですか?

1.単純計算で求めた「締切日」を初期値とする

2.締切日が土日でなくなるまでLoopする
  Do Until Weekday(締切日) <> 土日
   締切日 = 締切日 - 1
  Loop

【62934】Re:日付の再計算
発言  kanabun  - 09/9/23(水) 11:53 -

引用なし
パスワード
   ↑コードにするとこんな感じです。
  ↓

'(A列に元の締切日、B列に土日を繰り上げ補正後の締切日)
Sub 補正締切日()
 Dim c As Range
 Dim 締切日 As Date
 
 For Each c In Range("A2", Cells(Rows.Count, 1).End(xlUp))
   If IsDate(c.Value) Then
     締切日 = c.Value
     Do Until Weekday(締切日, vbMonday) < 6
       締切日 = 締切日 - 1
     Loop
     c(1, 2).Value = 締切日
   End If
 Next
End Sub

 A    B
締切日    補正締切日
2009-9-30(水)    2009-9-30(水)
2009-10-2(金)    2009-10-2(金)
2009-10-4(日)    2009-10-2(金)
2009-10-6(火)    2009-10-6(火)
2009-10-8(木)    2009-10-8(木)
2009-10-10(土)    2009-10-9(金)
2009-10-12(月)    2009-10-12(月)
2009-10-14(水)    2009-10-14(水)
2009-10-16(金)    2009-10-16(金)
2009-10-18(日)    2009-10-16(金)

【62935】Re:日付の再計算
お礼  slipknot  - 09/9/23(水) 22:30 -

引用なし
パスワード
   ご回答有難うございます。

下手に文字列の検索をする必要が無かったんですね(汗)
マクロ初心者なもので無駄に変数とかを定めて混乱していました。
まさか2つの変数で済んでしまうとは・・・

早速明日にでも仕事用に応用してみます。

kanabunさん本当に有難うございました。


▼kanabun さん:
>↑コードにするとこんな感じです。
>  ↓
>
>'(A列に元の締切日、B列に土日を繰り上げ補正後の締切日)
>Sub 補正締切日()
> Dim c As Range
> Dim 締切日 As Date
> 
> For Each c In Range("A2", Cells(Rows.Count, 1).End(xlUp))
>   If IsDate(c.Value) Then
>     締切日 = c.Value
>     Do Until Weekday(締切日, vbMonday) < 6
>       締切日 = 締切日 - 1
>     Loop
>     c(1, 2).Value = 締切日
>   End If
> Next
>End Sub
>
> A    B
>締切日    補正締切日
>2009-9-30(水)    2009-9-30(水)
>2009-10-2(金)    2009-10-2(金)
>2009-10-4(日)    2009-10-2(金)
>2009-10-6(火)    2009-10-6(火)
>2009-10-8(木)    2009-10-8(木)
>2009-10-10(土)    2009-10-9(金)
>2009-10-12(月)    2009-10-12(月)
>2009-10-14(水)    2009-10-14(水)
>2009-10-16(金)    2009-10-16(金)
>2009-10-18(日)    2009-10-16(金)

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