- ベストアンサー
至急Accessでフォームで検索できるようにしたい
Accessのフォームで店舗IDと日付(例:201501-201502まで)を入力して検索ボタンを押したら、A店B店C店の過去1年分の売上履歴を蓄積したテーブルから(仮:テーブル名:全店舗売上履歴)その月の売上履歴がサブフォームにエクセルのような形式(表形式)でレコードが出てきて 別の枠に集計金額を表示させるような「売上履歴検索ツール」を作りたいのですが、どうしてもうまく行きません。 サブフォームを作りましたが どうしてもエクセルのような表形式でみれるように作れません。 また、店舗IDと日付で検索させるには VBAみたいな命令文が必要でしょうか? 作り方をアドバイスいただけると助かります。 (1)サブフォームに履歴をレコードごとに表示させたい (2)店舗ID、日付で検索させたい (3)検索範囲での集計金額を表示させたい (4)月の売上履歴をテーブルに蓄積させたい この4つのやり方を探しています。 【フォーム】 店舗ID→検索入力 日付→年月の検索入力 サブフォームに 日付(年月) 店舗ID 店舗名 販売商品名 数量 金額 をレコードごとに表示 その他(枠:フレーム) 集計した金額を表示 手順的な形で教えていただけると分かり良いです。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
色々課題がありますね 一つづつ解決していきましょう ------------------------------ >作り方をアドバイスいただけると助かります。 サブフォームがあるフォームの作り方は2つあります 1.フォームウィザードを活用する 2.メインフォームとサブフォーム別々に作成し、 サブフォーム/サブレポートツールでメインフォームとサブフォームを繋ぐ (1)の方法 【フォームウィザード起動】 ⇒【メインフォームのレコードソースとなるテーブル】⇒【必要なフィールド選択】 ⇒【サブフォームのレコードソースとなるテーブル】⇒【必要なフィールド選択】 ⇒【次へ】⇒【サブフォームがあるフォーム】⇒【次へ】⇒【表形式】⇒【次へ】 ⇒【フォーム:売上履歴メイン】⇒【サブフォーム:売上履歴サブ】 ⇒【各フォームをデザインモードで開きボックスのサイズと配置を整える】 ⇒【会社コードのテキストボックスを右クリック】 ⇒【コントロールの種類の変更】⇒ 【コンポボックス】⇒ これで新たな企業の検索ボックス配必要ありません (2)の方法 【メインフォームを表形式で作成】⇒【サブフォームを表形式で作表】 ⇒【メインフォームをデダインモードで開く】 ⇒【サブフォーム/サブレポートツールをフォームフッターに配置】 ⇒【単票フォームにしますと警告されます OK】⇒【売上履歴サブ】 ⇒【次へ】⇒【フォームフッターの下部空白部分】 ⇒【プロパティーはメインフォームのものになります】 ⇒【既定のビューの単票を帳表に変更】⇒ 以上でメインフォームもサブフォームもExcelのような表形式になります。 メインフォームの一つのレコードをクリックするとそのレコードのみの 売上履歴がサブフォームに表示されます。 メインフォームも行方向にスクロールできますので、企業名のフリガナ順に 表示すると見つけやしですね、 フォームが出来上がれば連絡ください。 次は期間内の売上履歴と集計です。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17070)
貴社は何店ありますか。「量は質に転化する」という言葉を聞いたことがありますか。 データ量や条件数が限度を超えると、別の方法を考えないといけない。その量がシステムを考えるときに一番重要になります。質問には必ず入れるべきですが認識が低い。10店程度で考えてよいですか。データ量は。 ーー >月の売上履歴をテーブルに蓄積させたい 売り上げのデータは店別かつ日別(合計)で作成済みではないのですか。 もっと販売品別とかの明細が対象になっていますか。現状存在するテーブルレコードの細かさのレベルを明記してください。 ここでは質問はデータを作成する局面は問題外ではないのですか。中間的な集計データ(日別+店舗別売上集計を作りたいのですか。検索利用と分けて考えるべきと思いますが。 そのレベルを質問には、はっきり書かないと。 >フォームで店舗IDと日付(例:201501-201502テキストボックスは1つにするのだと思うが店舗IDはいくつまで指定しますか。カンマを入れて点コードを入力するとして、カンマでスプリット(分割)するならSplit関数があるVBAのほうが簡単でしょう。 日付も、からまで、の年月をーでFrom、Toを並べるならSplit関数が使えます。 アクセスVBAでは使えても、ACCESS関数にはSplitに類する関数は無いようです。 >サブフォームに履歴をレコードごとに表示させたい 履歴とは日付順に出すだけで、最終アウトプットのレコード順の指定で済むことではないですか。 ーー 条件が合う生のデータ(元テーブルデータ通りを集計せずに)出せばよいのでしょう。 その場合、店別合計もほしいか、店別、日付別合計もほしいのですね。質問では明確でない。 === 発想の転換。 この問題(操作者)は主に質問者一人の問題ですか。いろんな人(別社員)にやらせますか。 エクセルや、エクセルVBAにピボットテーブルという便利なツールがあります。 この利用で賄えませんか。検討してみてください。 数人なら、貴社での代表的なアウトプットのための、ピボットの操作のマニュアルを作って、それでやってもらうのはどうですか。 ピボットテーブルの機能では賄えない点はどんな点でしょうか。 ピボットテーブルを超えるシステムをAcessで作るのが大変と思いますが。質問表題の「至急」というなら なおさらでしょうね。 > 手順的な形で教えていただけると 回答に書いてある通りにすればできるように、という希望でしょうが、問題が少し大きすぎますね。
- Ceranaj
- ベストアンサー率58% (14/24)
売上履歴を記録してあるテーブルを基に、クエリを作成し、 その抽出条件欄に、条件を記述してやれば、ご希望のことが全て実現致します。 (特に難しいことではありません) 既に解決済みかとも思いますが、 以下、実現までのヒント(一例)を簡単に書かせて頂きます。 詳細は、文末に記したサイトなどで調べれば、すぐに分かると思います。 フォームは2つ(メインとサブ)作成する必要があります。(必須ではありませんが) また、売上履歴テーブルを基にしたクエリを「 売上履歴クエリ 」と仮称します。 (1)サブフォームに履歴をレコードごとに表示させたい。 ・サブフォームを表形式で作成します。 ・レコードソースは、「 売上履歴クエリ 」に設定します。 ・メインフォームを作成(レコードソースは設定しません)し、サブフォームをこの中に設置します。 ・更に、メインフォーム内に、検索条件の入力用コントロールを、抽出項目分だけ作成・設置します。 ・必要に応じて、検索ボタンを設置します。 (2)店舗ID、日付で検索させたい ・売上履歴クエリの、店舗IDの抽出条件欄、日付の抽出条件欄に、それぞれ条件を記述します。 (3)検索範囲での集計金額を表示させたい ・売上履歴クエリの、金額の集計欄に "合計”を指定します。 ・或いは、サブフォームのフッターに、合計金額(コントロール)を作成・設置し、 コントロールソース欄へ =Sum(Nz([合計金額])) と記述する。 ※ この部分は、少し工夫が必要になるかもしれません。 (参照:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1446317994) (4)月の売上履歴をテーブルに蓄積させたい。 ・売り上げを記録するテーブルに、フォームを利用して入力していくことでデータは蓄積されます。 ・検索履歴の蓄積!?ということでしたら、追加クエリを作成し、別テーブルへ書込ませます。 参考になるサイトを見つけましたので、ご参照下さい。 http://accessvba.blog.so-net.ne.jp/2013-08-02 「 access サブフォーム 検索 」などのワードで検索すれば、色々とヒットすると思います。 マクロやVBAの使用など、やり方はいくつかありますが、上記サイトでの方法が、最も簡単だと思われます。
お礼
ありがとうございます。 今日メインフォームにサブフォームをつけて「データシート形式」で 店舗IDを入力し検索ボタンを押したら売上履歴が出るようにはなりました。 ただ、月ごとに絞って表示するところまでは行ってません しかも、なんとなくで出来たので完成した理由がさっぱりです。 (2)についてはやり方を具体的におしえていただけると助かります。 また、店舗IDを入力し検索することで店舗名もメインフォームのテキストボックスに 表示させたいです。 (4)はフォームでちまちま売り上げを商品ごとに店舗ごとに打ち込むのは一苦労なので テーブルにインポートして蓄積していけたらと思っています。
お礼
ありがとうございます。 皆さんのも参考にさせていただきました。 今回はすでに作成できましたのでこれで終わらせていただきます。