- ベストアンサー
ACCESS2003のフォーム抽出について
- ACCESS2003を使用してスーパーマーケットの商品売り上げ管理を行っています。テーブルから抽出する際に、パソコン初心者でも操作できるようにフォームを作成しようと考えています。具体的なフォームの作成方法について教えてください。
- フォームを作成する際、以下の抽出条件を設定したいと考えています。売上期間、店舗名、商品名、価格、売上個数、売上合計、割引率の条件を入力できるようにし、これらの条件を満たすデータを抽出するフォームを作成したいです。
- また、フォームで抽出した結果を表示する際には、売上期間、店舗名、商品名、価格、売上個数、売上合計、割引率の情報を表示し、割引率が有効の場合は割引率を表示、無効の場合は0%と表示するようにしたいです。フォームの作成方法についてアドバイスをください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
フォームを「売上管理T」をレコードソースとする表形式のフォームを作成し、そのフォームヘッダ部分に抽出条件を指定するコンボボックス、抽出実行コマンドボタンを配置します。抽出実行ボタンがクリックされたら、Where構文を作成し、フォームのフィルタープロパティーに設定(Me.Filter=MyCriteria)、フィルターを実行(Me.FilterOn=True)とするとフォームに抽出されたレコードのみが表示されます。 これをVBAで抽出実行コマンドボタンのクリック時イベントに記述して行く必要が在ります。 例えば、以下のようになります。 Private Sub MyFilterSet() Dim MyCriteria As String 'Where構文を設定する文字型変数 If Me.FilterOn Then Me.FilterOn = False If IsNull(Me![店舗名]) Then MyCriteria = "" Else MyCriteria = "店舗名='" & Me.店舗名 & "'" '完全一致で検索する場合 'MyCriteria = "店舗名 Like '*" & Me.店舗名 & "*'" '店舗名の一部入力で検索する場合は、このように含むもので検索するように設定します。 End If If IsNull(Me![商品名]) Then Else If MyCriteria <> "" Then MyCriteria = MyCriteria & " And " End If MyCriteria = MyCriteria & "商品名='" & Me.商品名 & "'" End If If IsNull(Me![価格]) Then Else If MyCriteria <> "" Then MyCriteria = MyCriteria & " And " End If MyCriteria = MyCriteria & "価格 >= " & Me![価格] '価格を数値で指定してそれ以上のもので検索 End If If IsNull(Me![売上個数]) Then Else If MyCriteria <> "" Then MyCriteria = MyCriteria & " And " End If MyCriteria = MyCriteria & "売上個数 >= " & Me![売上個数] '売上個数を数値で指定してそれ以上のもので検索 End If If IsNull(Me![売上合計]) Then Else If MyCriteria <> "" Then MyCriteria = MyCriteria & " And " End If MyCriteria = MyCriteria & "売上合計 >= " & Me![売上合計] '売上合計を数値で指定してそれ以上のもので検索 End If . If IsNull(Me.売上期間開始年月日) And IsNull(Me.売上期間終了年月日) Then ElseIf Not IsNull(Me.売上期間開始年月日) And IsNull(Me.売上期間終了年月日) Then If MyCriteria <> "" Then MyCriteria = MyCriteria & " And " End If MyCriteria = MyCriteria & "[売上日]>=#" & Me.売上期間開始年月日 & "#" ElseIf IsNull(Me.売上期間開始年月日) And Not IsNull(Me.売上期間終了年月日) Then If MyCriteria <> "" Then MyCriteria = MyCriteria & " And " End If MyCriteria = MyCriteria & "[売上日]<=#" & Me.売上期間終了年月日 & "#" Else If MyCriteria <> "" Then MyCriteria = MyCriteria & " And " End If MyCriteria = MyCriteria & "[売上日]>=#" & Me.売上期間開始年月日 & "# And [売上日]<=#" & [Me.売上期間終了年月日 & "#" End If Me.Filter = MyCriteria 'フィルタプロパティに抽出条件を設定 Me.FilterOn = True '抽出実行 End Sub 抽出実行コマンドボタンのクリック時イベントに Call MyFilterSet と記述します。 別にクリアボタンを作成して、クリック時イベントに次のように記載すれば、クリックすると選択解除され、全レコードが表示されます。 Me![店舗名] = Null Me![商品名] = Null Me![価格] = Null Me![売上個数] = Null Me![売上期間開始年月日] = Null Me![売上期間終了年月日] = Null Call MyFilterSet 不明点があれば、お知らせ下さい。
その他の回答 (1)
- psgrade
- ベストアンサー率86% (19/22)
回答の補足です。 抽出条件設定のテキストボックス名として、テーブルのフィールド名と同じ名前を指定しましたが、これですとレコードのデータを表示するテキストボックス名と重複してしまいますので、抽出条件設定用のテキストボックス名は、フィールド名+"選択"等名前を変更してください。 VBAで使用した名称は、変更する必要があります。
お礼
お礼が遅れてすいません。 例題を挙げて頂き、大変参考になりました。 じっくり、コードを読ませていただいて、フムフムと考えるばかりです。 今回はありがとうございました。