概要
| この記事の結論 Accessの更新クエリは、各レコードの数量と単価を使って金額を計算し、一括保存できます。全行を同じ値にする用途だけではありません。ただし表示のたびに計算すれば足りる値は、選択クエリの計算列にする方法も検討します。 |
この記事でわかること
- 保存が必要か計算列で足りるか決める
- 更新前後の値を選択クエリで比較する
- 計算式で金額を更新する
- Nullと丸めを業務ルールに合わせる
この記事の主な内容
- 更新クエリは行ごとに異なる計算もできる
- 保存が必要か計算列で足りるか決める
- 更新前後の値を選択クエリで比較する
- 計算式で金額を更新する
- Nullと丸めを業務ルールに合わせる
- 再実行の影響と確定処理を管理する
- よくある質問
想定読了時間:約8分
1 更新クエリは行ごとに異なる計算もできる
Accessの更新クエリは、各レコードの数量と単価を使って金額を計算し、一括保存できます。
全行を同じ値にする用途だけではありません。
ただし表示のたびに計算すれば足りる値は、選択クエリの計算列にする方法も検討します。
保存する目的が確定時点の金額の保持なら、更新クエリが候補です。
後で数量を変えても保存済みの金額は自動的に追随しないため、再計算のタイミングも設計します。

2 保存が必要か計算列で足りるか決める
見積中の随時計算なら、金額: [数量]*[単価] という選択クエリの計算列を使えます。
確定済み請求額を残すなら、確定状態や確定日時と合わせて保存する設計が向いています。
現在の単価マスターを毎回参照すると、価格改定で過去金額が変わることがあります。
取引時の単価を明細へ保存するか、履歴を持つマスターを参照するかを決めましょう。
設定例と確認点
| 用途 | 方法 | 注意 |
|---|---|---|
| 常に最新を表示 | 選択クエリで計算 | 元値に追随 |
| 確定金額を保持 | 計算結果を保存 | 再計算の管理が必要 |

3 更新前後の値を選択クエリで比較する
T_明細に明細ID、数量、単価、金額、確定済みを用意します。
数量2・単価120なら新金額は240、数量3・単価80なら240になる例で確認します。
別の行でも同じ式がそれぞれの値を使って計算されます。
サンプルコードと式
SELECT [明細ID], [数量], [単価], [金額],
[数量]*[単価] AS 新金額
FROM [T_明細]
WHERE [確定済み]=False;


4 計算式で金額を更新する
更新対象の金額の「レコードの更新」に [数量]*[単価] を指定します。
下記では確定済みでない行だけを対象にし、数量と単価がNullの行を除外します。
実行前に対象IDと件数を照合してください。
操作手順
1. 業務ファイルをバックアップします。
2. 選択クエリで旧金額と新金額を比較します。
3. 更新クエリへ切り替えて式と条件を確認します。
4. 実行確認の件数が予定と一致した場合だけ実行します。
5. 実行後の金額と対象外の行を確認します。
サンプルコードと式
UPDATE [T_明細]
SET [金額]=[数量]*[単価]
WHERE [確定済み]=False
AND [数量] Is Not Null
AND [単価] Is Not Null;

5 Nullと丸めを業務ルールに合わせる
Nullを含む掛け算はNullになります。Nz([数量],0)で0に置き換えることはできますが、未入力の数量を売上0と扱ってよいかは別の判断です。ここでは未入力行を除外し、入力漏れとして確認します。
VBAのRoundは、ちょうど中間の値で偶数側へ丸める動作です。
一般的な四捨五入と同じだと思い込まず、2.5、3.5、負数などで業務の端数規則と照合してください。

既存Accessへの影響を判断できない場合
本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。
6 再実行の影響と確定処理を管理する
金額を数量×単価で置き換える式は、元の数量・単価が同じなら同じ結果になります。
一方、単価を単価×1.1で更新する式は、実行するたびに値が増えます。
再実行して値を収束させる運用は誤りです。
計算後に確定フラグを立てる場合は、途中失敗で状態だけ先に変わらないようにします。
複数処理をまとめて扱う必要がある場合は、トランザクションやエラー処理も含めて設計してください。

7 よくある質問
できます。各行のフィールドを使った計算式を指定します。
式によります。
加算・乗算で現在値を変える処理は二重更新になります。
確定値の保持が必要かで決めます。
表示目的なら計算列で足りる場合があります。
まとめと相談先
計算後に確定フラグを立てる場合は、途中失敗で状態だけ先に変わらないようにします。
複数処理をまとめて扱う必要がある場合は、トランザクションやエラー処理も含めて設計してください。
本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。
参考情報
Microsoft:UPDATE文
https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/update-statement-microsoft-access-sql
Microsoft:Nz
https://learn.microsoft.com/en-us/office/vba/api/access.application.nz
Microsoft:Round
https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/round-function