[[20040923012114]] 『NETWORKDAYSで休日を日祝だけにしたい』(ど素人です。) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『NETWORKDAYSで休日を日祝だけにしたい』(ど素人です。)

[NETOWORKDAYSで休日を日、祝だけにしたい!!]

はじめまして。早速ですが、NETOWORKDAYSで、土日祝では無く、日祝にする仕方教えて下さい。関数は“NETOWORKDAYS”に拘りません。かなり悩んでます。助けて下さい。エクセルのバージョンはExcel97です。OSのバージョンはWindows98SEです。お願いします・


 [新・単語検索]キーワード[NETWORKDAYS]で見てください。
 (kazu)


http://www.katch.ne.jp/~kiyopon/kansuu/date.html#networkdays

 今回は、ちょっと宣伝にならず。。汗
(SoulMan)


やっぱど素人でした。WORKDAYでの解釈でした。
例えば、”"04.9.22.から日祝を除いた10日後は何月何日ですか?”を求めたいのです。
お手数ですが再度教えて下さい。


 これまた、WORKDAYで検索すれば、色々と出てきますよ。
http://www.katch.ne.jp/~kiyopon/kansuu/date.html#workday
[[20040902163746]]
[[20030725145143]]『4営業日後を出すには』(mikiyu) 
(SoulMan)


 今回は土曜日が含まれるので、以下が参考になるかもしれません。

[[20031018171450]]『指定期間内の日曜日の日数などの求め方』(55の手習い)

 追加:土曜ははずすって難しいですね(^_^A;
 (川野鮎太郎)


 あまり多くは検証していませんが、以下の様になりました。長いです(^_^A;
 =IF(WEEKDAY(WORKDAY(A1,A2,祭日)-ROUND((DATEDIF(A1,WORKDAY(A1,A2,祭日),"d")+1-NETWORKDAYS(A1,WORKDAY(A1,A2,祭日)))/2,0))=7,
WORKDAY(A1,A2,祭日)-ROUND((DATEDIF(A1,WORKDAY(A1,A2,祭日),"d")+1-NETWORKDAYS(A1,WORKDAY(A1,A2,祭日)))/2,0),
WORKDAY(WORKDAY(A1,A2,祭日)-ROUND((DATEDIF(A1,WORKDAY(A1,A2,祭日),"d")+1-NETWORKDAYS(A1,WORKDAY(A1,A2,祭日)))/2,0)-1,1,祭日))

 A1に月日(10/1) B1に経過日(10)として、祭日は別セルにて名前を付けておいてください。
 名前を付ける祭日については、SoulManさんも紹介されている以下を参考にどうぞ。
『4営業日後を出すには』(mikiyu)
 (川野鮎太郎)


 う〜ん(/-_-\) 祭日の多い5月で確認したらOKだったけど、他でやってみたら駄目だ_/ ̄|○ il||li
 (川野鮎太郎)


日・祝日を除く営業日数ですネ。
作業行を使用しますが・・
A1に該当月の初日を入力
A2に=">="&A1 と入力(作業セルです。)
B1に当該月の最終日を入力 (直接入力の場合は、1カ月単位とらわれませんが、1カ月単位を基本に作成しております) 又は=EOMONTH(A1,0)
B2に=">="&B1 と入力(作業セルです。)
C1〜C15は祝日を入力
D1に=B1-A1+1-INT((B1-A1+1)/7)-((MOD(B1-A1+1,7)+WEEKDAY(A1-1))>7)-(COUNTIF(C1:C15,A2)-COUNTIF(C1:C15,B2))と入力
一応平成16年は確認しておりますが、ご確認を!
(beer55)


 上記の式って日数を求めるんですよね。
 そうではなく、10月1日から日祝を除いた10日後は、何月何日?を出すものだと思ってましたけど・・・。
 決してケチつけているのではなく、確認ですので気分を悪くなされませんようm(_ _)m
 (川野鮎太郎) 


 割り込み失礼。
違う方面から、って事でユーザー定義関数。
Excel関数を使って、という事なら以下はサックリと無視すると吉。
 
2004年のみ対応。
以下を標準モジュールに貼り付け。
 
'日付と日数から日曜祝日を除いた日付を求める 正常時:戻り値Date型
Private Function fncGetWorkDate( _
                    ByVal strDateFrom As String, _
                    ByVal strDays As String _
                    ) As Variant
    On Error GoTo ErrorHandler
    '変数宣言
    Dim dtmWk As Date
    Dim intDays As Integer
    '初期化
    fncGetWorkDate = ""
    '日付として扱えないなら抜ける
    If Not IsDate(strDateFrom) Then
        Exit Function
    End If
    '数値として扱えないなら抜ける
    If Not IsNumeric(strDays) Then
        Exit Function
    End If
    '与えられた日付と
    dtmWk = CDate(strDateFrom)
    '与えられた日数を元に
    intDays = CInt(strDays)
    '日数を消費しきるまでループ
    Do While intDays > 0
        dtmWk = DateAdd("d", 1, dtmWk) '翌日が
        If Weekday(dtmWk) = vbSunday Then '日曜日なら
            '何もしない
        ElseIf fncCheckHoliday(dtmWk) Then '祝日なら
            '何もしない
        Else '休みじゃないなら
            intDays = intDays - 1 '1日消費
        End If
    Loop
    '結果を返す
    fncGetWorkDate = dtmWk
    Exit Function
ErrorHandler:
    'エラー時は何もしない
    Err.Clear
End Function
 
'祝日ならTrueを返す
Private Function fncCheckHoliday(ByVal dtmTarget As Date) As Boolean
    '変数宣言
    Dim blnRet As Boolean
    '初期化
    fncCheckHoliday = False
    '休みだと信じる
    blnRet = True
    '祝日か調べる
    Select Case Format(dtmTarget, "yyyy/mm/dd")
        Case "2004/01/01" '元日
        Case "2004/01/12" '成人の日
        Case "2004/02/11" '建国記念の日
        Case "2004/03/20" '春分の日
        Case "2004/04/29" 'みどりの日
        Case "2004/05/03" '憲法記念日
        Case "2004/05/04" '国民の休日
        Case "2004/05/05" 'こどもの日
        Case "2004/07/19" '海の日
        Case "2004/09/20" '敬老の日
        Case "2004/09/23" '秋分の日
        Case "2004/10/11" '体育の日
        Case "2004/11/03" '文化の日
        Case "2004/11/23" '勤労感謝の日
        Case "2004/12/23" '天皇誕生日
        Case Else '祝日に属さない
            blnRet = False '休みじゃなかった…
    End Select
    '結果を返す
    fncCheckHoliday = blnRet
End Function
 
A1に 2004/09/22 等日付として扱える文字列セット
A2に 10 等日数として扱える文字列セット
A3に =fncGetWorkDate(A1,A2)
 
動作確認 Windows2000 Excel2000
 
ネットを探すと、2004年に限らず「その日が祝日かどうか」を調べる事の出来る関数が
公開されているのでそれを取り込み利用するとより良い、がその関数はちょっとデカイ。
(ご近所PG)Excel関数を極めてこそのExcelだろうにとは思いつつ…


 その日が祝日かどうかは以下で出るんですが、頭が固くてというか、知識が乏しくて
 なかなか関数だけじゃ上手くいきません(^_^A;
 =IF(ISNA(MATCH(A1,祭日,0)),"祝日じゃないよ♪","祝日") 
 祭日は名前の定義です。
 ※beer55さんの回答をヒントに、作業列を設けてやれば何とかなるのかも知れないですが、
 私は限界に近いです(^_^A;
 または、配列数式でやって比較すれば良いのかも・・・
 (川野鮎太郎)


 私はもうこのスレで皆さんが書いているExcel関数でやってる事が
難しくてサッパリで(駄目じゃん)
WORKDAY関数とかも初めて知ったし。便利ね。
ちなみに祝日判定のロジックを公開してくれているのは以下のサイト。
AddinBox
http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm
参考までに。
(ご近所PG)


お早うございます。川野鮎太郎
質問は>NETOWORKDAYSで、土日祝では無く、日祝にする仕方教えて下さいということでしたの、
川野様がおっしゃっている内容からするとWORKDAY関数とおもわれます。
小生は質問表題で考えました。
おっちょこちょいなのでご勘弁を
(Beer55)


 ありゃ、祝日かどうかを判定するというのは、今年だけではなくいつの年でも対応しているものだったんですね。
 とんちんかんなこと言ってしまって(/-\*) ハジュカチ…
 (川野鮎太郎)


川野鮎太郎様へ
「お早うございます。川野鮎太郎」と表示され呼び捨てになってしまいました誠に申し訳ありません。
(Beer55)

 _| ̄|○)) ((○| ̄|_ いえいえこちらこそ。(気になさらずに)
 WORKDAY関数も土曜日は除外されるので、その辺が今回の質問で難しいところなんですよね(^_^A;
 (川野鮎太郎)

 >_| ̄|○)) ((○| ̄|_
上記を見て
 
「闘牛か…」
 
と思った私の目と思考はおかしいというかヤバイというか普通だと信じたい。
(ご近所PG)駄レスにて御免

 ちょっと無責任ですが、検証に時間をかけていませんのでどなたか確認お願い!!
 
=SMALL(IF((COUNTIF(祝日,A1+ROW($A$1:$A$20))=0)*(WEEKDAY(A1+ROW($A$1:$A$20))<>1),A1+ROW($A$1:$A$20)),10)
配列式なので、Ctrl+Shift+Enter で確定。
「祝日」と名前をつけたリストが用意されて、A1に起算の日付を想定。
(KAMIYA)

 おしいです〜。4/26を入力したら、5/12になりましたけど、5/11が正解かと・・。
 "o(-_-;*) ウムム…
 (川野鮎太郎)

 ( ̄0 ̄;アッ すいません・・・
 合ってました〜〜〜〜〜!!!!!
 私のほうの確認間違いでした_/ ̄|○ il||li
 (_ _ ;)尸"マイリマシタ・・・
 さすがです!!!! ←4本で良いですか(^_^A;
 ※参考までに上記の式が出来るまでにかかった時間はどれくらいでしょう・・・
 5分で考え付いたよなんて言われたらどうしよ・・・_/ ̄|○ il||li
 (川野鮎太郎)

 12時に休憩に入って、ログを見て、苦戦の様子だったので、
やる気になり、数式をつくり、多少の検証をしてレス上げしたのが
12時34分(もしくは38分)だったと思います。
ただ、昨日の夜もログ見ているので、この時間だけで
考え付いたといえるかどうか・・・。
ちなみに、
 
 >_| ̄|○)) ((○| ̄|_
 
わたしにはインドネシア?あたりのお祭りでつかうお面に見えます。
(KAMIYA)

 ぉお!!(゚ロ゚屮)屮 約40分ですか。
 まったくKAMIYAさんの脳内細胞はどのような構造なんでしょう(^_^A;
 私は配列数式でいけるのかなとは思いながら、苦手なこともあって普通の数式で
 何とかならないものかと、昨日から暇を見ては取り組んでたんですが・・・。
 最後の難関で引っ掛かり、どうしても1日合わないパターンがあったんですよ(ノ_・。)
 ※でもマクロ以外でも出来るんだと言うことがわかってスッキリしました。
 質問者でもないのに長々とお邪魔してすみませんでしたm(._.)m ペコッ
 (川野鮎太郎)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.