• ベストアンサー

Accessでオートフィルタの抽出結果を反映させる

Accessで見積書管理をしています。 受注数/見積書を出した数→受注率 で月ごとに個人別で受注率を出したいと思っています。年末になったらその受注率の合計で個人評価にになります。 それでACCESSで可能でしょうか? お詳しい方のご教授をお待ちしております。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.5

>フォームに作成日の検索に加えたいですが 別の話になるので、新しくスレッドを立ててください。 考え方をまとめてからコーディングしましょう。 (1)Date1とDate2があればこの範囲 (2)Date1だけならDate1以降 (3)Date2だけならDate2以前 (4)Date1、Date2がなければ条件にしない If Nz(Date1, "") <> "" Then     If Nz(Date2, "") <> "" Then         strWhere = strWhere & strAndOr & " 作成日 Between #" _         & Date1 & "# And #" & Date2 & "#"     Else         strWhere = strWhere & strAndOr & " 作成日 >= #" & Date1 & "#"     End If Else     If Nz(Date2, "") <> "" Then         strWhere = strWhere & strAndOr & " 作成日 <= #" & Date2 & "#"     End If End If 上のDate1やDate2は正しくはMe.Date1.Valueですが、Valueはデフォルトプロパティ であること、Date1やDate2がクラス内オブジェクトとして認識できることから省略も 可能なのです。 尚、作成日に時刻表記がある場合、作成日<=#2010/11/20#とやると、これは 0時0分0秒になるので、2010/11/20 00:00:01以降、つまりこの日にできたものは 対象外になります。また、時刻は微妙に一致しないことがあるので、Format関数を 使い、合わせるほうが正確です。 strWhere = strWhere & strAndOr _ & "Format(作成日,'yyyy/mm/dd')<='" & Date2 & "'"

nuocngoai
質問者

お礼

いろいろありがとうございました。 お陰様でうまく検索フォームがつくれました。

その他の回答 (4)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

困ったなぁ。 >strWhere = vbNullString -- この間全て -- >'WHERE句編集 上のブロックはそのままで以下の文を実行します。 strWhere = Replace(strWhere, strAndOr, "", , 1) DoCmd.OpenReport strDocName, acPreview, , strWhere これで分かりますか?

nuocngoai
質問者

お礼

大変助かりました。これで解決できました ありがとうございます。 ちょっと欲ばりですがフォームに作成日の検索に加えたいですが 二つのテキストボックスDate1,Date2を設置しましたが条件コードは書けばいいか分からなくて 一応本を読んで以下コードを書いたが検索できなかったです。 手数ですが直していただけないでしょうか? If Date1 <> "" Then strWhere = strWhere & strAndOr & " and" & " 作成日 Between #" _ & Date1 & "# And #" & Date2 & Me.Date1.Value & "#" Else If IsNull(Date2) Then strWhere = strWhere & strAndOr & " 作成日 >= #" & Date1 & Me.Date2.Value & "#" End If If Date1 <> "" And Date2 <> "" Then strWhere = strWhere & strAndOr & " 作成日 Between #" & Date1 & "# And #" & Date2 & "#" End If End If

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

だから~、WHERE句が違うって言ってるんですけどね。 >Me.RecordSource = cBaseQuery & " " & strWhere ここで使っているstrWhereから"WHERE"を抜いたものを 指定します。 いっそ、レポートのOpenイベントで、フォームと同じように Me.RecordSource = cBaseQuery & " " & strWhere までのソースを記述したら如何でしょう。レポートでは Me.txtYear→Forms!xxx.txtYear(xxxはフォーム名) 上記のようになります。

nuocngoai
質問者

補足

すみませんですがおっしゃったことがよく理解できなくて、 恐縮ですがイベントのコードを書いていただけなでしょうか?

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

条件式がフォームとレポートで違っています。 レポートの抽出条件は下記のようになっていますよ。 strWhere = "[ID]=" & Me!ID

nuocngoai
質問者

補足

ありがとうございます。 教えていただいたのは選んだレコードしか印刷できないです。 私は検索した結果を全て印刷したいです。 フィルタを使ってないためMe.Filterにはつかえないです。 ややこしいですがよろしくお願いします。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

データベースですから情報さえ揃っていれば だいたい何でも可能です。 具体的なSQLとなると、具体的なテーブル定義が ないと記載できません。 これはどのDBシステムでも言えますがバージョン によって微妙に「できる/できない」に差があります。 よって、このての質問をする時はバージョンも掲載 すべきでしょう。

nuocngoai
質問者

補足

お世話になってます PCのOS:XP Accessのバージョン:2007 何とかつくれましたが今度は全然違う質問ですがフォームで検索した結果が印刷したいですができなくて困っています。 検索の命令文は Dim strWhere As String Dim strAndOr As String strWhere = vbNullString If Me.optAndOr.Value = cAnd Then strAndOr = " AND " Else strAndOr = " OR " End If If Me.txtYear.Value <> vbNullString Then strWhere = strWhere & strAndOr & " 年度 LIKE '*" & Me.txtYear.Value & "*'" End If If Me.txtName.Value <> vbNullString Then strWhere = strWhere & strAndOr & " 営業担当 LIKE '*" & Me.txtName.Value & "*'" End If 'WHERE句編集 strWhere = Replace(strWhere, strAndOr, "WHERE", , 1) 'レコードソース書き換えと再クエリ Me.RecordSource = cBaseQuery & " " & strWhere Me.Requery これに対して印刷の命令文は以下です Private Sub btnPreview_Click() Dim strDocName As String Dim strWhere As String strDocName = "R_受注率検索" strWhere = "[ID]=" & Me!ID DoCmd.OpenReport strDocName, acPreview, , strWhere End Sub ですが一つのレコードしか印刷しなかったです。 したいことは検索した結果を全て印刷したいですがどうぞよろしくお願いします

関連するQ&A