「休日関数」を作ってあります。土曜日、日曜日も含んで戻り値が「休」となっています。これから翌営業日を算出する関数を作成したいのですがうまく行きません。

A 回答 (2件)

休日関数は 日付を引数として、休という文字を返す関数で


しょうか?

そうでしたら、

Dim iNum

Do
  iNum = iNum + 1
  if "休" <> 休日関数(現在の日付 + iNum) then
    MsgBox "翌営業日は" & _
        現在の日付 + iNum & "です。"
    Exit Do
  End If
Loop

で、できませんか?

勘違いであればお許しください。
    • good
    • 0
この回答へのお礼

最終的に下記のような形でできたようです。実際使っている通りに表記します。(ASP版で。)
<%
dtmDate = "2001/01/06"
Do
i = i + 1
if funcheijitu(dateadd("d",+1,dtmDate)) = "平日" then
dtmDate = dateadd("d",+1,dtmDate)
Exit Do
Else
dtmDate = dateadd("d",+1,dtmDate)
End If
Loop
Response.write "翌営業日は" & dtmDate & "です。"
%>

アドバイスありがとうございました。

お礼日時:2001/03/19 12:52

Access2000の前提です。

(他のバージョンの多分同じかな?)

日付をweeknum関数を使って平日の場合はそのまま抜ける。
土日にだったら+1日して最初に曜日チェックにもどるルーチンを
書けば出来ますよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qアクセス 指定日から将来の指定日までを算出する式を知りたい

アクセス2000

職員の人事データ管理をしています。テーブルのフィールドに職員の生年月日や採用年月日を入力しています。

このフィールドをもとに、将来の指定日までの期間を算出したいのです。例えばS50年4月1日に採用された人が来年の平成16年3月31日現在での勤務年月を算出したいのです。

某QAサイトの類似質問に「12月31日現在の年齢の出し方がわからない。今日以降の年齢も算出できるのか?」というのがあり、その答えに「DateDiff("yyyy",[誕生日],Format(date,"yyyy")& "/12/31")」とありましたので、自分のテーブルをもとに、とりあえず今年の12月31日現在の勤務期間を出してみようと「DateDiff("yyyy",[採用年月日],Format(date,"yyyy")」& "/12/31")と入力したところ「パラメータの入力 採用年月日」というダイアログが出てしまいました。うーん、恥ずかしながらこの意味も分からない。

採用年月日などの過去の指定日から、年度末時など将来の指定日までの期間(年月)を算出するための式を教えていただけないでしょうか。

アクセス2000

職員の人事データ管理をしています。テーブルのフィールドに職員の生年月日や採用年月日を入力しています。

このフィールドをもとに、将来の指定日までの期間を算出したいのです。例えばS50年4月1日に採用された人が来年の平成16年3月31日現在での勤務年月を算出したいのです。

某QAサイトの類似質問に「12月31日現在の年齢の出し方がわからない。今日以降の年齢も算出できるのか?」というのがあり、その答えに「DateDiff("yyyy",[誕生日],Format(date,"yyyy")& "/12/...続きを読む

Aベストアンサー

DateDiff("yyyy",[採用年月日],Format(date,"yyyy")」& "/12/31")
パラメーターを含む式になってますよ
[採用年月日]この部分が、都度入力する項目(パラメーター)として扱われますので、毎回変える必要がある場合には、良く使いますね
基本的な式は、問題無い様に思いますが、FORMAT関数をここで使わずとも、レポート或いはフォームで表示させる時に使うか、書式を設定するかした方が軽く出来ますよ
Accessの日付計算式には、癖がありますので、ヘルプを良く読んで式を組んだ方が良いですよ
1日位ずれてしまう場合等もあります。

QACCESSのクエリでDlookup関数・戻り値の属性は

ACCESSのクエリの中で、抽出したい項目を式で定義しているのですが、Dlookup関数を使っています。

そのとき、数値項目だと思っていたのですが、文字として値が返ってきているようです。(数字が左詰めになっているので)

Dlookup関数の戻り値は、このような使い方をした場合、文字として返ってくるのでしょうか。
(Nullというのが返ってきている場合もありました)

クエリ上で使っている式は、このようなものです。

前月戸建契約数:
DLookUp("契約数","テーブル名",
"担当者名='" & [担当者名] & "' And 月次='" & [前月] & "'")

[担当者名]は元になるテーブルにあり、[前月]はクエリ上で、(テーブル上の)[月次]-1で式として定義しています。

よろしくお願いします。

Aベストアンサー

なぜかな?
イミディエイトウィンドウで
?typename(DLookUp("契約数","テーブル名","担当者名='" & [担当者名] & "' And 月次='" & [前月] & "'"))
?typename(Dcount("契約数","テーブル名","担当者名='" & [担当者名] & "' And 月次='" & [前月] & "'"))
で両方とも数値型が返ってくるかと思いますが
DlookUpでは左詰めに、Dcountでは右詰めになりますね。
Val関数かCdbl関数で囲んでやるとか・・

Qメッセージボックス関数の「戻り値」って?(Access2000)

Access初心者です。
今、自分で勉強しているのですが、メッセージボックス関数の「戻り値」がよくわかりません。
引数の<msg>,<type>,<title>はそれぞれ理解ができたのですが、
戻り値の内容(1「OK」)というのは、何に対しての値なのでしょうか??
ヘルプも見ましたが、私にはさっぱりです。
どなたか簡単にご説明お願いします。

Aベストアンサー

参考URLを参考にしてみてください。

参考URL:http://www.mahoutsukaino.com/ac/ac2000/ac2000/m_msgbox/msg01.htm

QACCESS97で現在の日付から勤続年月数を算出する関数

ACCESS97で社員名簿を作っています。

現在の日付から年齢を算出する関数は調べたところ次のようにすればよいとわかりました。
IIf(Right(Format([生年月日],"yyyy/mm/dd"),5)>Right(Format(Now(),"yyyy/mm/dd"),5),DateDiff("yyyy",[生年月日],Now())-1,DateDiff("yyyy",[生年月日],Now()))

次は現在日から入社年月日フィールドにあるデータを使い、勤続年数○年○ヶ月というクエリーを作りたいのですが、○ヶ月を算出する応用がわからずに困っております。
どうかよろしくお願いします。

Aベストアンサー

これは、DateDiff関数が、月単位で日付を数えている事に起因する問題ですね。
DateDiff('m',#2001/01/31#,#2001/02/01#)
のようにすると、1が表示されます。
日付的には1日しか違わないのに、月だけに着目するとひと月異なっていると判断されるんですね。

ってことで、「どの時点でひと月と判断するのか」を決めておく必要が出てきます。
1月29日(月末より前)に入社した人を2月28日(月末)には勤続一ヶ月と判断するべきか、とか、細かい事を考え出すときりがないので、とりあえずこんな感じで決めてみます。

入社年月日の日の部分とと、現在の年月日の日の部分とを比較してみて、現在の日のほうが大きかったら、既にひと月経過したとみなす。

これを#2の式と組み合わせると、以下のようになります。

IIf(Day(Date())>=Day([入社年月日]),DateDiff('m',[入社年月日],Date())\12 & '年' & DateDiff('m',[入社年月日],Date()) Mod 12 & 'ヶ月',(DateDiff('m',[入社年月日],Date())-1)\12 & '年' & (DateDiff('m',[入社年月日],Date())-1) Mod 12 & 'ヶ月')

なんか、すごい長い式になっちゃいましたが、これで上記のような仕様を満たしているはずです。

これは、DateDiff関数が、月単位で日付を数えている事に起因する問題ですね。
DateDiff('m',#2001/01/31#,#2001/02/01#)
のようにすると、1が表示されます。
日付的には1日しか違わないのに、月だけに着目するとひと月異なっていると判断されるんですね。

ってことで、「どの時点でひと月と判断するのか」を決めておく必要が出てきます。
1月29日(月末より前)に入社した人を2月28日(月末)には勤続一ヶ月と判断するべきか、とか、細かい事を考え出すときりがないので、とりあえずこんな感じで決めてみます...続きを読む

Qアクセス:既定値に土日含まず3日後を指定したい

エクセルの場合ですとworkday関数を使用すればいいのですが、
アクセスの場合はどのようにしたらよいのでしょうか?
いろいろネットで調べてみたのですが、workday関数はアクセスでは無いように思うのですが・・・。
また、もし簡単に出来るのであれば、祝日も除きたいのですが、
これは本当に難しいらしくあきらめています。本当に初心者レベルで申し訳ないのですが、教えていただけると幸いです。

Aベストアンサー

workday関数ですが、Accessにはないので、
モジュールで自作する必要があります。

まず、祝日や、盆休みなどの休日のデータを用意します。

Accessの場合、テーブルとして作った方が良いでしょう。
 テーブル名 :holiday
 フィールド名:data (日付型) 主キー

土日は計算できるので、土日以外の、祝日や、
振り替え休日、会社独自の休日などを登録しておきます。

次に、新規のモジュールを追加し、下記のようなソースを記述。
適当な名前で保存して下さい。
-----------------------------------------------------------
Option Compare Database
Option Explicit

'd(日付)から、c(日数)営業日後の日付を返す
Public Function WorkDay(d As Date, c As Integer)
 Dim count As Integer
 '初期化
 WorkDay = NextWorkDay(d)
 count = 0
 Do While count < c
  '営業日をカウントしながら進める
  WorkDay = NextWorkDay(DateAdd("d", WorkDay, 1))
  count = count + 1
 Loop
End Function

'd(日付)以降の営業日を返す
Private Function NextWorkDay(d As Date) As Date
 NextWorkDay = d
 Do While IsHoliday(NextWorkDay)
  NextWorkDay = DateAdd("d", NextWorkDay, 1)
 Loop
End Function

'd(日付)が、土日・休日かチェック
Private Function IsHoliday(d As Date) As Boolean
 If Weekday(d) = vbSunday Or Weekday(d) = vbSaturday Then
  '土日ならTrue
  IsHoliday = True
 ElseIf IsNull(DLookup("data", "holiday", "data = #" & d & "#")) Then
  '平日で、休日でなければFalse
  IsHoliday = False
 Else
  '休日ならTrue
  IsHoliday = True
 End If
End Function

-----------------------------------------------------------
フォームの既定値のプロパティでは下記の様に使います。
今日から3営業日後の日付を規定値にする場合、
 WorkDay(Date(),3)

Excelのworkday関数と同じような使い方です。
違いは、休日のデータを、テーブルに用意しておく点です。

workday関数ですが、Accessにはないので、
モジュールで自作する必要があります。

まず、祝日や、盆休みなどの休日のデータを用意します。

Accessの場合、テーブルとして作った方が良いでしょう。
 テーブル名 :holiday
 フィールド名:data (日付型) 主キー

土日は計算できるので、土日以外の、祝日や、
振り替え休日、会社独自の休日などを登録しておきます。

次に、新規のモジュールを追加し、下記のようなソースを記述。
適当な名前で保存して下さい。
-------------------------------...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報