• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access得意な方教えてください。)

Accessで検索ボタンの動作を設定する方法

このQ&Aのポイント
  • Accessで検索ボタンを作成し、動作を設定する方法を教えてください。
  • メインフォームに店舗IDと期間を入力し、検索ボタンを押すと、店舗名と期間内の売上履歴が表示されるようにしたいです。具体的な手順を教えてください。
  • VBAの式や特定の設定が必要なのでしょうか?助けてください。

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

  • ベストアンサー
  • chayamati
  • ベストアンサー率41% (260/624)
回答No.3

サブフォームを含むフォームは出来ているのですね 検索のキーとなる店舗IDと期間(開始日、終了日)はフォームを開く前に確定していなければなりません そのためにもう一つのフォームが必要です、これを仮にメニューと呼びましょう このメニューフォームに、店舗ID,開始日、終了日 検索ボタンを配置します。 1.メニューフォーム作成 1-1.店舗ID はコンボボックス 1-2.期間(開始日、終了日)テキストボックスにしてIME入力モード、半角英数   開始日の規定値 date()-day(sate())+1   終了日の規定値 date() 1-3.メインフォームを開くボタン ボタン 2.フォームに検索条件定義 2-1.メインフォームの店舗IDにメニューの店舗IDをセット   メインフォームをデザインモードで開き   データタグのレコードソースの右端の … クリックで クエリビルダ起動   店舗テーブルの全てをフィールド欄にドラッグ   店舗IDの抽出条件行に Forms!メニュー!店舗ID 2-2.サブフォームの日付にメニューの期間(開始日、終了日)をセット   サブフォームをデザインモードで開き   データタグのレコードソースの右端の … クリックで クエリビルダ起動   売上履歴テーブルの全てをフィールド欄にドラッグ   日付のの抽出条件行に<= Forms!メニュー!開始日 and <= Forms!メニュー!開始日 以上はVBAなしの処理です。

putiabu
質問者

お礼

ありがとうございます。 皆さんのも参考にさせていただきました。 今回はすでに作成できましたのでこれで終わらせていただきます。

その他の回答 (3)

  • Ceranaj
  • ベストアンサー率58% (14/24)
回答No.4

前回のご質問に、回答した者です。 内容が重複していますので、前回の返信分と合わせてこちらに書かせて頂きます。 他の方が回答されていますので、もう必要ないとも思いますが、 ここでは、もう少し簡単なやり方をご紹介します。 (やり方は、多数ありますが、ほんの一例としてご理解下さい) ・テーブルの日付を入力するフォールド名を「日付」とします。 ・売上履歴テーブルを基にしたクエリを「 売上履歴クエリ 」とします。 ・メインフォーム名を「 メイン ]とします。 ・メインフォームに設置してある、テキストボックスの名前: 店舗IDの入力用は「店舗ID」とします。 期間指定用は「期間始」・「期間終」とします。書式は日付(標準)にして下さい。 店舗名の表示用は「店舗名」とします。 《 店舗IDと期間指定で、店舗名と売上履歴を表示させたい。》 1.売上履歴クエリをデザインビューで開き、 店舗IDの抽出条件欄に、 Nz([Forms]![メイン]![店舗ID],"0") 同じく、日付の抽出条件欄に、 Between Nz([Forms]![メイン]![期間始],Nz([Forms]![メイン]![期間終],#1900/01/01#)) And Nz([Forms]![メイン]![期間終],Nz([Forms]![メイン]![期間始],#9999/12/31#)) と、それぞれ記述(コピペ)します。 2.合計金額表示用の、テキストボックスのコントロールソースに、 =DSum("金額","売上履歴クエリ") と、記述(コピペ)します。 3.検索ボタンのイベントのクリック時を選択し、コードビルダーを表示させます。 (やり方参照:http://www.sk-access.com/Syo_Vba/SvA001_What.html) そこに、以下のコードを記述(コピペ)して下さい。 DoCmd.Requery Me.店舗名 = DLookup("[店舗名]", "[売上履歴クエリ]", "[店舗ID] = " & Me.[店舗ID]) 以上で終了です。 検索ボタンを押すことで、お望みの形で表示されるはずです。 また、前回ご質問の、月の売上履歴をテーブルに蓄積させたい。 > フォームでちまちま売り上げを商品ごとに店舗ごとに打ち込むのは一苦労なので > テーブルにインポートして蓄積していけたらと思っています。 とのことですが、今一つ理解しかねます。 履歴というのは、実績のことですね? テーブルにインポートするとありますが、どこからインポートするのでしょうか? エクセルでしょうか? エクセルからということでしたら可能ですが、 VBAの知識が必要なのと、詳細な設定内訳が不明ですので、ここでは割愛させて頂きます。

回答No.2

Option Compare Database Option Explicit Private Sub コマンド_売上履歴検索_Click()   Me.店舗別売上履歴.Requery End Sub Private Sub 店舗_ID_BeforeUpdate(Cancel As Integer)   Dim lngID As Long      lngID = Val(Me.店舗_ID & "")   If lngID > 0 Then     Me.店舗_名称 = DLookup("名称", "店舗", "ID=" & lngID)     If Len(Me.店舗_名称 & "") = 0 Then       MsgBox "該当する店舗は登録されていません!", vbExclamation, " 告知"     End If   Else     Me.店舗_名称 = ""   End If End Sub Private Sub 店舗_ID_Exit(Cancel As Integer)   店舗_ID = Val(Me.店舗_ID & "") End Sub 修正1、バグ修正前をコピペしていました。 ×    If Not Len(Me.店舗_名称 & "") Then 〇    If Len(Me.店舗_名称 & "") = 0 Then このように訂正を! 修正2、[店舗_ID]の入力ミスの対策を追加。 [店舗_I]で"1;"などと入力された場合の対策を追加しておくべきでした。 修正1、バグ修正前をコピペしていました。 ×   If Not Len(Me.店舗_名称 & "") Then 〇 If Len(Me.店舗_名称 & "") = 0 Then このように訂正を! 修正2、エラートラップの追加を! [店舗_I]で"1;"などと入力するとエラーが出ます。エラートラップはその対策です。

回答No.1

まず、現在のフォームが次のようであることを確認したい。 確認1、日付が[何時から]と[何時まで]との二つのテキストボックスにて入力されるようになっていること。そうでないと、実にややこしいことになるからです。 確認2、売上金額合計欄がサブフォームに配置されていること。そうでないと、少し、ややこしいからです。 >サブフォームがデーターシート形式で売上履歴が表示するようになっています。 できれば、帳票フォームにして列[店舗_ID]は非表示に。 確認1と2とがOKならば、書くべきVBのコードはほんの僅かです。検索のためのコードは1行。つまり、{F9}を押してもサウフォームがリクエリされるってことです。ですから、検索ボタンは不要と言えば不要です。 Option Compare Database Option Explicit Private Sub コマンド_売上履歴検索_Click()   SendKeys "{F9}", False   ' Me.店舗別売上履歴.Requery <-- これでもOK! End Sub Private Sub 店舗_ID_BeforeUpdate(Cancel As Integer)   If Val(Me.店舗_ID & "") > 0 Then     Me.店舗_名称 = DLookup("名称", "店舗", "ID=" & Me.店舗_ID)     If Not Len(Me.店舗_名称 & "") Then       MsgBox "該当する店舗は登録されていません!", vbExclamation, " 告知"     End If   Else     Me.店舗_名称 = ""   End If End Sub なお、この場合のサブフォームのレコードソースは次のようです。 SELECT 店舗別売上履歴.ID, 店舗別売上履歴.店舗_ID, 店舗別売上履歴.日付, 店舗別売上履歴.売上金額 FROM 店舗別売上履歴 WHERE (((店舗別売上履歴.店舗_ID)=Forms!フォーム2!店舗_ID) And ((店舗別売上履歴.日付) Between Forms!フォーム2!何時から And Forms!フォーム2!何時まで)) ORDER BY 店舗別売上履歴.日付, 店舗別売上履歴.ID; 売上履歴の表示順には、日付昇順を指定。また、同じ日付に複数の履歴があれば列[ID]や[行番号]等の同日の順番を管理する列を付加します。

関連するQ&A

専門家に質問してみよう