• 締切済み

Accessで在庫管理する時の在庫数の出し方

在庫管理をaccessで行おうとしています。 在庫数の出し方が分かりません。 =DLookUp("[在庫数]","[T_発注]","助成物コード='" & [Forms]![F_受注]![助成物コード] & "'")-nz([数量]) とすると、それらしい数は表示されるのですが、次のレコードで同じ商品(助成物コード)を指定すると、前のレコードの在庫と同じ数になってしまいます。 =DLookUp("[在庫数]","[T_発注]","助成物コード='" & [Forms]![F_受注]![助成物コード] & "'")-nz([数量]) した結果を次の『=DLookUp("[在庫数]"』の在庫数に引き継いでもらいたいのですが、どうすれば良いか分かりません。 上記で『助成物コード』が商品コードで、 『数量』が受注数です。 他にどんな情報があれば良いか分かりませんので、不足している情報があればご指摘下さい。

みんなの回答

noname#140971
noname#140971
回答No.4

Q、Accessで在庫管理する時の在庫数の出し方? A、[現在庫数]は、通常は入出庫履歴から計算します。 そこで、現行のアイデアの問題点を少し検討してみます。 検討1、入出庫の都度に[現在庫数]を表示する意義とは? [現在庫数]が20と仮定します。 1行目で1の出庫が確定・・・・20-1=19 ---> [現在庫数]を19に更新。 2行目で2の出庫が確定・・・・19-2=17 ---> [現在庫数]を17に更新。 1行目が入力ミスだったと気付いて訂正! 1行目を2の出庫に訂正・・・・17-1=16 ---> [現在庫数]を16に更新。 この時、入力フォームに表示される [現在庫数]は1行目が16に、2行目が19になります。 仮に入力ミスが発生しなかった場合には、1行目が18に、2行目が16になります。 こうして、入力フォームに表示される [現在庫数]はどれが最終かが判らなくなります。 つまり、入出庫の都度に[現在庫数]を表示する意義があるのか否か? それが、一つ目の問題です。 検討2、[現在庫数]の更新ミスをどのようにカバーするのか? 入出庫の都度に[現在庫数]を計算しているのだから、一度、ミスが発生すればそれまで。 誤まった[現在庫数]は、それ以降の全ての入出庫に反映します。 検討3、実際に要求される月次棚卸表とは? [商品名][月初在庫数][当月仕入数][当月出庫数][当月調節数][月末在庫数] [AAA][___10][____1][____0][___-1][___10] [BBB][____2][____1][____1][____0][____2] [CCC][____0][____1][____1][____0][____0] 在庫管理するとなれば、当然に月次棚卸表も作成することになろうかと思います。 問題は、入出庫の都度に[現在庫数]を更新する仕組みでは、この月次棚卸表の作成が困難。 Q、Accessで在庫管理する時の在庫数の出し方? A、[現在庫数]は、通常は入出庫履歴から計算します。 1、出庫伝票の商品入力欄で<0>と入力する。 2、<0>入力で商品検索フォームを開く。 3、商品の綴り等を入力。 4、該当する商品リスト一覧を表示。 5、商品リストからの該当する商品を選択。 6、商品の動態情報を表示。 7、現在庫を確認し[OK]を押す。 8、出庫伝票の商品入力欄に該当する商品が入力される。 通常、各商品毎の現在庫は、商品コードの入力時に表示し確認します。(6) この場合、VBAで[月初在庫数]以後の動態を計算して表示します。 一日2000行程度の入出庫履歴ですと0.1秒以内に計算できる筈。 出庫伝票の各行には、検討1の問題があるので表示しません。 各商品の現在庫を確認したいというユーザーの要求には1~7を独立させればOK。 [現在庫の確認]というアイコンを出庫入力フォームの下部にでも配置していればOK。 これで、[現在庫数]の更新ミスとは無縁の仕組みができます。 これで、月次棚卸表を作成する計算モジュールも完成です。 PS、質問されている件そのものは、更新クエリーを各行で走らせれば解決します。

mazuchk
質問者

補足

丁寧な回答ありがとうございます! root_16さんの所にも書きましたが、更新クエリに手こずっているレベルなので、どうしてこんなに詳しい回答が書けるのかビックリです。 検討1~3で困難になる事は分かりました。 >一日2000行程度の入出庫履歴ですと0.1秒以内に計算できる筈。 1日に20~30件なので、これは問題ないですね。 「月次棚卸表」は必要だと言われてないので頭にありませんでした。 ご指摘ありがとうございます。 月次棚卸表も含めて、もう一度検討させて頂きます。 ありがとうございました。

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

>次のレコードで同じ商品 データは商品コードで特定されるのです。 助成物コードが同じなら「次のレコード」 ではありません。次には「次」の助成物 コードがあるはずです。この辺りの感覚は DB慣れしていないと間違うかも知れません。 もし、レコードを特定するために助成物 コード以外のもの(例えば日付)などが あるなら、それを提示してください。

mazuchk
質問者

補足

回答ありがとうございます! まぎらわしい表現をしてしまって申し訳ありません。 「助成物コード」と言うのは商品の種類を表しているコードで、種類が同じなら同じコードになります。 レコードを特定するにはオートナンバーで「ID」と言うのを作っています。 日付もあるのですが、同じ日に同じ「助成物コード」の品が登場することもあるので、使えないですよね?

  • root_16
  • ベストアンサー率32% (674/2096)
回答No.2

最初の数量をA それ以降の日付の納品(入荷)数をB 納品数の累計をΣB 出荷数をC 出荷数の累計をΣC 累計は別途クエリを作成 さて、今日の在庫数は A+ΣB-ΣC 要するに毎回累計を計算して在庫数を計算して出す (応用すれば、ある特定の日付けの在庫数も計算できる) レコード移動の時に再クエリ(Requery)すれば いいと思います。

mazuchk
質問者

補足

回答ありがとうございます! >レコード移動の時に再クエリ(Requery)すれば >いいと思います。 済みません、初心者で更新クエリを使ったことがありませんでした。 チャレンジしているのですが、うまく動かない状況です。 もう少し格闘してみます。

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

テーブル構造など定義にかかわることと、 抽出条件などを書いていただけると良いと思います。 どのようにデータをどういうテーブルに入れているのか、 を推測して書くのはつらいものがあります。 あと、Dlookupを使いたがっているということは、 excelの感覚で、accessを使っておられるのではないかと 推測しますが、テーブルの作り方自体(データのいれかた)を 考え直したほうが良い場合もありますので、、、

mazuchk
質問者

補足

回答ありがとうございます! テーブルは下記のような感じになります(一部省略しています)。 T_助成物マスタ ID 助成物コード 品名 在庫数 T_発注 ID 注文番号 出荷先 助成物コード 数量 助成物コードは、ユニーク値ではなくて、品名のような感じです。 "Excelの感覚で"と言うのは耳が痛いです(^^; なんか、バレバレですね。。。

関連するQ&A

  • ACCESS 受注数の集計について

    教えてほしいことがあります。 宜しくお願いします。 「受注履歴」というテーブルがありまして、このようなレイアウトになっています。 受注日   商品コード 受注数量 2009/11/01  95555    10 2009/11/22  95555    5 2009/12/01  95555    10 フィールドの受注日の形式は日付で商品コードはテキスト形式、数量は数値形式です。 そしてもう一つ以下のような「受注残」というテーブルがあり、上記テーブルの受注日からさか上った1ヶ月前の日と出荷できていない受注残数などのテーブルが以下のようにあります。 受注日の1ヶ月前の日   受注日   商品コード 受注残数 2009/10/02        2009/11/01  95555    3 2009/10/23        2010/11/22  95555    2 2010/11/02        2010/12/01  95555    4 この各レコードは受注した時に在庫がなかったため、出荷できなかった数量のリストなんです。(受注日の1ヶ月間の日というフィールドは、「受注日」-30日で追加したフィールドです。) そこで、受注日からさかのぼった1ヶ月間の受注数を調べたい、そして在庫計画の参考にしたいというのが目的なんです。 例えば2009/11/22に商品95555は5個受注していますが、 (テーブル受注履歴より) その日に出荷できなかった数量は2個でした。 (テーブル受注残より) そこで、この2009/11/22から以前の1ヶ月間にどれ位受注しているのか、これを出したいのです。これを[受注履歴]を見てみますと、2009/11/1に10個と2009/11/22の5個で合計15個となるのですが、この値を「受注残」のレコードの右側にでも表示できたら便利だなあと色々とクエリでやってはみたものの、ACCESS歴2ヶ月位の私は挫折・・。 書いていることが伝われば良いのですが。 どなたか良い方法をご存知でしたら教えていただきたく、お願いします。

  • access2003初心者です。50商品の在庫管理をしています。

    access2003初心者です。50商品の在庫管理をしています。 作成したのは ・商品テーブル(商品コード、商品名) ・受注テーブル(日付、商品コード、個数) です。 受注テーブルには受注があった商品のデータしか入力していません。 しかしレポートでは、すべての商品を並べて 「受注がない商品については、数量を0」 としてレポートを作成したいと考えています。 レポートを作成するには、「元となるテーブルやクエリが必要になってくる」と本に書いてあったのですが、 この元となるクエリを作成することができません。 作成したいクエリは次のとおりです。   日付   商品 個数 2008/04/01 商品01 2 2008/04/01 商品02 0←このデータ(日付、商品、個数)は受注テーブルにはありません。以下同じ。 ・ ・ ・ ・ ・ ・ 2008/04/01 商品50 2 2008/04/02 商品01 1←ここから日付が翌日になります。 2008/04/02 商品02 1 ・ ・ ・ ・ ・ ・ 2008/04/02 商品50 0 2008/04/03 商品01 2←ここから日付が翌々日になります。 2008/04/03 商品02 2 ・ ・ ・ ・ ・ ・ データがないものに対して、 自動で日付を入力したり、個数を0にしたりしたいのですが、 どのような抽出条件またはSQLなどを書いたらいいのかわかりません。 よろしくお願いします。

  • Excelでの在庫管理

    はじめまして。 Excelで会社の在庫管理を始めようとしている者ですが、どうにもわからない事があり困ってます。 A=商品コード.B=商品名.C=サイズ.D=数量と、大きく4つに分かれている表としまして、一定数を下回ったものだけのA~Cを別シート内に集約させた表を作りたいと考えております。 要は、大量にある商品の中で『発注しないとヤバいぞ!』って項目だけをわかり易く見れたら素敵だな…と、考えてるわけです。 おわかりの方いらっしゃいましたら何卒ご協力お願い申し上げます。

  • ACCESSで在庫管理 備考欄の組み込み方?

    ACCESSで在庫管理を始めました。 なんとか在庫管理だけはできるようになりましたが、 備考欄を設けたら、備考を入れたものは数が別でカウントされるように なってしまいました。 今の在庫管理の状態は <テーブル> ・商品ベース(商品ID、商品名が入っている) ・入出庫明細 <フォーム> ・入荷票(入出庫明細テーブルに入力される) ・出荷票(入出庫明細テーブルに入力される) <クエリ> ・在庫表 ・要発注表(在庫が1以下のものだけ表示する設定) <レポート> ・在庫表(クエリの在庫表のレポート) ・要発注表(クエリの要発注表のレポート) という感じです。 フォームに商品IDを入れると、自動で商品名が表示されるようにしており(DLOOKUP)、 その下に入庫や出庫数を入力する欄、最後に備考入力欄を設けています。 たとえば、返品によって在庫が1つ増えたときに「返品」などというふうに 備考を入れたいのですが、そうすると在庫表や要発注表で 備考情報なしの物は今までの入出庫明細の合計で1行に在庫数が ずばっと出ますが、備考を入れた物はその下に同じ商品IDで 数行に出ます。 (結局最後はそれを手で計算する) 本当は、1行におさめて、備考欄を大きめにとって、そこに備考は どんどん追加されるような感じにしたいのですが、可能でしょうか? 質問の仕方も下手ですみません。 補足要求してください。宜しくお願い致します。

  • エクセル 在庫管理(在庫数から入庫月を求める)

    エクセルでの在庫管理をご教示ください。 これまで手書きで計算していた入庫月をエクセルで行いたいと考えております。 在庫数からその在庫の一番古い入庫月を求める計算式をお教えください。 例: A列 商品名 2020/1月の B列 出荷数量 C列 入庫数量 D列 在庫数量 2020/2月の E列 出荷数量 F列 入庫数量 G列 在庫数量 2020/3月の H列 出荷数量 I列 入庫数量 J列 在庫数量 *K列に、3月の在庫数量(J列)の、一番古い在庫の入荷月を求める計算式を入力したいです。 宜しくお願い致します。

  • 在庫表

    はじめまして 初心者です、助けてください。 入力項目 日付 保管場所  棚番地 商品コード  数量      3/4  4F事務所  A1   NBT044   99999    参考:保管場所は4F事務所 4F仮置場 1F測定機室 1F返品室 棚番地:A1、B1等の英数字 商品コード:6桁の英数字 品種数:2000 数量:最大9999 入力後 送信ボタンで sheet2、sheet3へ飛び 入力箇所は空欄となる sheet2 在庫履歴(保管場所、商品コード毎)     保管場所  4F事務所       保管場所 返品室      商品コード NBT444        商品コード NBT444      日付 入出数  総数量     日付 入出数  総数量      3/4  9999   9999      3/4   10    10     3/4  -99    9900      3/6   -10    0     3/5  -900   9O00   SHEET3  商品コード毎の集計 No.  商品コード  数量  備考     1   NBC048    14    2   NBV989   1800    3   NBT444   9000   2000 NBY123     20 よろしくお願いいたします。                              

  • accessで在庫管理

    こんにちは。 accessで商品(部品)の在庫管理をすることになりました。 1)商品情報(型番・部品名・仕入元など)の基本情報の入ったテーブルを作り 2)型番をキーにして出荷入荷の記録をつけ(仕入日・出荷日・数量・出荷先など)て行きたいとおもっています。 今在庫がいくつあるのか確認しつつ入力したい関係で、例えば型番を抽出条件にすると今までのレコードが一覧で見れて、(上部に部品に関する1)の情報が見れて)一番下に新しいレコードして追加入力をすることができるような形にしたいのですが、 どのようなテーブル形式、リレーションシップをとったらよろしいでしょうか? 参考になる本が見当たらず困っています。 よろしくお願いします。

  • AccessのDlookup関数のエラー

    【Access2003】 dlookup関数について教えてください。 やろうとしていることは、ある商品について任意の日付の時点での数量を表示したく、 練習として、 DLookup("[数量]", "t_商品情報", "[品番] = '"& "1001" & "' and [日付] = #" & "2007/12/17" & "#") と記述したときには正常な値が表示されました。 その後、「品番」と「日付」をフォーム上のテキストボックスで任意の値を入力したいと思い、下記のように書き直しました。 DLookup("[数量]", "t_商品情報", "[品番] = '"& "[Forms]![フォーム1]![txt品番]" & "' and [日付] = #" & "[Forms]![フォーム1]![txt日付]" & "#") フォームのテキストボックスにそれぞれ値を入力したところ、「日付の構文エラー」となってしまいました。 勉強不足なのでしょうか、原因がわからず困っております。 お詳しい方のアドバイスをお待ちしております。宜しくお願い致します。

  • Access2010実行時エラー-21473525

    特定のレコードでボタンをクリックすると、以下のエラーが表示されて、「Me.チェック = True」が黄色に反転します。 実行時エラー ’-2147352567(8002009)’ データは変更されています。 文法的におかしなことをしていると思うのですが、エラーが出ない方法を教えていただければ助かります。 よろしくお願いいたします。 Dim dbs As Database Dim strSQL As String Set dbs = CurrentDb strSQL = "UPDATE マスター " & _ "SET 在庫数 = NZ(在庫数) + " & Nz(Me.入庫数量, 0) & " " & _ "WHERE コード = '" & Me.コード & "'" dbs.Execute strSQL Me.チェック = True

  • Access2000 フォームでのデータ入力について

    質問させていただきます。 Access2000で、あるフォームを作りました(帳票フォーム)。フォームの基になるレコードソースはクエリーです。このクエリーは原料伝票テーブルから在庫数が特定の数量を下回った原料を抽出しています。 フォームは以下イメージです。 原料コード 原料名  在庫数  発注数 原料コード~在庫数をクエリーから、発注数を手入力 にしました(発注数のコントロールソースは非連結です)。 で・・・発注数に値を入力すると全部の行が同じ値になってしまします。これを改善したいのですが・・・。 このやり方は根本的に間違っているのでしょうか?

専門家に質問してみよう