- ベストアンサー
Access 小計について
いつもお世話になっております。 小計方法について教えてください。 請求フォームなるものを作成し サブフォームにて商品を入力する イメージで捉えていただきたく。 フォームの詳細にて 商品IDと単価、数量を表示させ フォームフッターにて小計計算をしたいのです。 単価は商品IDに紐づいているので、 コントロールソース欄で 商品ID.column(2)にて 表示させています。(商品マスタは存在する) そのためか、フォームフッターに 小計のテキストボックスを配置し コントロールソース欄にて =Sum([単価]*[数量])と入力しても 「#エラー」と表示されます。 =Sum([商品ID.column(2)]*[数量]) でもだめでした。 ご教授ください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
質問自体にもダイレクトに答えておきます。 =Sum(DBLookup("単価","商品マスター","ID=" & [商品マスター_ID])*[数量]) [商品マスター_ID] を手掛かりに[単価]を取得して合計すればエラーは回避されます。 Access の DLookup関数も使えますが、遅いので ADODB で取得したがいいです。 Public Function DBLookup(ByVal strField As String, _ ByVal strTable As String, _ Optional ByVal strWhere As String = "", _ Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim strQuerySQL As String Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset strQuerySQL = "SELECT " & 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 DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = Nz(DataValue, ReturnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function ※難点=単価入力ミス等があれば、全てが影響を受け、事実上、収集不能の事態に陥ります。 ※かかる回答を意識的にしなかった理由です。
その他の回答 (3)
- kurodai2
- ベストアンサー率38% (77/202)
フッターに計の欄を作りたいのですよね? うろ覚えですが・・sum関数は コントロールソースのフィールドに対してではないと使えなかったと思うのですが。 商品IDコンボの2カラム目*数量は無理なのでは? サブフォームのデータソースをクエリーにして 金額欄を設けて sumを使って見られては どうでしょう。
お礼
サブフォームに金額欄を作らずに、 作成することを目指していたのですが、 いろいろ教えてもらい、 金額欄を作成することにしました。 ありがとうございました。
質問文を詳細に読むと、<請求明細.単価>を用意していないということですか? であれば、用意するしかないですね。
<請求書> ID____請求日_________宛先 1_____2007/07/22___鈴木様 <請求明細> 請求書_ID 行番号___商品名____単価_____数量 1_____________1___________A____________\100____2 1_____________2___________B____________\200____2 1_____________3___________C____________\300____3 このような請求書に関わる2つのテーブルを仮定します。 さて、これに対応するフォームは次のようです。 =========================================================== ID_________[__________1] 請求日__[2007/07/22] 宛先_____[鈴木様] ----------------------------------------------------------- [____1][A____________][___\100][___1][___\100]<------[単価]*[数量] [____2][B____________][___\200][___2][___\400] [____3][C____________][___\300][___3][___\900] ----------------------------------------------------------- __________________________________________[_\1.400]<------Sum([単価]*[数量]) =========================================================== この場合、サブフォームの各行に請求金額を表示しています。 この場合、サブフォームのフッターに請求金額合計欄を表示しています。 質問は、この標準的な表示関係を崩したいということでしょうか? であれば、非常にややこしい問題が幾つか発生します。
お礼
お礼が遅くなり大変失礼しました。 >※難点=単価入力ミス等があれば、全てが影響を受け、事実上、収集不能の事態に陥ります。 恐れ入ります。そこまでの認識はなかったので、 参考にさせていただきます。 例に習って コントロールソースに =Sum(DLookUp("単価","商品マスター","[商品ID]=" & [商品ID])*[数量]) ※DLookUp使用 と打ち込んでみましたが、#エラーが 返ってきます。。。([商品ID]は画面から取得される値ですよね) 何か不足しているのでしょうか? 困っています。