Access97で受注管理のデータベースを設計中です。
フォームのテキストボックス[税込金額]のコントロールソースに
=Int([税抜金額]*[消費税率]*0.01+[税抜金額])
という式を入れました。
はたと気がついたら、基になるテーブルの[税込金額]には当然
(コントロールソースじゃなくなってしまったから)そこで
計算された値は更新されません。
テーブルにその値を更新したいのですが、そのためにはどのように
すればよろしいでしょうか?
基になるテーブルに[税抜金額][消費税率][税込金額]という項目が
あります。で、フォームを使用して入力時に税抜き金額を入力し、
消費税率を入力すると税込金額が小数点切り捨てで自動で入力される
という風に組めればフォームの中で計算できなくてもフォームで値が
表示されればかまいません。
要領を得ない質問でスミマセン。お手数ですが教えてください。
No.1
- 回答日時:
税込金額はデータベースの項目にしなければいけませんか?
税込み金額みたいに計算で求められる物はデータベースの項目に持たず
クエリーで追加するようにすれば例えば税率などが変わっても
クエリーを使用する時に再計算する為に基準値を変えればOKです
クエリーの使い方を勉強しましょう。
頑張って下さい
参考URL:http://www.people.or.jp/~Niki/, http://www.people.or.jp/~Niki/,
この回答への補足
本当はポイントをK_ebaさんにもにお入れしたいのですが、お二人を
選ばなければとのことですので、今回はyoishoさん、maruru01さんに
入れさせていただきたいと思います。
ご紹介いただいたサイトや本でもっとお勉強します。
本当にありがとうございました。
早速のお返事ありがとうございました。
実は基になるテーブルを使用して他のフォームでサブフォームを
作ったり、クエリーで計算したりしているのでテーブルに入力される
必要があるんです。また、Excelに書き出して受注表なんかも
作っていますので‥。
スミマセン。
はじめはクエリーで計算させて‥って考えたんですけど、税込金額を
クエリーで計算して作ったものを使用すると月締めの計算をする
クエリーを作ると「複雑すぎるから計算できないよ!」と文句を言ってきたり、
フォームにもコントロールが増えすぎてしまい、仕方なくフォーム内に
計算式を入れたらテーブルに当然反映しない‥はぁぁぁ。
できれば更新後処理とかで何とかならないかなぁと悩んでいます。
No.2
- 回答日時:
こんにちは。
maruru01です。テキストボックスのコントロールソースは元のまま([税込金額])にして、
税抜き金額と消費税率のテキストボックスのChangeイベントなどで、
Me!税込金額.SetFocus
Me!税込金額.Text = Int(Me!税抜金額.Text * Me!消費税率.Text * 0.01 + Me!税抜金額.Text)
とすればいいと思います。
もちろん、[表示]みたいなコマンドボタンを作って、そのクリックイベントに記述してもいいですし。
あ、そうそうご存知かも知れませんが、テキストボックスのTextプロパティはフォーカスをあてないと、参照および設定が出来ませんので、実際はそれぞれのChangeイベントで変数に代入しておくのがいいと思います。
では。
お返事ありがとうございました。
ヘルプをさんざん開いたんですけど「変数に代入する」やり方がわかりません。
コントロールの移動のマクロをヘルプを見ながら組んでみたのですが、
実行時エラーが出てしまいました。
きっと見当違いの事をしているんだと思います。
コードの書き方はまるでわかっていません。式ビルダがなんとなく使える程度
ですので大変申し訳ないのですが、噛んで含めるようにご教授頂ければ
ありがたいです。お手数おかけいたします。
No.3
- 回答日時:
私もk_ebaさんのご意見に賛成なんですけど、どうしてもということであれば・・・。
[税込金額]テキストボックスのコントロールソースは[税込金額]としておいて、
単に更新前イベントで、
Me![税込金額] = Int(Me![税抜金額] * Me![消費税率] * 0.01 + Me![税抜金額])
としてやるのが、簡単かと思います。
お返事ありがとうございました。
更新前イベントに入れてみましたが、なぜか上手くいきませんでした。
forms![受注明細]![税込金額]‥でもダメで、式ビルダで税込金額=‥と
入れてもやっぱり上手くできませんでした。
また勘違いしてきっと見当違いな作業やってるんじゃないかと思います。
スミマセン。
もちょっとがんばってみます。
あるいはテーブル設計からも一度やり直すことも検討してみます。
本当にありがとうございました。
No.4
- 回答日時:
再びmaruru01です。
ちょっとくどい書き方をしますので、適度に読み飛ばしてください。
まず、テキストボックスの上で右クリックするとプロパティシートが表示されますので、その中のイベントタブをクリックします。
イベントの中の"変更時"の白い四角の部分をクリックすると、右側にボタンが2つ現れます。その右側のボタン(…)をクリックすると、ビルダの選択ダイアログが表示されます。(式ビルダが使えるということなので、ここまではご存知かと思います。)
ここで、コードビルダをクリックすると、画面が切り替わり、VBEのモジュールシートが現れ、
Private Sub 税抜金額_Change()
End Sub
と書かれていると思います。
これは、テキストボックス[税抜金額]の値が変更されると実行されます。中に実行したい動作を記述していきます。
ここに次のように書きます。
Private Sub 税抜金額_Change()
Dim NoTaxAmount As Long
Dim TaxRate As Long
NoTaxAmount = IIf(Me!税抜金額.Text = "", 0, CLng(Me!税抜金額.Text))
Me!消費税率.SetFocus
TaxRate = IIf(Me!消費税率.Text = "", 0, CLng(Me!消費税率.Text))
Me!税込金額.SetFocus
Me!税込金額.Text = Int(NoTaxAmount * TaxRate * 0.01 + NoTaxAmount)
End Sub
テキストボックス[消費税率]も同様に、コードビルダを選択して、
Private Sub 消費税率_Change()
Dim NoTaxAmount As Long
Dim TaxRate As Long
Me!税抜金額.SetFocus
NoTaxAmount = IIf(Me!税抜金額.Text = "", 0, CLng(Me!税抜金額.Text))
Me!消費税率.SetFocus
TaxRate = IIf(Me!消費税率.Text = "", 0, CLng(Me!消費税率.Text))
Me!税込金額.SetFocus
Me!税込金額.Text = Int(NoTaxAmount * TaxRate * 0.01 + NoTaxAmount)
End Sub
NoTaxAmountとTaxRateが変数で、好きな名前をつけられます。Dimの分で使用出来るようにします。
また、この場合は、Private Sub ~End Sub(このかたまりをプロシージャと言います。)のなかでのみ使用出来るので、2つのプロシージャの変数は名前が同じでもまったく別と思って下さい。
その他のいろいろなキーワード(Long,SetFocus,IIfなど)は、ヘルプを参照して下さい。
今回の例では、税抜金額、消費税率のどちらかに数値を入力すると、両方に数値が入っている場合は計算結果が表示され、どちらかに何も入力されていなければ、0になります。
Accessでは、クエリやマクロだけではやることに限界がありますので、VBAを習うことをお奨めします。
教材は、本屋にいっぱいありますので、とりあえず、「はじめての~」とか、「~初級編」とか「よくわかる~」などと題したものを使うとよいでしょう。
がんばって下さい。
では。
度々お世話になっております。
ありがとうございました!
ご説明いただいたとおり、コードを記入しチェックしてみました。
きちんとテーブルにデータが入ってます!!!
はじめエラーが出ましたが、テーブルの税抜金額の通貨型を長整数型に
修正したら正しく計算できました。(As CurrencyにしてCCurに修正
したんですけどデバッグウィンドウから抜けられなくなってしまいました)
でもなぜか、フォームを閉じてもう一度開いて入力したら税抜金額に1桁しか
数字が入らなくて、(1文字入れると税込金額にカーソルが移動します。)
どこか違うテキストボックスを使って数字を入力してから税抜金額の欄に
コピーペーストしないと入力ができないようになってしまいました。
それって何がいけないんでしょう。もっとちゃんと‥せめてご説明頂いたこと
くらい理解できるよう、ご紹介いただいたように、早速今日は早めに上がって
VBAの本探しに行きます。確かにクエリ、マクロでできることにも限界あるかも
しれませんね。もっとお勉強します!
他に入力して税抜金額にコピーペーストするならフォームフッターに式を
入れてその値をコピーしたものを税込金額にペーストしてもらった方がいいかも?
もちょっと勉強してからまたご質問させてください
本当にありがとうございました。
No.5ベストアンサー
- 回答日時:
イベントの意味について多少混乱されているようなので、補足説明をさせていただきます。
まず、更新前(BeforeUpdate)イベントですが、これはテキストボックスに対してと、フォームに対してで、意味が多少異なります。
フォームに対しての場合は、そのフォーム上でレコードが保存される直前に発生するイベントです。それではどんなときにレコードが保存されるのか?一つはカーソルが別のレコードに移動したとき、もう一つはレコードの編集中にフォームを閉じたときです。
(テキストボックスに対しては、HELPか参考書で勉強してみてください。)
ということで、私がお示しした方法ですが、イベントプロシージャは、テキストボックスではなく、フォームのイベントとして記述してください。この方法では、レコードが保存される直前に[税込金額]の値を書き換えて、その計算結果をテーブルに保存することになります。ですから、同じレコード内でカーソルを各テキストボックスの[税抜金額]、[消費税率]、[税込金額]のいずれかに移動しただけでは値は更新されず、別のレコード(新規レコードでもよい)に移動した時点で[税込金額]の値が計算され、テーブルの値も更新されることになります。
次に、変更時(Change)イベントですが、これは、そのテキストボックスに文字が入力された(削られたときも)時に発生します。
ということで、私の方法では別のレコードに移動しなければ[税込金額]の値が更新されないのに対して、maruru01さんが回答されている方法では、数字を入力した瞬間に更新されますので、即時性の点で、より使いやすいプログラムだと思います。
ただ、変更中のテキストボックスの値は、文字列としか認識できないため(数値として得ることができない)Clng()関数を使って数値データに変換するような工夫が必要になります。
[税抜金額]に一桁しか入力できないのは、一文字入力した時点で、Me!消費税率.SetFocus で強制的にカーソルの移動が行われているためです。その他多少の修正も必要のようですので、この方法に挑戦されるのでしたら、HELPのTextプロパティをよく読んでみてください。
これからVBAにチャレンジされるということでしたら、参考書の他に、k_ebaさんが紹介されているようなHPもとても勉強になります。
VBAは始めるとそれなりに奥が深いものもありますが、その分、自由度が高く、自分のアイディアが活用できるようになるとけっこうはまってしまったりします。ぜひがんばってください。(わからないことがあったら、また質問してください。中上級になって、私なんかの手におえないレベルになったら、かなり専門的なサイトがいくつもありますので、そちらもご紹介します。)
あまりの不勉強に皆様のお力ばかり頼ってしまい申し訳ありません。
ありがとうございました!
フォームの更新前処理に入力したら正しく計算されました!
(税込金額のテキストボックスの更新前処理に入れてました)
ご説明いただいたことも理解できなくてスミマセン。
社の受注管理は入力した時点では税込金額が表示できなくても
他のフォームを開いたりレポートを出力するときに情報が更新されていれば
問題ないので、ご紹介頂いた方法を利用させていただきます。
本当にありがとうございました。
No.6
- 回答日時:
三度maruru01です。
yoishoさん、フォローありがとうございます。
取り急ぎのコードで、しかもこの欄に直接書いていったため、いろいろ不備があるようです。
変数をプロシージャレベルではなく、モジュールレベルで宣言するなどの対処が必要でしょう。
1桁ごとの計算はいろいろ工夫が必要ですが、全桁入力後いいなら(例えば税抜金額に"1200"と入力した後)、フォーカス喪失時イベント(Exit)あたりに記述するのがいいかも知れません。
choco_monakaさん、今はわからないことが多いと思いますが、yoishoさんの言うように、本や適当なサイトなどで勉強して、わからないことはここで質問しましょう。私のような素人に毛が生えた程度ではない詳しい人が教えてくれるでしょう。
では。
お世話になっております。
モジュールレベルの宣言‥?
お勉強します!
がんばってお勉強して今度こちらで質問するときは質問も
要領よくできるよう、またご指導いただいたことをちゃんと
意味を理解して入力できるようにしたいと思います。
皆様本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 一戸建て プロパンガスの残存価格について 3 2022/05/31 14:08
- Excel(エクセル) 隣り合っていないセルを まとめて税込表示したい 8 2022/09/25 14:32
- 消費税 消費税還付を受けるための輸出免税の会計処理(仕訳)を教えてください 4 2022/07/14 12:48
- 財務・会計・経理 請求金額について 5 2023/04/10 09:17
- 消費税 インボイス制度 2 2022/11/19 14:44
- 消費税 消費税の納税額の計算 1 2023/02/19 18:12
- 消費税 インボイス制度における仕入税額控除の経過措置について② 7 2023/07/28 22:16
- ふるさと納税 株式投資の配当金を ふるさと納税計限度額計算へ算入 税抜きか否か 1 2022/11/13 10:03
- その他(保険) 投資目的の保険商品について。受取時にかかる税金について保険会社に質問しました。 商品を端的に説明する 3 2023/08/08 20:33
- 所得税 2022総決算 2 2022/12/28 17:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
なぜ消費税10%は×1.1なのですか...
-
480円の税込は何円ですか? 急...
-
3980円の税込はいくらですか? ...
-
至急!Macのキーボード、×の記...
-
時給制の業務委託時、請求書の...
-
ニンテンドープリペイドカード...
-
2200万円の税抜き価格の計算の...
-
美容院に詳しい方、一部美容院...
-
値上げ率の出し方
-
たばこを買い取ってもらう方法...
-
税込み105万の時の収入印紙はい...
-
家電リサイクル料金と消費税
-
税込から税抜に変更した場合の...
-
日当賃金からの「消費税」とい...
-
なぜ消費税を別で表記するので...
-
270円+税着いたら何円ですかね?
-
エクセルでの消費税だけを出し...
-
端数1円消費税の仕訳を教えてく...
-
セブン値上げ!
-
畑を月5千で借りる予定ですが、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なぜ消費税10%は×1.1なのですか...
-
時給制の業務委託時、請求書の...
-
480円の税込は何円ですか? 急...
-
家電リサイクル料金と消費税
-
エクセルでの消費税だけを出し...
-
至急!Macのキーボード、×の記...
-
端数1円消費税の仕訳を教えてく...
-
ニンテンドープリペイドカード...
-
2200万円の税抜き価格の計算の...
-
非課税の資格試験受験料や資格...
-
何が矛盾しているのかわからない
-
畑を月5千で借りる予定ですが、...
-
貯水槽の法定検査は非課税だそ...
-
3980円の税込はいくらですか? ...
-
Excelの請求書に税込合計額を、...
-
美容院に詳しい方、一部美容院...
-
エクセル、ある項目だけ消費税...
-
初めまして。 3190円の消費税10...
-
大昔は写真屋で「証明写真」を...
-
値上げ率の出し方
おすすめ情報