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

このQ&Aのポイント
  • ACCESSで在庫管理を始めました。備考欄を設けたら、備考を入れたものは数が別でカウントされるようになってしまいました。
  • 現在の在庫管理の状態は、商品ベースと入出庫明細のテーブル、入荷票と出荷票のフォーム、在庫表と要発注表のクエリ、在庫表と要発注表のレポートという構成です。
  • 備考欄を大きめにとって、そこに備考をどんどん追加するような形式の在庫管理をしたいのですが、可能でしょうか?
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
noname#140971
noname#140971
回答No.13

>(入荷数+出荷数) AS 現在庫 ちょっと、DBSum関数に落とし穴があったみたいです。 テストで見落としていました。 まあ、還暦目前のじっちゃまのことです。 許されたし。 Public Function DBSum(ByVal strField As String, _ ByVal strTable As String, _ Optional strWhere As String = "") As Variant ・・・・ End Function このように戻り値の型を Variant にしています。 ですから、 SELECT DBSum("数量","入出庫明細") AS AAA, DBSum("数量","入出庫明細") AS BBB, AAA+BBB; AAA=80 BBB=80 AAA+BBB=8080 とクエリではなります。 これは、DBSum関数は、対象列や戻り値の型を知って使えということです。 SELECT CDbl(DBSum("数量","入出庫明細")) AS AAA, CDbl(DBSum("数量","入出庫明細")) AS BBB・・・ AAA+BBB=160 CINT・・・・整数 CLng・・・・長整数 CDbl・・・・倍精度 このように、列[数量]の型に変換してみて下さい。 そうすれば、この不具合は是正されます。 まあ、戻り値を Variant から変更すれば済むことですが・・・。 さて、どっちが良いのかはプロではないので明確な意見を持ち合わせていません。

Winniethepooh
質問者

お礼

ありがとうございました!!遂に出来ました!! でも、今回できたのは、Husky2007さんに作っていただいたあの標準モジュールあってのものですよね。 やっぱりかなり詳しくないとできないですね( ̄~ ̄;) 本当に長々と根気強く教えていただいてありがとうございました。 お茶ぐらいごちそうしたいもんです。

その他の回答 (12)

noname#140971
noname#140971
回答No.2

商品マスター: ID___品名___期首在庫 1________A_____________3 2________B_____________3 入荷明細: ID___日付___________商品マスター_ID___数量___備考 1____2007/10/01_____________________1_______9___通常 2____2007/10/01_____________________2______10___返品 3____2007/10/02_____________________1_______1___返品 出荷明細: ID___日付___________商品マスター_ID___数量___備考 1____2007/10/02____________________1_______5 2____2007/10/02____________________2_______5 3____2007/10/03____________________1_______1 4____2007/10/03____________________2_______1 現在庫クエリ: 品名____期首在庫___入荷数___出庫数____現在庫 A________3___________________10___________6_________19 B________3___________________10___________6_________19 とまではOKだったが・・・。 これに、次のように備考欄を加える術が判らないということでしょう。 現在庫クエリ_II: 品名____期首在庫___入荷数___出庫数____現在庫___備考欄 A________3___________________10___________6_________19___通常,返品 B________3___________________10___________6_________19___返品 普通は、Left join とか union とかを駆使すればと考えますが、そうではなく単純な SELECT 文で実現。 SELECT 品名, 期首在庫, DBSum("数量","入荷明細","商品マスター_ID=" & [ID]) AS 入荷数, DBSum("数量","出荷明細","商品マスター_ID=" & [ID]) AS 出庫数, (期首在庫+入荷数+出庫数) AS 現在庫, DBSelect("SELECT 備考 FROM 入荷明細 WHERE 商品マスター_ID=" & [ID],",") AS 備考欄 FROM 商品マスター; 実際に作成してテストした<現在庫クエリ_II>ですが、誰が見ても判る簡単なものです。 標準モジュールに次の関数を登録すれば、質問者の目的も実現できます。 Public Function DBSum(ByVal strField As String, _            ByVal strTable As String, _            Optional strWhere As String = "") As Variant On Error GoTo Err_DBSum   Dim N   Dim strQuerySQL As String   Dim rst     As ADODB.Recordset      Set rst = New ADODB.Recordset   strQuerySQL = "SELECT SUM(" & strField & ") FROM " & strTable   If Len(strWhere) > 0 Then     strQuerySQL = strQuerySQL & " WHERE " & strWhere   End If   With rst      .Open strQuerySQL, _         CurrentProject.Connection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then        .MoveFirst        N = Nz(.Fields(0), 0)      End If   End With Exit_DBSum: On Error Resume Next    rst.Close    Set rst = Nothing    DBSum = N    Exit Function Err_DBSum:    MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSum)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSum End Function Public Function DBSelect(ByVal strQuerySQL As String, _              Optional ByVal strSeparator As String = ";") As String On Error GoTo Err_DBSelect   Dim I   As Integer   Dim J   As Integer   Dim R   As Integer   Dim C   As Integer   Dim M   As Integer   Dim N   As Integer   Dim rst  As ADODB.Recordset   Dim fld  As ADODB.Field   Dim Datas As String      Set rst = New ADODB.Recordset   ' =================   ' Begin With: rst   ' -----------------   With rst      .Open strQuerySQL, _         CurrentProject.Connection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then       M = .RecordCount - 1       N = .Fields.Count - 1       .MoveFirst       For R = 0 To M         For C = 0 To N           Datas = Datas & .Fields(C) & strSeparator         Next C         .MoveNext       Next R      End If   End With   ' ---------------   ' End With: rst   ' =============== Exit_DBSelect:   DBSelect = Left(Datas, Len(Datas) + (Len(Datas) > 0))   Exit Function Err_DBSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelect End Function

Winniethepooh
質問者

お礼

ありがとうございます。 SQLなどは全然わからない初心者で、教えて頂いた内容を 自分のテーブルやフィールド名と合うように変えて、 保存したつもりなんですが、関数エラーメッセージが出てしまいました。 ちなみに、私の作ったものには「期首在庫」はなく、入荷か出荷で 個数を入力すると初めて商品がクエリで出る、というものです。 教えていただいた式と、自分が使っているテーブル、フィールド名が違うので 訂正が必要ですよね? たとえばIDというのは商品IDと置きなおしていいのでしょうか? また、 DBSelect("SELECT 備考 FROM 入出庫明細 WHERE 商品ベース_商品ID=" & [商品ID],",") AS 備考欄 FROM 商品ベース; のところが全然わかりません。 Public Function DBSum(ByVal strField As String, _・・・・ というのは標準モジュールに登録しました。(でいいんでしょうか?) もしもお時間ありましたら教えてください。すみません。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

集計クエリからは備考欄を外さないとだめです もう一点 >フォームに商品IDを入れると、自動で商品名が表示されるようにしており(DLOOKUP)、 DLookupはこのような時に使うものではないですよ クエリを使用しましょう

関連するQ&A

  • Access初心者です。(Access2003)

    書籍の在庫管理のフォーム作成で、、 メインフォームとサブフォームにわけました。 しかし、サブフォームで 1つの商品を入力し、2番目の商品を入力すると、 先の1つめの商品入力の履歴が、2番目と同じになってしまいます。 (数量だけは1番目の入力通り残ってくれてます) <サブフォーム> ------------------------------ 申請書番号、商品コード、版、商品名、数量 ------------------------------ 1行目 0001 060 3-5 ACCESS入門書 5 2行目 0001 061 5-6 ACCESS応用書 3 ------------------------------- となるはずが、2行目を入力すると ------------------------------ 1行目 0001 061 5-6 ACCESS応用書 5 2行目 0001 061 5-6 ACCESS応用書 3 ------------------------------- となってしまいます。 商品名の箇所は、 商品コードと版を入れると自動で商品名が反映されるように、 コントロールソースに 「=DLookUp("商品名","T_商品","商品コード='" & [コード] & "'" & "And 版='" & [版] & "'")」、 としました。 構造情報は以下の通りです。 メインフォームの元は、 <テーブル:T_入出庫> ・申請書番号 ☆「T_入出庫明細」と結合 ・提出日 ・担当者 ・備考 など サブフォームの元は、 <クエリ:Q_入出庫明細_サブフォーム> ・申請書番号(T_入出庫明細) ・商品ID(T_入出庫明細) ・商品コード(T_商品) ・版(T_商品) ・商品名(T_商品) ・数量(T_入出庫明細) Q_入出庫明細_サブフォームの元は、 <テーブル:T_入出庫明細> ・申請書番号 ・商品ID ☆「T_商品」と結合 ・数量 <テーブル:T_商品> ・商品ID ・商品コード ・商品名 ・版 ・仕入原価 ・備考 など です。 宜しくお願致します。

  • ACCESSで在庫管理を実施したい「改善希望1」

    在庫の入出庫管理をアドバイスいただき完成しました「ありがとうございます」。しかし、使って「利用者含め」いくうちに改善要望の声があがり、対応できればと思っています。 当件は、私にとって内容が濃いこともあり「分かる質問として纏められない懸念」、作成時のWEBアドレスを掲載させていただく事、お許しください。 https://okwave.jp/qa/q9659826.html [改善したいこと] その1, 改善項目:F_入出庫管理「フォーム」に入力途中「どの段階に於いても」で取りや      めた時、入力済データがクリアーになる様にしたい。 現状内容:フォーム終了させ再度フォームを立ち上げても入力データが残る。 その2, 改善項目:Q_在庫計算「更新クエリ」の実行時に発生する2つのアラートを表示さ      せない。又は、2つ目に表示されるアラート「1件のレコードが更新さ      れます」のみ表示させたい。(F_入出庫管理「フォーム」の最後の入力      フィールド「出庫数」の更新後処理「Q_在庫計算」に実行マクロを設      定) 現状内容:2つのアラート「1つ目,(更新クエリを実行すると、テーブルのデー      タが更新されます。2つ目,1件のレコードが更新されます。」表示に      よる処理工数の減を望む声の存在。 [感想と思い] 実際にアドバイスを頂きながら完成しましたが「ありがとうございます」、使っていくうちに考えていなかった場面に遭遇しました。自分だけが使うならいいですが、そうでない時の声に対しては、真摯に向き合わないといけないと感じましたした「対処スキルも無いのに勝手な言い分・・・」。何事も経験の積み重ねと言いますが、まさに痛感いたしております。しかし、私にとってAccess新分野でもあり、現時点での気になる点の解消方法へのアドバイスを希望します。 [実施したこと(考えたこと)] 実施1,失敗 F_入出庫管理「フォーム」にコマンドボタンを配して、全てのフィールド「入出庫ID、訂正(チェックボックス)、商品コード、商品名、在庫数、日付、入庫数、出庫数、計算済(チェックボックス)、メモ(個別情報入力)」に対して「値の代入(Null)」マクロを登録しました。 実施2,失敗 F_入出庫管理「フォーム」にコマンドボタンを配して「コマンドの実行(元に戻す)」マクロの登録。 実施3,考えただけ(実行スキルなし) 書き込まれたテーブルのレコードを削除、入出庫ID行を削除し新たな行を追加して、入出庫ID(オートナンバー)を書き込むマクロの作成。 以上ですが、宜しくお願いいたします。

  • 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などを書いたらいいのかわかりません。 よろしくお願いします。

  • FileMakerで在庫管理をしたい!

    FileMakerで在庫管理をしたい! 現在在庫管理をエクセルでやっていますが、 これからはファイルメーカーで管理したいと思いいろいろ試みています。 そこで、 商品テーブルと在庫テーブルと移動テーブルをつくりました。 ■商品テーブル 商品ID 商品名 ■在庫テーブル 在庫ID 商品ID 保管場所 棚卸在庫数 現在庫数(Calculation) 入庫日 ■移動テーブル 移動ID 在庫ID 移動数 移動先保管場所 移動日 商品テーブルと在庫テーブルは商品IDでリレーション 在庫テーブルと移動テーブルは在庫IDでリレーション 在庫の出し入れ移動が激しいので、移動入力を簡単にできたらと思います。 入庫入力は在庫テーブルに新規レコードで入力 出庫入力は移動先保管場所を"出庫"というふうにしてやろうかと考えています。 問題点 ・移動を入力する際に、保管場所と商品名で目的の在庫を絞り込みたいのですが、うまくポータルに表示されません。リレーションの組み方が間違ってる?? ・現存の在庫を他の保管場所に移動するとき、 移動先保管場所を入力すると自動的に在庫テーブルに新規レコードとして在庫が移動されるようにしたいがやりかたがわからない。 本をみても目的の情報にたどりつけないので、こちらの掲示板がたよりです。 助けてください!!

  • アクセスで在庫管理

    Access初心者ですが、在庫管理をアクセスでしたいと思います。Windowsでアクセス2003です。管理する商品の種類はそれほど沢山ないのですがサイズと色が沢山あります。商品マスターテーブルはこのようなテーブルです。サイズマスター、色マスターも 別途作りました。 商品ID 商品名 サイズ 色 ・・・・ 1   ABC   60A White 2 ABC 60A Black 3 ABC 70A WHite 4 ABC 70A Black ・ ・ このABCの商品以外にも他に7種類くらいの商品があり、それぞれに同じサイズ・色展開をしています。 ひとつのテーブルに全部まとめて7種類とも入れてしまえばよいのですが、他のサイズの在庫が増えた場合に追加しなくてはいけなく、一番下から追加して、テーブルを見たときにあまり綺麗ではありません。そこで商品マスターを7種類作って、新しいサイズ・色が加わった場合に各々の商品マスターに加えたいのです。この考え方は間違っていますか? さらに質問なのですが、レポートで出したい情報は「サイズ60Aは今いくつ在庫があるか?」です。7種類のテーブルからサイズ順に在庫がわかるようなレポートを出したいのですが、一つのテーブルからならやり方はわかるのですが、複数のテーブルからだとわかりません。 すみませんが、教えてください。自分でウェブ上のトレーニングなどを試みましたがギブアップです。宜しくお願い申し上げます。

  • Accessで累計計算する方法を教えてください。

    現在Access2000で、在庫管理をしています。 添付ファイルのように(1)~(3)のようなテーブルがあります。商品を発注するにあたり(3)現在庫の確認と(2)発注済み分の確認、(1)受注内容の確認などと効率の悪い状況です。 そこで各商品ごとに入出庫をみることができるレポートを出力できるようにしたいと思います。例えば、商品Bであれば(4)のようなレポートを出力したいと思います。 (1)と(2)のテーブルのフィールドをユニオンクエリーで結合させるところまでは何とかできたのですが、肝心な"在庫累計"をうまく計算できません。添付ファイルの(A)と(B) 色々調べると、Dsum関数があるようなのですで、このユニオンクエリーをもとに選択クエリーをつくりこの関数を使ってみたのですが(4)のレポートのようにはいきません。"期日"を条件にしたのですが同じ日だとすべて合計されてしまします。また、出力するレコードの順番は日付で昇順、同じ日付のレコードは入庫(プラスのレコード)を上位に、続いて出庫(マイナスのレコード)の順番にしたいです。 (4)のようなレポートが作成できれば方法は問わないです... なにかいい方法をアドバイスをいただけますでしょうか。 宜しくお願いいたします。

  • 在庫管理について質問よろしくお願いします。

    個人事業主としてアマゾンで商品を販売しているのですが在庫表を自分で作成して管理しております。 その際、仕入れの送料が仕入れ個数で割り切れない場合どうすればいいでしょうか? 例えば、同じ商品を10個仕入れた場合、自分の作成した在庫表では1つの欄で管理します。仮に送料が1001円だった場合1商品あたりの送料単価は100円と1円余になります。商品一つ一つを在庫表に記入して管理している場合はどれか1つの商品に端数を足した送料にしておけばいいですが、自分の管理表の場合はそれができません。 その場合、備考欄でも作って、「送料1円あまり」など記入して管理するしか方法がないでしょうか? 上記以外の管理の仕方で他に良い管理方法はありますか?

  • アクセスでの在庫管理(在庫期間が知りたい)

    アクセスを使って商品の在庫管理を行おうと試行錯誤しています。 1.入庫テーブル(商品名、入庫日、入庫数)に入力。 2.出庫テーブル(商品名、出庫日、出庫数)に入力。  これらから、商品と入庫日をロット単位とし、このように在庫を計算しています。  入庫の合計―出庫の合計=在庫 ここからネックになっているのが、在庫期間をどうあらわすかと言う点です。  通常、今日までの在庫期間は   在庫期間=今日―入庫日  によって表しています。  ここまでは出来ていますが、さらに一歩進めて  日にちを毎回指定し   指定日からの在庫期間=指定日―入庫日  のような感じで在庫期間を表示させたいのですが どのようにクエリを作ったらよいのでしょうか? このようなフローで良いのか、 参考HP等ありましたらアドバイス頂けませんか?

  • Accessで在庫管理を

    在庫管理システムを作ってみたいのですが、仕入れた物を在庫に足して、販売したものを在庫からひく。こんな感じです。 テーブルとしては、商品テーブルと仕入先テーブル以外に、在庫テーブルも作らないといけないですか? っていうかあまり仕組みがわかってないので、なにかアドバイスがあれば宜しくお願いします。

  • データベースで在庫管理したい。

    データーベースの質問です。 現在アクセス2000を使って、商品の簡単な在庫表を作りたいと思っています。 最終的な表示形式では、商品種類・商品名・在庫数・単価・合計金額・在庫場所 を表示できるように作成したいと考えているのです、アクセスから離れてかなり時間がたっているため、かなり序盤からつまずいております(笑) 現時点では「商品種類テーブル」「商品名テーブル」「在庫場所テーブル」を作っておりまして、今クエリの場所に「在庫*数量」を表示させたいのですが、どうやって作れば良いのかわかりません。 また、全体的な考え方もこれでいいものかどうか・・・。 どなたかアクセスで在庫管理なんかをしている方がいらっしゃいましたら、ノウハウを教えていただけると光栄です。 宜しくお願いします。

専門家に質問してみよう