Excel VBA質問箱 IV

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

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


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

【31789】稼働日以外を除外して計算したい。 茶眠。 05/11/30(水) 9:37 質問[未読]
【31791】Re:稼働日以外を除外して計算したい。 やま 05/11/30(水) 11:14 発言[未読]
【31792】Re:稼働日以外を除外して計算したい(追加) やま 05/11/30(水) 11:21 発言[未読]
【31801】Re:稼働日以外を除外して計算したい(追加) ichinose 05/11/30(水) 12:50 発言[未読]
【31805】Re:稼働日以外を除外して計算したい(追加) 茶眠。 05/11/30(水) 13:18 質問[未読]
【31810】Re:稼働日以外を除外して計算したい(追加) ichinose 05/11/30(水) 13:44 発言[未読]
【31915】ありがとうございました。 茶眠。 05/12/2(金) 10:17 お礼[未読]
【31806】Re:稼働日以外を除外して計算したい(追加) 茶眠。 05/11/30(水) 13:21 お礼[未読]
【31809】Re:稼働日以外を除外して計算したい(追加) Kein 05/11/30(水) 13:39 発言[未読]
【31813】Re:稼働日以外を除外して計算したい(追加) やま 05/11/30(水) 14:22 お礼[未読]
【31917】ありがとうございました。 茶眠。 05/12/2(金) 10:22 お礼[未読]
【31916】ありがとうございました。 茶眠。 05/12/2(金) 10:19 お礼[未読]

【31789】稼働日以外を除外して計算したい。
質問  茶眠。  - 05/11/30(水) 9:37 -

引用なし
パスワード
   こんにちは。

ユーザーフォームで出荷日を入力すれば、自動的に着手日が表示されるようにしています。

着手日を出荷日マイナス1日と設定しているのですが
出荷日の前日が土日である場合は着手日を3日前の金曜日の日付にしたいのです。

休日は土日に限らず、年間の企業カレンダーに基づいていますので
例えば、カレンダーマスターのような物を作成し
稼働日=0、休日=1のように設定しておき
そこから読み取れれば良いかと考えています。

要するに、カレンダーマスターで「1」の日付は計算に入れない
という風にしたいのです。

何かいい方法があれば、お教え下さい。よろしくお願いします。

【31791】Re:稼働日以外を除外して計算したい。
発言  やま  - 05/11/30(水) 11:14 -

引用なし
パスワード
   ▼茶眠。 さん:
こんにちは。

VBAの回答にならずに恐縮ですが、

アドインで分析ツールを組み込みます。

セルA1に基準日を入力します。B列の書式を「日付」にした後でセルB1に数式
「=WORKDAY(A1,-1,C1)」と入力し、セルC1に土日を除く休日を入力します。

土日を除く休日が複数有る場合はC列に続けて入力します。セルC2,C3,C4...に。
休日の入力範囲を例えばC1からC10セルに入力していればセルB1は

「=WORKDAY(A1,-1,C1:C10)」と入力します。

この式は「基準日A1」の1日前(-1)で土日・指定休日を除外した日付を求めます。

【31792】Re:稼働日以外を除外して計算したい(追加)
発言  やま  - 05/11/30(水) 11:21 -

引用なし
パスワード
   WORKDAY関数はVBAで使用できないみたいなので、例えばワークシートのセルA1に日付データをセットし、B1の結果を取得というのもいいかと思います。

Sub test()
  Range("A1") = "2005/11/30"
  MsgBox Range("B1")
End Sub

シートには前述の関数を入れておけば、うまく動作します。

【31801】Re:稼働日以外を除外して計算したい(追加)
発言  ichinose  - 05/11/30(水) 12:50 -

引用なし
パスワード
   茶眠さん、やま さん、こんにちは。

>WORKDAY関数はVBAで使用できないみたいなので、
出来ますよ!!

'=============================
Sub test1()
  Dim dd As Date
  dd = #12/5/2005#
  
  MsgBox Evaluate("text(workday(""" & Format(dd, "yyyy/m/d") & """,-1),""yyyy/m/d"")")
End Sub


アドインで「分析ツール−VBA」にチェックを入れておけば、

'============================================================
Sub test2()
  Dim dd As Date
  dd = #12/5/2005#
  MsgBox Format(Application.Run("atpvbaen.xla!workday", dd, -1), "yyyy/m/d")
End Sub

でも同じ結果が得られます。


>
>Sub test()
>  Range("A1") = "2005/11/30"
   range("b1").formula="=workday(a1,-1)"
   MsgBox Range("B1")
>End Sub

としても良いんですけどね!!
ご参考までに!!

【31805】Re:稼働日以外を除外して計算したい(追加)
質問  茶眠。  - 05/11/30(水) 13:18 -

引用なし
パスワード
   ichinose さん、こんにちは。
ご回答ありがとうございます。

教えて頂いたtest2を応用して試させて頂いたのですが

開始日=textbox1
開始日の前日=textbox2

Sub test2()
  Dim dd As Date
  dd = textbox1
  textbox2=Format(Application.Run("atpvbaen.xla!workday", dd, -1), "yyyy/m/d")
End Sub

ここに休日の条件を入れるには、どうすれば良いでしょうか?
休日はSheet1のセルA1からA6とした場合

textbox2=Format(Application.Run("atpvbaen.xla!workday", dd, -1), "yyyy/m/d")

の「dd,-1」の後ろにA1:A6を入れると
「型が一致しません」となってしまいます。

申し訳ありませんが、再度お教え頂けますでしょうか?

【31806】Re:稼働日以外を除外して計算したい(追加)
お礼  茶眠。  - 05/11/30(水) 13:21 -

引用なし
パスワード
   やま さん、早速ご回答ありがとうございました。

なるほど、そういう方法もあるんですね。
でもこれをユーザーフォームで使用するとなると
前もって関数を入れておくと言うのがどうもうまく行かなくて・・・。

もう少し考えてみます。

ありがとうございました!

【31809】Re:稼働日以外を除外して計算したい(追加)
発言  Kein  - 05/11/30(水) 13:39 -

引用なし
パスワード
   >前もって関数を入れておく
については、例えば UserForm_Initializeイベントなどで

Worksheets("Sheet1").Range("B1").Formula = 数式

というようなコードで入力出来ます。なるべく計算方法を手動にしておいて、
VBAコードでタイミングをみて Calculate した方が良いでしょう。その
タイミングは例えばコマンドボタンを押したとき、などにします。

【31810】Re:稼働日以外を除外して計算したい(追加)
発言  ichinose  - 05/11/30(水) 13:44 -

引用なし
パスワード
   >の「dd,-1」の後ろにA1:A6を入れると
>「型が一致しません」となってしまいます。
>
>申し訳ありませんが、再度お教え頂けますでしょうか?

これも二通りサンプルコードを提示します。
'==================================================
Sub test1()
  Dim dd As Date
  Dim ddarray(1 To 2)
  dd = #12/5/2005#
  
   
  ddarray(1) = #12/2/2005#
  ddarray(2) = #12/1/2005#
  
  MsgBox Format(Application.Run("atpvbaen.xla!workday", dd, -1, ddarray()), "yyyy/m/d")
End Sub
'=======================================================================
Sub test2()
  Dim dd As Date
  dd = #12/5/2005#
  With Worksheets("sheet1")
   .Range("c1").Value = #12/2/2005#
   .Range("c2").Value = #12/1/2005#
   MsgBox Format(Application.Run("atpvbaen.xla!workday", dd, -1, .Range("c1:c2")), "yyyy/m/d")
   End With
End Sub

どちらも同じ結果を表示すると思います。

【31813】Re:稼働日以外を除外して計算したい(追加)
お礼  やま  - 05/11/30(水) 14:22 -

引用なし
パスワード
   ●ichinoseさん、Kein さん
第一回答者ですが、いろいろ勉強になりました。有難うございました。

●茶眠。さん
質問者の茶眠。さんも、質問して頂いて有難うございました。
一緒に頑張りましょう!

【31915】ありがとうございました。
お礼  茶眠。  - 05/12/2(金) 10:17 -

引用なし
パスワード
   ichinoseさん、色々ありがとうございました。
なんとかやりたいことにたどり着くことができました。
助かりました。
お礼が遅くなり、申し訳ありません!

【31916】ありがとうございました。
お礼  茶眠。  - 05/12/2(金) 10:19 -

引用なし
パスワード
   Kein さん、どうもありがとうございました。

>>前もって関数を入れておく
>については、例えば UserForm_Initializeイベントなどで
>
>Worksheets("Sheet1").Range("B1").Formula = 数式
>
>というようなコードで入力出来ます。

なるほどですね!
色々と勉強になりました。

【31917】ありがとうございました。
お礼  茶眠。  - 05/12/2(金) 10:22 -

引用なし
パスワード
   やま さん

>質問者の茶眠。さんも、質問して頂いて有難うございました。

いえいえ、こちらこそ、ご親切にありがとうございました。


>一緒に頑張りましょう!

はい、初心者でわからないことだらけですので
そのお言葉、とても励みになります。

お礼が遅くなり、申し訳ありませんでした。

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