![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ACCESSで在庫管理を始めました。
なんとか在庫管理だけはできるようになりましたが、
備考欄を設けたら、備考を入れたものは数が別でカウントされるように
なってしまいました。
今の在庫管理の状態は
<テーブル>
・商品ベース(商品ID、商品名が入っている)
・入出庫明細
<フォーム>
・入荷票(入出庫明細テーブルに入力される)
・出荷票(入出庫明細テーブルに入力される)
<クエリ>
・在庫表
・要発注表(在庫が1以下のものだけ表示する設定)
<レポート>
・在庫表(クエリの在庫表のレポート)
・要発注表(クエリの要発注表のレポート)
という感じです。
フォームに商品IDを入れると、自動で商品名が表示されるようにしており(DLOOKUP)、
その下に入庫や出庫数を入力する欄、最後に備考入力欄を設けています。
たとえば、返品によって在庫が1つ増えたときに「返品」などというふうに
備考を入れたいのですが、そうすると在庫表や要発注表で
備考情報なしの物は今までの入出庫明細の合計で1行に在庫数が
ずばっと出ますが、備考を入れた物はその下に同じ商品IDで
数行に出ます。
(結局最後はそれを手で計算する)
本当は、1行におさめて、備考欄を大きめにとって、そこに備考は
どんどん追加されるような感じにしたいのですが、可能でしょうか?
質問の仕方も下手ですみません。
補足要求してください。宜しくお願い致します。
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
ありがとうございます。
SQLなどは全然わからない初心者で、教えて頂いた内容を
自分のテーブルやフィールド名と合うように変えて、
保存したつもりなんですが、関数エラーメッセージが出てしまいました。
ちなみに、私の作ったものには「期首在庫」はなく、入荷か出荷で
個数を入力すると初めて商品がクエリで出る、というものです。
教えていただいた式と、自分が使っているテーブル、フィールド名が違うので
訂正が必要ですよね?
たとえばIDというのは商品IDと置きなおしていいのでしょうか?
また、
DBSelect("SELECT 備考 FROM 入出庫明細 WHERE 商品ベース_商品ID=" & [商品ID],",") AS 備考欄
FROM 商品ベース;
のところが全然わかりません。
Public Function DBSum(ByVal strField As String, _・・・・
というのは標準モジュールに登録しました。(でいいんでしょうか?)
もしもお時間ありましたら教えてください。すみません。
No.1
- 回答日時:
集計クエリからは備考欄を外さないとだめです
もう一点
>フォームに商品IDを入れると、自動で商品名が表示されるようにしており(DLOOKUP)、
DLookupはこのような時に使うものではないですよ
クエリを使用しましょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- 運輸業・郵便業 ●(令和なのですが…) 今時、 (倉庫会社の在庫の)倉庫管理システムが、 “紙”(商品依頼書•注文書 2 2022/08/07 18:09
- Excel(エクセル) Excelで在庫表(クエリ、ピボット) 2 2022/04/11 17:11
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- メルカリ メルカリShopsを作るとメルカリで販売は楽になりますか メルカリとまったく変わりませんか? 2 2022/10/11 19:22
- その他(Microsoft Office) Excelの関数(FILTER関数)について教えてください 2 2023/07/31 16:11
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- その他(データベース) accessについて 2 2022/05/31 16:58
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- Excel(エクセル) VBAで同フォルダ内の別ブックを開かず参照して条件の一致する行の指定セルを抽出するには? 1 2022/07/21 19:29
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
楽天証券→SBI証券へ投資信託は...
-
ACCESSで在庫管理がした...
-
アクセスのクエリで引き算をし...
-
ACCESSでこんな在庫管理を作成...
-
Accessで“0”ゼロ表示をする
-
アクセスが・・・
-
Accessで在庫管理をしたいです。
-
Accessのレポートで日々の在庫...
-
製品台帳をパソコンで管理したい。
-
日付型のフィールドに空白を入...
-
差込印刷での全角表示について...
-
SQL文で パラメータが少なすぎ...
-
アクセスのエラー「クエリには...
-
2つのテーブルに共通するレコ...
-
エクセルにおける「フィールド...
-
クエリで割り算する方法を教え...
-
Accessで、1つの項目に複数の...
-
エクセルデータをワードで差し...
-
アクセスで追加した項目に全て...
-
yes/no型のチェックができない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで“0”ゼロ表示をする
-
アクセスのクエリで引き算をし...
-
Accessで在庫管理する時の在庫...
-
在庫管理と賞味期限管理
-
Access エラー 指定されたフィ...
-
ACCESSで在庫の入出庫履歴を作...
-
Accessで、在庫表を作りたいの...
-
ACCESSで在庫管理 備考欄の組...
-
Accessのレポートで日々の在庫...
-
ACCESSで在庫管理を作成するよ...
-
出庫と消費について
-
ACCESSで困っています。
-
アクセスが・・・
-
Accessで在庫管理をしたいです。
-
ACCESSで在庫管理がした...
-
コインパーキングについて
-
ACCESS フォームのレコードを...
-
エクセルVBAとアクセスでの在庫...
-
アクセスでの在庫管理(在庫期...
-
新宿ミライナタワー駐車場
おすすめ情報