• ベストアンサー

Access 自作関数

お世話になります。アクセス2000です。 モジュールで以下のようなものを書きました。 月末日を求める関数を作りたかったのです。 Public Function Gend()   Dim ge As Date   ge = CDate([Forms]![F_Main]![年] & "/" & [Forms]![F_Main]![月] & "/" & "01")   ge = DateAdd("m", 1, ge)   ge = DateAdd("d", -1, ge) End Function 年は西暦4桁(2004)月は2桁(02)が入っています。 このGend()をクエリーの抽出条件欄に「 <=Gend() 」って書きましたが上手く動きません。エラーにはならないのですが、抽出件数が0件でした。(実際に#2004/02/29#ってやるとちゃんと出るのです) 初めて自作関数なるものを作成したのでどこが違うのかさっぱりです。 お助けを・・・・!

noname#12495
noname#12495

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 肝心の戻り値のセットがされていないですが・・・ End Function の直前に、 Gend = ge を挿入して下さい。 なお、クエリの抽出条件は、 <="#" & Gend() & "#" としないといけないかも知れません。

noname#12495
質問者

お礼

ご指導、ありがとうございました。 お恥ずかしい限りです。 クエリーは"#"なしでそのまま使えました。 これからもよろしくお願いします。

その他の回答 (1)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

Public Function Gend(NEN,TUKI) As Date   Gend = Dateserial(NEN,TUKI + 1,0) End Function これでクエリ上で <=Gend([Forms]![F_Main]![年], [Forms]![F_Main]![月])

関連するQ&A

  • 月初の日でクエリー。アクセス2000

    お世話になります。アクセス2000です。 Mainフォームに「○○○○」年(西暦)と「××」月という枠があります。 このフォームを使ってクエリを走らせたいのですが・・・。 CDate([Forms][Main][年] & "/" & [Forms][Main][月] & "/" & "01")とやったのですが、式が間違えていますとの事・・・。どうやったら(例:2004/03/01)のようになりますか?もちろん、日付型にしたいです。 Format関数とか必要ですか? VBAではなく、関数でやりたいのです。 わかりにくくてすいません。 よろしくお願いします。

  • Access 抽出条件 フォームの作成について

    クエリで以下のような関数で日数から期首を求めたのですが 抽出条件の指定が出来ません。テキスト型、○○年○○月、期首7月 今期: IIf(Month(CDate([決算日] & "01日"))<=7,Format(DateAdd("m",-6,CDate([決算日] & "01日")),"ggge" & "年"),Format(CDate([決算日] & "01日"),"gggee" & "年")) 色々試してみましたがデータ型が違うといわれるのですが、どの様な方法をとれば良いでしょうか? それとエラーになっている(日付けデータが無い)部分はほって置いて良いのでしょうか?

  • Excel関数または書式設定で

    DATE関数で表示された年月日を別の1つセルに西暦4桁、月2桁、日2桁の8桁連続表示にしたい のですが関数または書式設定でどのようにすれば出来ますか?

  • Accessクエリについて教えてください。

    Accessクエリについて教えてください。 日付を入力すると抽出したく下記のように作成したのですが、 フォームを使い、年と月だけ入力することはできますでしょうか?(2010/3/*) Between [Forms]![F_AAA]![入力1] And [Forms]![F_AAA]![入力2] (フォームAAAの入力1に、2010/03/01、入力2に2010/03/31)と入力して2010年3月分を抽出する。  ↓(下記のようにしたい) フォームAAAの入力1に2010、入力2に3と入力すると、2010年3月分を抽出する。 教えてください。

  • Accessで日付を抽出するパラメータを設定したい

    Accessのクエリで日付に対して与えているパラメータがあります。 パラメータで指定したいデータはフォームのテキストに入力した日の23:59:59 以降の日付を抽出したい。 入力:数値8桁(yyyymmdd)で行う 抽出先テーブルのデータ:yyyy/mm/dd hh:mm:ss 現在以下のパラメータを日付に対して与えると「式が複雑すぎます、、、」と注意されてしまいます。 指定日の23:59:59を抽出範囲として指定するのはどうしたらよいでしょうか? 入力値の変換も含めて、以下のパラメータを入れています。 「+"23:59:59"」をとればエラーは出ません。 <=IIF(Len([Forms]![フォーム名]![日付])=8,CDate(Format([Forms]![フォーム名]![日付],"@@@@/@@/@@")),#9999/1/01#)+"23:59:59" どなたか、お助け下さい。よろしくお願い致します。

  • アクセスのクエリ抽出ができない。

    アクセスのクエリで、フォーム上のチェックのオンオフで抽出データの抽出条件を変更しようと思っています。 条件は、データの作成日付(yyyy/mm/dd形式)で、抽出の条件式は IIf([Forms]![F_送付状]![チェック40]=False,>=DateAdd("m",-1,Date()),>"0") です。チェック40がフォーム上のチェック(コントロールソースなし)で、オフの場合は、1ヶ月前までのデータを抽出、オンの場合は全件を抽出したいと思っています。 上記の式でうまく抽出できない(データが抽出できない)のですが、アドバイスをお願いします。

  • Accessでの支払日の計算方法

    いつも質問ばかりしてスミマセン・・・ 今回は支払日付の計算について質問です。 次の様な条件で日付の表示がしたいのですが、カレンダーは月末日が月によって30日や31日2月は28日うるう年には29と末日に変動がありますよね? その為、Accessのdateadd関数では日にちが狂ってしまうのです。 条 件:取引会社ごとに支払日が決まっています月末に締    めて30日後、40日後、50日後といった風に5日にち毎に支払日となります。     例)2/28締め40日後→4/10支払日と計算させたいのですが、dateadd関数で単純に計算すると4/9となってしまいます。これが60日後であれば本来は4/30としたいのですが、4/28となります。 AccessのVBAは使った事はないのですが、(Excelはあります)VBAででしかできないのであればその方法が知りたいです。 宜しくお願いします。

  • クエリの抽出条件でiif関数

    こんにちわ。 いまaccess2000でクエリを作成し, その抽出条件において,iif関数を使って, フォームのあるフィールドに値があるときはその値, ないときはワイルドカードで検索しようと思い, 下記のコーディングを入れました。 iif([Forms]![F_フォーム1].[テキスト1] Is Null, "*", [Forms]![F_フォーム1].[テキスト1]) ところがワイルドカードの"*"がうまく効いてくれないようで 正しく検索されません。 どうすれば正しく検索できるでしょうか? 教えてください。お願いします。

  • エクセルの日付関数の使い方について

    いつもお世話になっております。 今回はエクセル2010での日付関数の使い方について教えて頂きたく。 日付けの一部を文書Noに使っています。 ナンバリングの規則は「西暦年の末桁+月」が先頭の3文字ということになっているので、今月なら「703・・・」ということになるのですが、TODAY関数で2017年3月を「703」とする方法が分かりません。 "yymm"で「1703」だと使えるのですが、"ymm"ではエラーになってしまいます。 一旦「1703」と出して、その「右から3桁」としなくても出来そうな気がするので、どなたか宜しくお願い致します。

  • access 自作関数をフォームで使うとき

    お世話になります。 ACCESS2000でシステムを作っています。 商品コードを年・月をコード化したものに、日付2ケタを足したものを作成する scdという関数を作り、フォームのフィールドに、表示したのですが、 #Name!?と表示されていうまくいきません。 どうすればいいですか? 関数は以下のようになっています。 Public Function scd() As String Dim hiduke As Date Dim yc As String Dim mc As String Dim dc As String Dim strtmp As String hiduke = Date '年コードを設定 Select Case Year(hiduke) Case Is = 2012 yc = "a" Case Is = 2013 yc = "b" Case Is = 2014 yc = "c" Case Is = 2015 yc = "d" Case Is = 2016 yc = "e" Case Is = 2017 yc = "f" Case Else MsgBox "年コードを追加してください" End Select '年コードを設定 Select Case Month(hiduke) Case Is = 1 mc = "a" Case Is = 2 mc = "b" Case Is = 3 mc = "c" Case Is = 4 mc = "d" Case Is = 5 mc = "e" Case Is = 6 mc = "f" Case Is = 7 mc = "g" Case Is = 8 mc = "h" Case Is = 9 mc = "i" Case Is = 10 mc = "j" Case Is = 11 mc = "k" Case Is = 12 mc = "l" End Select '日付を設定 dc = Format(hiduke, "dd") strtmp = yc & mc & dc scd = strtmp End Function

専門家に質問してみよう