• ベストアンサー

Accessの自動計算のマクロについて

Access初心者のものです。 Accessで商品管理のデータベースを作成しています。 主なテーブルの内容は、 商品番号、商品名、仕入数、仕入単価、販売数、販売単価、などです。 そしてクエリで、 仕入数×仕入単価=仕入金額、販売数×販売単価=販売金額を作成し、 入力フォームのフィールドで仕入数、仕入単価を入れれば仕入金額が計算されるようにしています。 そこでですが、仕入金額の表示が仕入数、仕入単価を入れて仕入金額のフィールドにフォーカス移動したときに計算結果が表示されずレコードの移動して元に戻ると計算結果が表示されます。 結果的には計算結果は表示されるのですが、レコード移動ではなくフォーカス移動後に計算結果を表示させるには、どのようなマクロの設定をすればよろしいのでしょうか? マクロについてはあまり詳しくはない為、その点ご考慮くださいますよう宜しくお願いいたします。

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

  • ベストアンサー
  • matui2000
  • ベストアンサー率19% (30/155)
回答No.1

フォーカスが移動されてくるオブジェクトのイベントのフォーカス取得時にマクロを作ります。 仕入数、仕入単価が入力されているテキストの計算をマクロに書いてそれで終わりです。 マクロの値の代入を選択 アイテムに仕入れ金額の場所をセット 式に仕入数の場所かける仕入単価をセット これでいけるはずです

PAXSON
質問者

お礼

matui2000さん。ご回答ありがとうございます。 お礼の回答遅くなりまして失礼しました。 回答があった通りやってみましたらできました。 大変助かりました。答えてネットがとまりっぱなしだったので大変困ってました。 また機会がありましたらよろしくお願い致します。

その他の回答 (3)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

通常はデータベースには演算された結果は保存しませんが。 仕入金額や販売金額などは入力フォーム上やレポート上で計算すれば良いので・・。 >仕入金額のフィールドにフォーカス移動したときに計算結果が表示されず・・ クエリを使ってテーブルに保存している場合はそうなります。 入力フォームの仕入金額のプロパティでコントロールソースに =[仕入数]*[仕入単価] とすればすぐ計算してくれます。しかしコントロールソースが演算式なのでテーブルには保存されません。 フォーム上で計算した値をテーブルに保存する方法は色々ありますが簡単なのはフォームの仕入単価のプロパティのイベントにある更新後処理にコードビルダで Private Sub 仕入単価_AfterUpdate()  Me!仕入金額 = [仕入数]*[仕入単価] End Sub のようにすれば仕入単価を入力し他のコントロールに移動する際に仕入金額に計算した値を代入してくれます。(必ず仕入単価を入力しなくてはいけませんが) テーブルにも保存されます。 マクロ使う必要はありませんしクエリでテーブルに保存時に演算し保存する必要もなくこれが簡単。

PAXSON
質問者

お礼

O_cyanさん。ご回答ありがとうございます。 お礼の回答遅くなりまして失礼しました。 またの機会がありましたらよろしくお願いいたします。

noname#22222
noname#22222
回答No.3

ウーン! クエリを使わなければ宜しいかと・・・ [仕入金額].コントロールソース=[仕入数]*[仕入単価] [販売金額].コントロールソース=[販売数]*[販売単価] ・レコード移動後でないと[仕入金額]、[販売金額]が更新されないのは当然のことです。 ・レコード移動時にテーブルが更新されるからです。 ・[Shift]+[Enter]で強制的にレコードを更新して[F9]で再呼び込みすれば更新されるでしょう。 ・この手続きをコードで書けば宜しい訳ですが、そんな手間隙を掛けずに<コントロールソース>を設定した方が簡単です。

PAXSON
質問者

お礼

s_huskyさん。ご回答ありがとうございます。 お礼の回答遅くなりまして失礼しました。 またの機会がありましたらよろしくお願いいたします。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

通常であればフォーカスが移動した直後に計算されるはず? Access2003では少し問題があるような事を見た覚えがありますが 何処でかは思い出せません。 フォームの基となっているクエリでは計算されますか? 対症療法的ですが フォームの仕入金額と販売金額のコントロールソースをそれぞれ = 仕入数 * 仕入単価 = 販売数 * 販売単価 に変更してみる。 あるいは、VBAになりますがコントロールソースは変更せずに 仕入数、仕入単価、販売数、販売単価の更新後処理に Me.Recalc としてみる。 例 Private 仕入数_AfterUpdate() Me.Recalc End Sub とかでしょうかね。

PAXSON
質問者

お礼

nicotinismさん。ご回答ありがとうございます。 お礼の回答遅くなりまして失礼しました。 またの機会がありましたらよろしくお願いいたします。

関連するQ&A

  • ファイルメーカーの計算について

    テーブルAとBの間で計算したいのですがうまくいきません。 A(仕入管理)にはフィールド「商品名・単価・個数・合計金額」が各5組あります。このフィールドの商品名・単価はテーブルB(商品マスタ)からルックアップしたものです。  この商品名・単価・個数・合計金額をルックアップ元のテーブルBに商品別に表示(計算)したいのですが、計算式がいまいちうまく行きません。

  • ACCESSで計算をさせたい。

    お世話になっています。 早速ですが、ACCESS2003でテーブルに入力した数字がエクセルのように結果を出し残すことはできるのでしょうか? テーブルでは計算ができないのでクエリでやるとしたらどのようにしたらいいでしょうか? 数量(A1)×単価(B1)=金額(C1)というC1の計算結果もレコードに保存できるものでしょうか? フォームではもちろん入力した数字を計算させることはできるのですが、その結果をレコードに残して行きたいと思っています。 どうかよろしくお願い申し上げます。

  • Access 計算フィールドに対するクエリの抽出について

    初歩的な質問かもしれませんが、お願いします。 クエリで、計算を出した列に対して抽出をかけることはできないのでしょうか。 [商品CD][商品名][単価][個数] と、4つの列フィールドを選択クエリに表示し、 5列目に以下のフィールドを挿入しました。 式1: [単価]*[個数] この“式1”に対して1,000以上のレコードを抽出かけたいのです。 >=1,000 と抽出条件に入れてもダメです。 どうしてでしょうか。 また、どうすればいいのでしょうか。

  • Accessのマクロで

    Accessのマクロでコントロールの移動のコマンドを実行しようとするのですが、どうもうまくいきません。 時間計算でA~Bの時間をdatediffで計算させ、その答えが負(マイナス)の場合はもう一度Bの時間を聞き直すというものを作る過程で、再入力を促すメッセージのあとBの値にNullを代入して、コントロールの移動でBにフォーカスを移動したいのですが、どうしてもBにフォーカスが移らず、Bの次のタブ順のコントロールにフォーカスが移動してしまいます。どなたかいいアドバイスください。

  • アクセスのフォーム上で計算値の合計がエラーになる

    アクセスで製品オーダを入力したときに現状の部品在庫に対して不足する部品数を計算 し、その部品数に単価をかけた各不足部品の合計金額を計算できるよう、添付画像の フォームを作成しました。(画像はデザインビューです。) フォーム画像の(1)はフォーム上で入力する数です。(2)(6)は、コントロールソース値 にクエリのフィールドを指定、(3)のコントロールソース値も同じクエリで計算された フィールドを指定して表示されます。(4)(5)(7)(8)(9)(10)は、(1)を入力したときに 計算されるよう、コントロールソース値にそれぞれ次の式を入れています。 (4):=[員数]*[テキスト50] (5):=IIf([テキスト47]-[見なし在庫数]<0,0,[テキスト47]-[見なし在庫数]) (7):=IIf([テキスト49]/[最少発注単位]=0,0,Round(([テキスト49]/[最少発注単     位])+0.49999,0)) (8):=[最少発注単位]*[テキスト66] (9):=[部品単価]*[テキスト64] (10):=Sum([部品単価]*[テキスト64]) ここで、(1)のオーダに数を入力したら、(4)(5)(7)(8)(9)はそれぞれ計算結果が出てく るのですが、肝心の(10)については、「#エラー」となってしまいます。 ここ何日かこの問題でストップしていてどうしたら良いかわからず、非常に困ってしま いました。(ここでは省略しますが、色々と試してみても全くダメです。(泣)) どなたかアクセスにお詳しい方、何卒お助けいただきますよう、宜しくお願い致します。

  • アクセス2003 集計『最後』

    いつもお世話になっています。 <仕入記録テーブル>で商品Aを下記のように複数回入力してあります。(数字がズレてたらすいません。) | 仕入ID | 仕入年月日 | 商品名 | 数量 | 単価 |    76    2006/4/26       A      5     108    78    2006/4/28       A      5     108   253    2006/7/20       A     10     108   815    2006/11/10       A     10     120   843    2007/1/11       A      5     108   852    2007/1/12       A      2     120  1001    2007/2/19       A     10     120 クエリで<仕入記録テーブル>から各商品の最も最近の仕入単価を取り出したいと思い、デザインビューで<仕入記録テーブル>から<単価フィールド>を選択し集計方法を『最後』に設定しました。 すると表示された金額がなぜか108円になってしまいました。 やり方がおかしいのかと思いDLast関数というのも試してみたのですが、構文がイマイチ理解できずうまくいきませんでした。 仕入記録から仕入年月日の最も新しい仕入単価を出すにはどうしたらよいのでしょうか? よろしくお願いします。 

  • 金額を自動計算させたい

    単価テキストボックス、数量テキストボックス、金額テキストボックスを表示して、単価と数量にデータを入力したら金額に自動で計算結果を表示させたいのですが、良い方法はありますか? よろしくお願いします。

  • 棚卸と売上原価計算について

    棚卸と売上原価計算の方法で困っています。 只今、個人事業主で中古品販売を行っております。扱っている商品はCDがメインで、本とDVDも扱っています。 仕入れている商品は、ジャンル、タイトル、アーティストなど問わず1品づつバラバラ(仕入単価もバラバラ)で、卸業者を利用せず実店舗から直接仕入れをしています。(このとき、レシートには「~円の商品が○個」といった具合にしか表示されていません。) また、商品有高帳で在庫の管理は行っています。 このような状態なのですが、棚卸をどうやったらいいのか困っています。 品物は全部バラバラで仕入単価もバラバラなので、棚卸で個数は分かるのですが、単価は非常に照合しにくいです。 そのため棚卸では「中古CD~個、中古DVD~個、中古本~個」といった感じに個数を調べ、その上で、商品有高帳の個数と照合し、単価は(移動or総)平均法を用いて算出しようと思います。 売上原価も平均法で求めた期末の単価を用いて期末商品高を調べ、期首商品+今期仕入高-期末商品で算出しようと思っています。 このような方法で良いのでしょうか? やはり、残っている商品を全て一つづつ単価を調べ、数を調べ、期末商品を求めないといけないのでしょうか? 足りない情報などありましたら、コメント頂けましたら書き足したいと思います 何か良い方法などございましたらアドバイス下さいますよう、よろしくお願いいたします。

  • Access クエリ 抽出・演算

    Access クエリについてご質問させていただきます。 テーブルのデータを特定の条件に一致するレコードだけ抽出し、演算を実施したいです。 (1):CSVデータをテーブルに取り込みます。 テーブルは左から『取引No』『部門コード』『部門名』『発注入力日』『担当者名』『発注日』『伝票No』『伝票行No』『商品コード』『商品名』『入数』『発注数(入力数)』『発注数量※1』『発注金額※2』『出荷日』『出荷数量※3』『出荷金額※4』となっております。 ※1:発注数量は入数×発注数が計算済みです。 ※2:発注金額は発注数量×単価で小数点以下切り捨てで計算済みです。 ※3:出荷数量は入数×出荷数が計算済みです。 ※4:出荷金額は出荷数量×単価で小数点以下切り捨てで計算済みです。 (2):クエリを使用して、商品名が『単3乾電池』の出荷数量を10で割り、10で割り切れるレコードを求めたいです。 (3):(2)の演算結果(10で割った後の整数)を合算して合計値をクエリの演算結果として表示したいです。 ※(2)の抽出条件でのクエリをすでに作成済みで、合計したクエリを作成したいです。 どのようにすればよろしいでしょうか?

  • MS ACCESSで条件別に計算する方法

    tbl_商品Mには、商品名・商品ID・仕入価格・掛率というパラメータがあります。レコード数は26000点程で、掛率は10程あります。 掛率のパラメータによって別個の計算式を適用し、商品名・商品ID・税込販売価格・税別販売価格というデータを出力をしようとしています。 現在は各掛率毎に、クエリを作成して 商品名・商品ID・税込販売価格・税別販売価格を出力する事は出来ました。 これらの掛率クエリを1つのクエリにまとめたいのですが、上手く出来ません。 IIF関数を使ってやろうとしていますが、 「指定されたフィールド'[掛率]'がSQLステートメントのFROM句にある複数のテーブルを参照しました」 と表示されます。googleで検索してみたものの、どういったエラーなのかはわかりましたが、直す方法が分かりません。 何か良い方法はございませんでしょうか。 また、掛率は随時、変更・増加・減少を伴いますので、管理をもっと簡単に出来る方法がありましたら教えて欲しいです。

専門家に質問してみよう