• 締切済み

エクセルVBAとアクセスでの在庫管理PGMの仕様

おはようございます。 お世話になります。 こちらの質問からの派生で、エクセルVBAとアクセスで在庫管理をするプログラムの作り方を質問させていただいております。 http://okwave.jp/qa/q8352035.html よろしくお願いいたします。 仕様について 【1】テーブルのフィールドとしては5つ、商品番号、カラー、サイズ、在庫数、備考 →上記のレイアウトでお願いします。ただし、最初に設定したフィールドを今後増やす場合にプログラムに修正の必要が発生するかどうか私の知識ではわかりません。 今後は色々なサインを各商品に持たせて、色々な切り口で商品を抽出したいと考えているため、フィールドを後から増やすのがやっかいな場合は最初から備考を1から16までの16個用意したいです。それに商品番号、カラー、サイズ、在庫数を合わせた20フィールドでお願いできますでしょうか。 【2】テーブルの入力は、フォームは作らず、当面テーブルに直接入力とする →上記の方式で問題ありません。INSERT文を作り、新しいアイテムの在庫レコードは直接テーブルに挿入します。 【3】検索用フォームとクエリーをつくる。カラーとサイズを条件にして該当するレコードを抽出 →はい、商品番号・カラー・サイズを条件にしてレコードを抽出したいです。 ここでどこまで可能かわからないのでもし無理を言っているようでしたらご指摘いただきたいですが、現在のデータ状況とともに希望を述べさせていただきます。 ※1※カラーに関しては、色違いのものがある場合にはセットされていますが、色違いがない場合はセットされていません。カラーを何かセットしないとならない仕様や、カラーが入っていないレコードは抽出されない仕様ではない方がありがたいです。 ※2※商品番号をあいまい検索にすることは可能でしょうか。たとえば「99999shirt」と登録されているものもあれば「9999」だけで特に服の型が入っていないものもあります。手元に「99999」の服があったときに、その在庫を確認するときに「99999」とうてば結果が確認できるとよいですが、「99999shirt」とうたないと検索されないと不都合があります。(「99999shirt」だったか、「99999blouse」だったか…と困りそうです) ※3※検索結果は条件にあてはまるものすべてを表示したいです。理由はほぼ同じ番号で登録されているものがあるからです。たとえば「999onepiece」「999_onepiece」などです。このとき、「999_onepiece」を確認したく、「999」と打ち込んで検索したときに「999onepiece」を先に見つけたので検索を終了するような仕様だと結果が得られません。 ※4※抽出レコードの表示フィールドは指定できますでしょうか。「商品番号、カラー、サイズ、在庫数、備考」が表示される、が標準で、目的によりたとえば「商品番号、カラー、サイズ、在庫数、備考1、備考2、備考3、備考4」まで選べるということです。これは最低限の機能ではないので検索機能に手間が増えるようであれば贅沢は申し上げません。 4在庫数を更新するためのクエリーを作る →おねがいいたします。 【補助】ほかにご希望の機能はございませんか →商品が売れた時に日々使うという意味で、上記の通りの希望となります。 拡張機能として、将来的に現在開いている各ネットショップ上での商品番号もフィールドに持たせて、それをキーとして各ネットショップシステムに更新をかけられるレイアウトのcsvを吐き出せられたらさらに自動化が進んだプログラムになると思うのでそういう希望はあります。そういった拡張の余地のあるプログラムを希望いたします。 私のPC環境はWindows7・Office2010です。 どうぞよろしくお願いいたします。

みんなの回答

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

お早うございます。 回答No.22の続きです。 今まで、入出庫帳のやり取りは無かったのですが 運用に入ると、商品毎の入出庫及び在庫残の読み合わせ チェックのため必要と思い勝手ですが追加しました。 在庫残を取引毎に計算するのはEXCEL簡単なのですが 少し手こずりましたが、解決しました。 商品毎に、期初在庫に入出庫のデータを加減するため 1.商品No.をグループとし 2.入出庫データの累積計算の項目です。 そのため「増減累積」を追加しました。 このは運用上必要のありませんので、非表示で運用して下さい また、プロフィールに消費税率があります。 これは将来T入庫がT売上、T出庫がT仕入に変わった時の用意です。

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

その後如何ですか あなたとのやり取りの中で、在庫管理に必要な最小限のシステムをつくってみました。 やり取りの中で在庫繰越処理コーディングにミスがありました。 ご迷惑をおかけしたことと思います。申し訳ありません。 webにUPしました。 パスワード chayamatiで次のURLよりだうんろーどしてください。 http://fast-uploader.com/file/6943348072840/ 尚、有効期間は6日間です。 お忙しいと思いますが、取り敢えずダウンロードして下さい。 このシステムはメニューフォームから始めます。 そのためファイルを開くとメニューフォームが起動するように 【ファイル】⇒【オプション】⇒【カレントデータベース】 と入って、フォームの表示をメニューとし、「OK」をクリックします。 このメニュー画面の最上段にプロ―フィール、最下段に、基準日を中心として計算した 日付が配置されています。運用時にはこれらを非表示にします。 次に、マスタ登録をクリックしてプロフィール、カラー、サイズを登録し一旦 閉じるボタンでマスター登録を閉じ、再度マスター登録を開いて商品を 登録します。 次にまたメニューに戻って、マスター登録で月初在庫登録 この月初在庫登録は1回切りで、翌月からは在庫繰越により作成されます。 これで運用の準備が出来ました。 白状しますが、ACCESSは講習を受けていませんし、テキストを読破もしていません 自分の知識には 色々抜け落ちがあります。 ACCESS以外のデーターベースにも通用するDAQ,ADOは全くの無知です。 このコーナに拘っていると、自分とoptimumsoup様の2名だけのアドバイスになります。 お分かりと思いますが、質問にも賞味期限があるようです。

ARIES10
質問者

お礼

ありがとうございます。 システムまで作っていただけるとは! ダウンロードしました。 そして開いてみました。 アクセスでこんなにWEBっぽいメニューが作れるんですね。 びっくりしました。 ※さらさらっと触らせて頂きましたが細かい内容の  理解や確認をする時間は現在はありません。すみません。 はい、講習も読破もなさっていなくて問題ないと思います。 アドバイス頂いたとおり自前のシステムの小回りの良さは 何物にもかえがたいものがありますし、運用面をきちっと きめること、そして何か起きた場合の被害状況をあらかじめ 把握しておいてリカバリ方法を抑えてあること。 このあたりに留意しておけば、組織の大きさにもよりますが、 私の状況に限って言えば全く問題ありません。 質問には賞味期限がありますが、chayamati様からの在庫 テーブルのリレーションと期日のあたりの理解ができて いないとはいえ、おおまかにはすでに最低限度のものを 作り上げられており、運用も開始できていますので これ以上ほかの方からのアドバイスがいただけなくても 大丈夫です。 ありがとうございます。 私のタスクが在庫管理のみでないため、運用開始したのちの 最近は、一刻も早く在庫管理システムを育てたいと思いながらも 他作業に追われる日々です。 以前にお伝えした通り、再度のご連絡までは随分と 時間を要す見込みです。 恐れ入ります。

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

>実はウィルス性腸炎のようなものにかかったのか、 10~12月に多く流行するそうですね。お大事になさって下さい。 >在庫テーブルの他に入庫と出庫のテーブルの値を >読み込んで理論最新在庫を出すクエリについて、 >ご例示いただくことはできますか? 自分はクエリーで在庫更新はできません。VBAを提案します。 DoCmd.RunSQL "SQL文"を使います このSQL文は、DELETE、INSERT、UPDATE、3つだけですが 少しややこしいです。頑張ってください。 考え方は、商品すべての在庫のレコードを用意し ここへ入庫合計、出庫合計、翌月の期初残をUPDATEします。 メニューフォームに在庫計算というラベルボックスを配置します。 このボックスのクリックイベントで在庫計算をします。 プログラム中の「DoCmd.SetWarnings True」は 実行時の更新過程で色々メッセージが返ってきます。 更新過程が確認出来たら「DoCmd.SetWarnings False」に変更して下さい。 Private Sub 在庫計算_Click() DoCmd.SetWarnings False 'T在庫へ追加された商品も含めてレコードを追加 DoCmd.RunSQL ("Insert Into T在庫(商品ID,期初日) Select ID,月初日 From T商品 ;") 'T在庫の当月入出庫数を0にする DoCmd.RunSQL ("Update T在庫 set 入庫数 = 0,出庫数 = 0 where 期初日 = 月初日 ;") 'T在庫の当月入庫数の計算 DoCmd.RunSQL ("Delete From T集計;") DoCmd.RunSQL ("Insert Into T集計(商品ID,数量) select 商品ID,sum(入庫数) From T入庫 WHERE (月初日 <= 入庫日) AND (入庫日 <= 月末日) group by 商品ID ;") DoCmd.RunSQL ("Update T在庫 Inner Join T集計 On T在庫.商品ID = T集計.商品ID set 入庫数 = 数量 where 期初日 = 月初日 ;") 'T在庫の当月出庫数の計算 DoCmd.RunSQL ("Delete From T集計;") DoCmd.RunSQL ("Insert Into T集計(商品ID,数量) select 商品ID,sum(出庫数) From T出庫 WHERE (月初日 <= 入庫日) AND (入庫日 <= 月末日) group by 商品ID ;") DoCmd.RunSQL ("Update T在庫 Inner Join T集計 On T在庫.商品ID = T集計.商品ID set 出庫数 = 数量 where 期初日 = 月初日 ;") '翌月の期初在庫計算(=在庫数を翌月へ繰越) DoCmd.RunSQL ("Insert Into T在庫(商品ID,期初日) Select ID,翌月日 From T商品 ;") DoCmd.RunSQL ("Update T在庫 set 期初在庫数=0,入庫数 = 0,出庫数 = 0 where 期初日 = 翌月日 ;") DoCmd.RunSQL ("Delete From T集計;") DoCmd.RunSQL ("Insert Into T集計(商品ID,数量) select 商品ID,期初在庫数+入庫数-出庫数 From T在庫 WHERE 期初日 = 月初日 ;") DoCmd.RunSQL ("Update T在庫 Inner Join T集計 On T在庫.商品ID = T集計.商品ID set 期初在庫数 = 数量 where 期初日 = 翌月日 ;") DoCmd.SetWarnings True MsgBox ("在庫更新完了") End Sub 乱暴ですが、T在庫の主キーが商品IDと期初日になっているため大丈夫です。 説明は省いていますので、ご不明な点はご遠慮なく

ARIES10
質問者

お礼

ありがとうございます。 現在、 ・エクセルからアクセスを読み込み、変更して更新。 ・レコードの持ち方は商品番号・カラーの組み合わせ単位で1レコード。 ・カラムが各サイズ分用意されている。 ・在庫数変更の履歴がわかるように入出庫テーブルを用意し、更新した内容をそちらのテーブルにセット という仕様です。 とりあえず、手入力期間を延ばさないために、このまま日々の運用を開始します。 つまりお伝えしたいことは、現在は遅れている他作業に移り、そちらが落ち着いてから、改めて、 ・アクセス内にたくさんのテーブルを用意して必要情報をキーのリレーションで取得する ・在庫を入庫・出庫テーブルとの連携で管理する ・上記ご教示の期を意識した在庫管理を実現する などの改良を行っていく予定ということです。 そのため、こちらの質問スレッドにて 再度ご連絡させていただくまでに時間があいてしまうであろうことをお知らせしておきたいと思って書いています。 ご理解よろしくお願いします。 色々とご教示くださりありがとうございます。

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

>プロフィールで設定ができるんですね。 その通りです。 プロフィールテーブルを元テーブルとして「メニュー」というフォームを 作り、この中にフィールドを展開します。 ここで展開したボックスは他のフォーム、クエリー、レポートで参照できます。  参照例 forms!メニュー!最少保存期間 この他 基準日、月初日、月末日、翌月日も配置します。 これらの多くは、運用上必要のないものですので、動作が確認出来た後は非表示にします。 また、このフォームには、他のフォーム、レポートを呼び出すボックスも配置します。 ※ボックスはコマンドボタンに限らず「ラベルボックス、テキストボックス、コンボボックス でもイベントを発生できます。  自分はコマンドボックスは背景色が使えないので使っていません。 >消去するクエリに「何日以上経過しているもの」というような >条件を付けなくても、テーブルの列自体に消去対象外にできるような条件が付けられるのですか。 クエリではないですが、マクロでもありません   DoCmd.RunSQL ("delete from T入庫 where 入庫日<=[削除上限日] ;") でいかがでしょうか メニューを開いたときの日付計算のプログラムです。 Private Sub Form_Load() 基準日変更RTN End Sub Private Sub 基準日変更RTN() 月初日 = 基準日 - Day(基準日) + 1 月末日 = 月初日 + 35 - Day(月初日 + 35) 翌月日 = 月末日 + 1 End Sub Private Sub 基準日_Exit(Cancel As Integer) 基準日変更RTN End Sub ついでにテーブルの一覧を添付しておきます。 この中にT集計なるテーブルは在庫計算のための一時手金テーブルです。

ARIES10
質問者

お礼

ありがとうございます。 実はウィルス性腸炎のようなものにかかったのか、 ちょっとダウンしていまして、 ご連絡遅くなり失礼しています。 日付の制御についてのご教示ありがとうございます。 在庫テーブルの他に入庫と出庫のテーブルの値を 読み込んで理論最新在庫を出すクエリについて、 ご例示いただくことはできますか? 入庫と出庫のテーブルはパラメータに対して集合値を 抽出する必要があると思いますので それをご例示頂けると助かります。

ARIES10
質問者

補足

こんにちは。 在庫テーブルの持ち方についてなのですが、 大きな悩みがあります。 エクセル時代のレイアウトは以下です。 商品名 カラー 92cm 98cm ~ 140cm A 赤 3 2 ~ 5 A 青 4 2 ~ 2 B 緑 2 0 ~ 1 こんな感じで列数で行くと20くらいになります。 現在、エクセルからアクセスに読込・更新しに行くプログラムは 上記のテーブルレイアウトのままになっています。 エクセル時代から、このようにまとめられていて、視覚的に 全サイズの合計も右端に表示できていますし、 何かイベントなどでボリュームを加味しながら候補を抽出するのに最適なのです。 これに対して、ネットショップなどのシステムもそうですが、 在庫管理の一般的なレコードの持ち方は以下だと思います。 商品名 カラー サイズ 在庫数 A 赤 92cm 3 A 赤 98cm 2 A 赤 140cm 5 A 青 92cm 4 A 青 98cm 2 A 青 140cm 2 B 緑 92cm 2 B 緑 98cm 0 B 緑 140cm 1 このレイアウトで保持すれば、まず扱うサイズが増えた場合でも 列を増やす必要もないですし、ネットショップの在庫を更新するcsvのレイアウトに 合致するため、在庫システムからネットショップ更新csvの出力をすることも可能です。 ただしレコード数が増えることと、ある服が大体どのくらいのサイズに着数ボリュームがまとまっているかなどが確認しづらいことと、 今までのレイアウトと大きく異なるため他スタッフが困惑することがデメリットです。 この上記の両者のレイアウトのうちメリットデメリットを考慮してどちらで管理すべきかすぐに結論が出なかったので、とりあえず現在のエクセルをそのままアクセスに取り込んで、システム構築をしましたが、システム側がとりあえず一段落したことで ついにテーブルレイアウトを決めなければならないかなと思っています。 個人的には、在庫管理システム構築のために用意した先週を過ぎたことにより、 他作業との兼ね合い的になかなか作業時間の確保が難しい中で今傾いているのは ・前者の俯瞰的に見やすいレイアウトのままで行く ・ただし、更新履歴がわかりづらいので、在庫テーブルを更新すると同時に「入出庫テーブル」を用意し、在庫テーブルへの更新内容を毎度INSERT文で入出庫テーブルにも履歴の意味で挿入していく です。 これで、今までのエクセル管理かつ「一年に一度数を数えたらその後はもう在庫表は減らしていかない、また一年後に数を数えて誤差をなおす」よりは 「常に最新の状態で更新時にミスがあっても履歴がわかるので値を元に戻せる」になり、最低限は確保できるかと思っています。 現在手管理の状態で進んでいるのでとりあえず上記で運用に載せてから、 今までアドバイス頂いた内容を時間の許す中で水面下で構築していき、準備が整ったら 本番反映、としたいと考えております。 上記の考え方について、ご意見・ご教示頂けますでしょうか。 理想は、裏では後者のようなレコードの持ち方をしているのに、 エクセルで表示するときには前者のようなレイアウトになっていて見やすい、ですが、 これはさすがに難しいかなと思っています。

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

>の際には入出庫の両テーブルのデータは消去するのでしょうか? 入庫テーブル、出庫テーブル基本的には残して 置きます。 ・入庫データ、出庫データに誤りが見つかったとき、さかのぼって修正が可能になります。 ・在庫の棚卸在庫と理論在庫に差異があったとき、差異のを入出庫データに追加することも必要です。 (棚卸の照合が終わるまで、日々のデータを入力出来ないシステムでは使い物になりませんね) しかし、レコード数が多くなるとシステムが重くなります。 そのときは、古いレコードは削除することになります。 このために最少保存期間をプロフィールの項目に用意して、 削除に制限 在庫数の更新は前回の期初在庫数+前回の入庫数-前回の出庫数 入庫数は期初日~期末日 の入庫データの合計 出庫数は期初日~期末日 の出庫データの合計 ところでテーブルルックアップは確認して頂きましか これのもう一つの効能はEXCEL等のデータをインポートしたとき 登録されていないデータははじき出されます。

ARIES10
質問者

お礼

ありがとうございます。 プロフィールで設定ができるんですね。 消去するクエリに「何日以上経過しているもの」というような 条件を付けなくても、テーブルの列自体に消去対象外にできるような条件が付けられるのですか。 改めて、アクセスとは便利なものですね。 テーブルルックアップはまだです。 まず在庫系テーブルの概念の理解・確認をさせて頂いています。 テーブルルックアップを操作してみて不明なことがあれば また質問させていただきます。 ありがとうございました。

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

optimumsoup様のご提案でスタートされる予定のようで また、optimumsoup様の解説も詳しくされているので 混乱されないかと遠慮していました。 メッセージを頂きましたので少し 回答No.(2)と(3)重複していますね、大変ご迷惑をかけました。 >在庫系の3テーブルの扱い…… 在庫テーブルの初期在庫数は月単位または年単位の更新がよいかと ・在庫テーブル  期初日(主キー 日付型)  商品ID(主キー 長整数型)  初期在庫数(長整数型)  入庫合計数(長整数型)  出庫合計数(長整数型) テーブルの商品IDのプロパティーを 添付図のようにルックアップタブより表示コントロールを テキストボックスからコンポボックスに変更します。 これは、フォーム、レポートにも反映されるので 改めて商品テーブル参照のコンボボックスの作成不用です。 ※添付図 連結列はT商品.ID、列数はT商品.ID、T商品.商品名  列幅はT商品.ID、T商品.商品名の表示幅でT商品.IDを非表示

ARIES10
質問者

お礼

おはようございます。 ご回答ありがとうございます。 また、ご遠慮いただくというお気を遣っていただく展開となり、心苦しい限りです。 それでは、chayamatiさまには 在庫テーブルの設計・設定をメインにご教示いただけましたら 幸いです。 最初に質問した時には、エクセルまたはアクセスで こんなことができるのか、また同ソフトで こういう業務管理をすることは是か非かというところから スタートさせていただきましたが、 現在ではある程度データベースの読込・書込まで実現できています。大変ありがたいことです。 そこまでできることになったことで、視点の比重が技術面のみから運用面にまで気にかけれるようになり、在庫テーブル一個の直接更新が運用面でかなりリスキーだと感じています。 他にもテーブルは多く用意する予定ですが、目的のメインが在庫管理であるので、このテーブルの設計を助けて頂けることは大変有難く感じています。 在庫テーブル(初期値セット用)は最初にデータセットしたらそのままなのかと思っていましたが月または年単位で、入出庫の両テーブルの値を元に更新するのですね、理解しました。 その際には入出庫の両テーブルのデータは消去するのでしょうか? また、 初期在庫数(長整数型) 入庫合計数(長整数型) 出庫合計数(長整数型) ということは、在庫テーブルの初期在庫数という欄を入出庫の両テーブルの入庫数と出庫数という欄の値で更新すると思っていましたが、 入庫合計数(長整数型) 出庫合計数(長整数型) という欄を用いて更新するのでしょうか? 入庫合計数(長整数型) 出庫合計数(長整数型) はいつでも入庫テーブルまたは出庫テーブルの合計値を保持するような式をセットしておくようなイメージでしょうか? よろしくお願いします。

noname#192382
noname#192382
回答No.17

回答いたします。バージョンの違いがあり、また質問者さんの方針との違いもありますが、一応私のほうのプログラムの説明分ができましたのでお送りします。 在庫管理アクセスプログラム 前提条件 すでにマスターテーブルは作られているものとする。 一定の条件を指定して、該当するレコードを検出し、または更新するプログラムを作成する。 データベースを使い易くするためメニュー画面を作り、メニュー画面に「レコード検出、更新」のボタンを配置する。 ソフトバージョン アクセス97 プログラム名 在庫管理db22 テーブル名 在庫管理マスターテーブル フィールド 1.  MテーブルID 数値型  キー        2. 商品番号   テキスト型        3.  サイズ テキスト型        4. カラー  テキスト型        5  在庫数 数値型        6.  備考  テキスト型 メニューをフォームで作る                                       1. アクセスを起動 2.ツールバーのファイルをクリック  3.在庫管理db22を開く 4.フォーム>新規作成をクリック 5フォームの新規作成のウインドウの中でデザインビューを選びOKをクリック 6ウインドウの中のフロア部分の左上隅の四角のマークを右クリック 7.すだれの中のプロパティをクリック 8.フォームのウインドウの中の書式の見出しをクリック 9.標題の欄に「在庫管理メニュー」と入力 10.「スクロールバー」をクリックして「なし」を選択 11.「レコードセレクター」をクリックして「いいえ」を選択 12.フォームのサイズをたて7よこ12に広くする 13.ツールの四角形をクリックして 14.フォームの中をドラッグして四角を作る 15.ツールバーのなかの「塗りつぶし/背景の色」のプルダウンマークをクリックし上から2段目右から2列目の色をクリック 16.ツールボックスの中の「ラベル」をクリックして、フォームの中にたて1ます横8ますくらいのラベルを作成する 17.ラベルのなかに「在庫管理メニュー」と入力して「enter」キーを押す 18.ラベルをデザインビューにしておいて、フォントサイズを26に大きくする コマンドボタンを追加する 1.ツールボックスのなかの「コントロールウィザード」がオフになっていることを確認して 2.ツールボックスのなかの「コマンドボタン」をクリック 3.ドラッグしてたて0.5マスよこ5マスくらいの大きさにする 4.追加したボタンを右クリック 5.すだれの「プロパティ」をクリック 6.「書式」の見出しをクリック 7.「標題」をクリックして「指定条件に合う在庫レコードを検索」と入力 8.「閉じる」をクリック 9.「上書き保存」をクリック 検索クエリーをクエリーで作る 1.クェリー新規作成 2.「デザインビュー 」 「OK」 3.「テーブルの表示」のウインドウのなかで「テーブル」の見出しの中にある「在庫マスターテーブル」をクリックして「追加」ボタンを押す 4.「テーブルの表示」のウインドウのなかで「閉じる」を押す 5..「MテーブルID 」をフィールドのところにドラッグ貼り付けをする 6.「商品番号」「サイズ」「 カラー」「在庫数」についても同様にフィールドのところにドラッグ貼り付けをする 7..「上書き保存」をクリック 8.「名前をつけて保存」のウインドウでくぇりー名の入力要求メッセージが出るので「在庫検索くぇりー」と入力し「OK」ボタンを押す 9..「閉じる」をクリック 在庫管理メニューの「指定条件に合う在庫レコードを検索」のボタンに検索の機能をつける 1.「在庫管理メニュー」の「指定条件に合う在庫レコードを検索」のボタンを右クリック 2.すだれの中の「プロパティ」をクリック 3.「イベント」の見出しをクリック 4.「クリック時」のランの右端のマークを選択 5.「マクロビルダ」をクリックして「OK」 6.マクロの名前を「指定条件に会う在庫レコードを検索マクロ」と入力して「OK」 7.1番目のアクションクエリーを開く 8.クエリー名のらんで「在庫検索クエリー」を選択 9「.ビュー」らんでは「デザインビュー」とする 10.「上書き保存 」 11「プロパティ」を閉じる 使い方 1.アクセスを立ち上げる 2.「ファイル」をクリック 3.「在庫管理db22」を選択 4.「フォーム」 5.「在庫管理メニュー」を開く 6..「在庫管理メニュー」のフォームのなかの「指定条件に合う在庫レコードを検索」のボタンを押す 7.「在庫検索クェリー」のなかに、検索条件を書き込む。たとえば、カラーがピンクのものを検索するには、カラーのフィールドの抽出条件のところに「ピンク」と書き込む 8.ツールバーの「!」のボタンを押して、「在庫検索クェリー」を実行する 9.そうすると画面にカラーがピンクのレコードがすべて現れる 10.ここで、在庫数を書き込んで「enter」キーを押すとその数値が新しい在庫数となる。在庫数の更新ができる。

ARIES10
質問者

お礼

こんばんは。 大変詳しい記述をしてくださり、ありがとうございます。 エクセル側からアクセスを読込・更新を行うことを昨日の ご回答いただく前から取り掛かっており、そちらでは 読込・更新をうまくすることができました。 今回ご説明頂きましたクエリ&フォームはアクセス内で 完結するものということで、そちらでも作ってみたいと 思います。 chayamatiさまにも申し上げましたが、 最初に質問した時には、エクセルまたはアクセスで こんなことができるのか、また同ソフトで こういう業務管理をすることは是か非かというところから スタートさせていただきましたが、 現在ではある程度データベースの読込・書込まで実現できています。大変ありがたいことです。 optimumsoupさまの、プログラム作成下さるという 発言が背中を押して下さり、一気に自作システム作成へと 前傾になれたと思っています。 今では、フリーソフトを探す時間などを使う代わりに 自作でVBAを使えるようになるように時間を使えて 大変満足しています。 改めてありがとうございます。 ご教示いただいたシステムについて、うまく実装できない場合はまた補足欄にて質問させていただきます。

noname#192382
noname#192382
回答No.16

お答えします。検索条件がひとつの場合のフォームを使った検索は用意に成功したのですが、複数の場合は難航しています。 そこでとりあえずフォームを使わずにクエリーで直接検索する方法でやってみませんか。 クェリーで直接の検索であれば条件はひとつ、ふたつ、みっつ自由に選ぶことができます。 ただアクセスのバージョンがあなたと私の間で異なるので操作が違うでしょうから、うまく伝えられるか、研究しながらやっていきましょう。

ARIES10
質問者

お礼

ありがとうございます。 現在ちょっと体調を崩しておりまして また、在庫システム作成にあてていた 先週が過ぎたことにより まずは既に出来上がっているエクセルからアクセスを読込・更新するシステムで仕上げてみたいと思っています。 その後、アクセス内で完結のシステムもご例示頂いた内容で作ってみようと思っています。

ARIES10
質問者

補足

ありがとうございます。 大切なお時間をいただいて、お付き合い頂いておりまして感謝いたしております。 本日は独力で色々と試行錯誤しておりました。 アクセスでのフォームの設置にてこずり、 現在の質問の前の段階の質問スレッド http://okwave.jp/qa/q8352035.html で No.2にてwarpspace様にご案内頂いたサイト http://ateitexe.com/access-database1/ を元にエクセルからアクセスを読込・編集・削除ができる VBAを試しに作ってみていました。 現在、テスト用のVBAは問題なく動き、明朝は私の 在庫テーブルに適した形にそれを変えてみようと 思っています。 色々な手法が混在しておりますが、目的である 在庫のシステム管理のために切り口を変えて徐々に 進んでおります。 明日またお礼欄を使ってご連絡させていただくと思います。 よろしくお願いいたします。

noname#192382
noname#192382
回答No.15

マスターテーブルのフィールドは、あなたの言われた次のフィールドとしましょう。、 MテーブルID  商品管理番号  サイズ  カラー  在庫数 レコード数はどれくらいになったでしょうか。 だい1の作業として、シャツなどの品種とカラーの二つの条件に該当するデータの抽出を行うことにしましょうか。これでよろしいでしょうか、ご希望があればおっしゃってください。

ARIES10
質問者

お礼

早速ありがとうございます。 レコード数は現在は前回のテスト用の検索クエリ用のレコードのみですが、本番用データをセットした場合2500レコードくらいになります。 春夏と秋冬でシーズンを分けて販売しているため、春夏のレコードも後から在庫整理してレコードをセットする予定ですので合計5000レコードほどのテーブルになります。 データの抽出に関しては、仕様の説明で申し上げた通り「商品番号・カラー・サイズを条件にしてレコードを抽出したいです」というものですが、一番利用するのは商品番号です。売れた商品を番号入力することにより候補を抽出し、該当データを更新するというのが目的で、今回の仕組みの構築をしようとしています。 アクセスに詳しくないのですが、簡易画面を用意し、そこに検索フィールドがあり、文言を打ち込んで検索ボタンを押下すると、下の方にある明細に候補レコードたちが抽出され、その中で更新対象のレコードの在庫数カラムを更新入力して、更新ボタンを押すとマスターテーブルが更新される、というイメージです。 該当レコードが一つだけ選べて更新できるよりは、複数選べて、レコード内にあるチェックボックスにでもチェックを入れれば、そのチェックの入ったレコードたちすべてを更新する方が、同じ商品番号内で複数売れた時に便利なのでありがたい、と思っております。 検索クエリを組むことはSQLの知識はあるのでたぶん大丈夫なのですが、画面を用意したり、そこでボタンを押した場合などに裏の処理が走る仕組みだったり、エラーが起きた時のトランザクション処理など、そのあたりがゼロから作り始める際に実現が難しいと考えている所存です。 希望を述べさせていただきました。 どうぞよろしくお願いいたします。

ARIES10
質問者

補足

こんにちは。 とりあえず自力で進めてみようと思い、図書館で本を借り、 ネットで調べながら進んでみています。 アクセスにはフォームというものがありそこにオブジェクトを色々と配置できることを確認しました。 テキストや、コマンドボタンなどがあり、そのそれぞれにイベントを用意できることを確認しました。 【引っかかっている点その1】 検索文言用テキストと検索ボタンは用意できましたが、同フォーム内に検索結果を表示する明細サブフォームをうまく用意できませんでした。サブフォームの作成→既存のテーブルを読み込み、でやりましたが「できませんでした」というエラーが出てしまいました。 ネットで調べたところ、 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11110250131 これが私のやりたいことにかなり近いのですが、このページ内の回答ではちょっと初めて取り組む私には何をさしているかわかりませんでした。 こちらのページも参考にしましたが http://blogs.yahoo.co.jp/akio_myau/43712725.html うまくクリックコマンドを完了できませんでした。 現在理解しているのは、 1.フォームを用意する 2.検索用オブジェクトを配置し、検索ボタンのクリックイベントで、検索テキスト内の文字を取得しつつそれを引数にして検索クエリを走らせる という手順までです。 これを実現したいところ、検索フォームの用意までで止まっている状態です。 また、 3.検索ボタンを押した後にはテーブルからデータを取得し、画面内の明細にデータをセットする 4.変更したいデータを明細内で(場合により複数個所)更新し、更新したレコードは明細内チェックボックスにチェックを入れ、更新ボタンを押す 5.更新クエリが走り、処理完了 がその先の流れだと思っています。 上記の状態ですので、明細フォームの設置方法などをご教示ください。 よろしくお願いいたします。

noname#192382
noname#192382
回答No.14

NO12で間違いがありました。抽出条件で「onepiece」と入れると書きましたが正しくは「<>0」です。 No13のなかのお尋ねの件ですが、テーブルの作成、検索クエリーの作成についてお示ししたつもりです。わかりにくいところは指摘してください。

ARIES10
質問者

お礼

おはようございます。 ありがとうございます。 以下でおっしゃっているところの3のクエリということでよいでしょうか。3の検索フォームの裏で走るものという理解でよいでしょうか。 1は作り済みということになりますよね。 2は私が独自にINSERTするので不要ですね。 では検索クエリができたらまたご連絡します。 本日はまた在庫数えをするのでちょっと時間が空きますが よろしくおねがいいたします。 >アクセスで在庫管理のプログラムを作ってみようと思います。方針は次のものでよろしいでしょうか 1.テーブルのフィールドとしては5つ、商品番号、カラー、サイズ、在庫数、備考 2テーブルの入力は、フォームは作らず、当面テーブルに直接入力とする 3検索用フォームとクエリーをつくる。カラーとサイズを条件にして該当するレコードを抽出 4在庫数を更新するためのクエリーを作る

ARIES10
質問者

補足

こんばんは。 optimumsoupさま、 今週は在庫システムの構築に充てているため できればお早めに検索・更新を行う操作画面の作成の ご教示をいただければと思います。 水面下でご準備頂いているようでしたらご一報ください。 よろしくお願いいたします。