忙しい現代人の腰&肩のお悩み対策!

お世話になります。
ACESSにて、注文書のようなものを作成しているのですが、この注文書の合計金額部分を、「消費税込」と「税別」で分けて計算したいのです。

現在作成したクエリは
 フィールド:消費税を作成、税金割合に「0.05」と「0」を入力
 注文番号ごとに、式1にて「商品単価*商品個数」をクエリーで集計計算
 同クエリー内にて、税金割合を式2にて「式1*税金割合」
というものですが、税金割合が0のときの結果は式1の数字が出したいのですが、なぜか空白となってしまいました。
なぜでしょう??

作成テーブルは下記のような形です。
 T_注文書(注文番号、件名、消費税)
 T_注文商品(注文番号、項目、商品数量、商品単位)
 T_税(消費税、税金割合)--ここで0、0.05を入力

このQ&Aに関連する最新のQ&A

A 回答 (1件)

式1=[商品単価]*[商品個数]


式2=Int([式1]*[税金割合])
上記の場合、税金割合=0 なら 式2(消費税)=0となります。
税込金額ということであれば
式2=Int([式1]*(1+[税金割合]))
になります。

結果が空白となるということですが、
[商品単価],[商品個数],[税金割合]のいづれかにNull値(空白)がありませんか?
Nullに加減剰余した結果はエラーで空白表示になります。回避する場合は
式1=Nz([商品単価])*Nz([商品個数])
式2=Int([式1]*Nz([税金割合]))
    • good
    • 0
この回答へのお礼

税金割合に「0」を入力していたのが問題だったのか
式1=Nz([商品単価])*Nz([商品個数])
式2=[式1]+Int(1*[税金割合])
では結果がエラーで空白が出ましたが、

式1=Nz([商品単価])*Nz([商品個数])
式2=[式1]+Int(1*Nz([税金割合]))

と入力したら空白ではなく、計算結果がでました!
ありがとうございました!

お礼日時:2009/06/04 14:12

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessでの外税・内税

Accessで請求書を作りました。
まず、フォームでサブフォームを組み込み、内訳を入力し、合計金額・消費税・税込合計金額のテキストボックスに自動的に数字が入るように作ってみました。請求書ごとに内税の物と外税の物があるので、外税と内税のコマンドボタンを作成し、どちらかをクリックすると、消費税のテキストボックスに消費税額または"税込価格"と表示され、合計金額のテキストボックスに消費税込の金額または合計金額をそのまま表示するという設定をしました。
こんな感じで↓
Private Sub コマンド26_Click()

Me!消費税 = Me!合計金額 * 0.05
Me!税込合計金額 = Me!合計金額 + Me!消費税

End Sub

Private Sub コマンド29_Click()

Me!消費税 = "税込価格"
Me!税込合計金額 = Me!合計金額

End Sub
フォームではうまく表示されるのですが、レポートになると、「#Name?」と表示されてしまいます。
レポートでは消費税のテキストボックス=Forms!F請求書!消費税
税込合計金額のテキストボックス=Forms!F請求書!税込合計金額
と入力してあります。
フォームを開くと消費税と税込合計金額のテキストボックスには常に何も表示されてなくて、外税・内税のボタンを押さないと金額が表示されないのでそのせいでしょうか?
また、このやり方ですと、どちらかのボタンを押すたびに全部のレコードが内税のみ、外税のみになってしまい、請求書発行後に金額が変わってしまいます。
請求書番号ごとに内税・外税の金額を残したいのですが、そんなことは可能でしょうか?
独学で本を見ながら作っております。
VBAとかほんとによくわからないので初学者でも簡単にできる方法がありましたらぜひお願いします。

Accessで請求書を作りました。
まず、フォームでサブフォームを組み込み、内訳を入力し、合計金額・消費税・税込合計金額のテキストボックスに自動的に数字が入るように作ってみました。請求書ごとに内税の物と外税の物があるので、外税と内税のコマンドボタンを作成し、どちらかをクリックすると、消費税のテキストボックスに消費税額または"税込価格"と表示され、合計金額のテキストボックスに消費税込の金額または合計金額をそのまま表示するという設定をしました。
こんな感じで↓
Private Sub コマンド26_C...続きを読む

Aベストアンサー

元になるテーブルに課税区分を用意して
フォーム上では
Private Sub コマンド26_Click()
Me!課税区分 = "外税"
Me!消費税 = Format(Int(Me!合計金額 * 0.05) ,"#,##0")
Me!税込合計金額 = Me!合計金額 + Clong(Me!消費税)
End Sub

Private Sub コマンド29_Click()
Me!課税区分 = "内税"
Me!消費税 = "税込価格"
Me!税込合計金額 = Me!合計金額
End Sub

レポート上では詳細イベントのフォーマット時で課税区分に応じて
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If Me!課税区分="外税" Then
Me!消費税 = Int(Me!合計金額 * 0.05)
Me!税込合計金額 = Me!合計金額 + Me!消費税
Else
Me!消費税 = "税込価格"
Me!税込合計金額 = Me!合計金額
End If
End Sub

元になるテーブルに課税区分を用意して
フォーム上では
Private Sub コマンド26_Click()
Me!課税区分 = "外税"
Me!消費税 = Format(Int(Me!合計金額 * 0.05) ,"#,##0")
Me!税込合計金額 = Me!合計金額 + Clong(Me!消費税)
End Sub

Private Sub コマンド29_Click()
Me!課税区分 = "内税"
Me!消費税 = "税込価格"
Me!税込合計金額 = Me!合計金額
End Sub

レポート上では詳細イベントのフォーマット時で課税区分に応じて
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If M...続きを読む

Qアクセスのフォーム内で消費税計算方法を分岐させたい

アクセスでフォームを作って、消費税額を表示させるテキストボックスを
作りました。消費税は、場合によって外税だったり内税だったりするので、
オプションボタンを作って処理を分岐させようと思っています。
case文で処理を分岐させたいのですが、オプションボタンを選択したあとに
実行させるプロシージャの書き方がわからないのです!
すみませんが、教えてください!

また、オプションボタンよりもっと簡単にできる方法ってあるんでしょうか?
本を見ながらの初心者なので、どれが適した処理方法なのか、判断できない
のです・・・。

Aベストアンサー

関数を作ってそれに課税対象額と課税区分を渡すって言う感じですね。


オプショングループで1が外税・2が内税とします。
Kingakに課税対象となる金額コントロール、Kubunにオプショングループを指定します。消費税を表示したいコントロールのコントロールソースに下記のファンクション名を指定して下さい。

Function Get_Tax(Kingak As Money,Kubun As Int)
Select Case Kubun
Case 1 '外税
Get_Tax = Kinigak * 0.05
Case 2 '内税
Get_Tax = Kingak - (Kingak / 105 * 100)
End Select

 って感じでしょうか。端数処理は行っていませんので小数点以下も表示されてしまいますが。切り上げ・切り捨て・四捨五入などint()で付け加えてください。

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Q「Access」で、式が入っているテキストボックスに直接入力したい。

「Access2000」を
使用しています。

まだ「アクセス」を使い始めたばかりなので、
分からないことが多いのですが…。

「フォーム」で、
「税抜き」というテキストボックスの
コントロールソースに関数
(=Int([税込み]/1.05+0.9))を入れました。

これで「税込み」価格を入力すると
自動的に「税抜き」価格が表示されるようには
なったのですが、「税抜き価格をダイレクトに
入力したいケース」が出てきて困っています。

「Excel」の場合、
式の上に直接入力すれば、式が消えて
値を直接打ち込むことが出来ますが、
「アクセス」の場合は式が入っている
テキストボックスに、値を直接入力
することは出来ないのでしょうか?

Aベストアンサー

計算式をコントロールソースに設定するのではなく、VBAを使って「税込み」が入力された直後にのみ「税抜き」額の計算を行ってインプットするという方法ではどうでしょうか?

手順(1)
[税抜き]のコントロールソースは空白にする。

手順(2)
[税込み]のプロパティで、[イベント]→[更新後処理]で[イベントプロシージャ]を選択し、すぐ右の[...]ボタンをクリックする。

手順(3)
VBエディタが開いて、次のように表示されるので・・・

Private Sub 税込み_AfterUpdate()

End Sub

↓この2行の間にこのように記述する。

Private Sub 税込み_AfterUpdate()

 Me![税抜き]=Int(Me![税込み]/1.05+0.9)

End Sub

フォームの変更を保存して完了。

これで、「税込み」を入力した直後に「税抜き」額がインプットされますが、変更したい場合は編集することも可能になります。

VBAを使われた事はないかもしれませんが、これは非常に簡単な処理ですので、ひとつチャレンジしてみてください。
 

計算式をコントロールソースに設定するのではなく、VBAを使って「税込み」が入力された直後にのみ「税抜き」額の計算を行ってインプットするという方法ではどうでしょうか?

手順(1)
[税抜き]のコントロールソースは空白にする。

手順(2)
[税込み]のプロパティで、[イベント]→[更新後処理]で[イベントプロシージャ]を選択し、すぐ右の[...]ボタンをクリックする。

手順(3)
VBエディタが開いて、次のように表示されるので・・・

Private Sub 税込み_AfterUpdate()

End Sub

↓この2行の間に...続きを読む

QACCESSレポート グループフッターの計算結果をレポートフッターで使う

いつもお世話になっております。
「部署」「商品」「金額」の3フィールドからなるテーブルを元に、下記のようなレポートで消費税を計算させようとしています。(実際はもっと項目は多いです。)

=============『詳細』
部署_商品_金額
=============『部署グループフッター』
="部署計"__部署合計 ←=Sum([金額])
="消費税"__部署消費税 ←=[部署合計]*0.05
="請求額"__部署請求額 ←=[部署合計]+[部署消費税]
=============『レポートフッター』
="全体計"__全体合計 ←=Sum([金額])
="消費税"__全体消費税 ←=Sum([部署消費税])
="請求額"__全体請求額 ←=Sum([部署請求額])

レポートフッターの
=Sum([部署消費税])
=Sum([部署請求額])
この2箇所がエラーになってしまいます。ヘルプを見るとそういうSumの使い方は出来ないようなことが書かれていました。

やりたいことは分かっていただけたでしょうか。
要するに部署ごとに消費税を出し、全体では各部署の消費税を加算したいのです。
今は仕方がないので部署ごとの消費税を出した別テーブルを用意しておいて、部署をキーにDsumで求めていますが、このやり方は気に入りません。
レポートの中だけでうまいやり方はないでしょうか。

ACCESS2000です。
よろしくお願いします。

いつもお世話になっております。
「部署」「商品」「金額」の3フィールドからなるテーブルを元に、下記のようなレポートで消費税を計算させようとしています。(実際はもっと項目は多いです。)

=============『詳細』
部署_商品_金額
=============『部署グループフッター』
="部署計"__部署合計 ←=Sum([金額])
="消費税"__部署消費税 ←=[部署合計]*0.05
="請求額"__部署請求額 ←=[部署合計]+[部署消費税]
=============『レポートフッター』
="...続きを読む

Aベストアンサー

> 誤差が出るのでダメなんですよ・・・
すべて切り捨て計算すればいいかと。

詳細セクション
=Int([金額]*0.05)

グループフッターセクション
=Sum(Int([金額]*0.05))

レポートフッターセクション
#グループフッターセクションと同じ。


もしくは、コントロール(テキストボックス)の集計機能を使うとかでも
できそうですね。

テキストボックスを、詳細セクションに配置して、
 可視プロパティ:いいえ
 コントロールソース:=Int([金額]*0.05)
 集計実行:グループ全体
     (全体)

上記のコントロールを、グループフッター等から参照するようにしても
求めることができると思います。

Qアクセス: フォーム上で計算した数字をテーブルに保存したい。

 こんばんは。また質問させてもらいます・・。
これがアクセスに関して、最後の質問になるようにしたいです!!

 さて、フォームに入力したものは自動的にテーブルに保存されます。
しかし、フォーム上で計算したものは、テーブルに反映されていませんでした。
過去の質問にフォーム上計算したものは、テーブルに反映されないということがわかりました。
では、一体どうすればいいのでしょうか。

 フォームのコントロールソースには
=([QTY]*[COST]) 数量*値段を入れています。

どうすれば、テーブルに表示できるでしょうか。
ご教授お願いいたします。

過去の質問は、こちらを参考しました。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1002073

Aベストアンサー

クエリーを覚えると便利です。
テーブル=オペレーターが入力したりする項目
クエリー=テーブルのデータプラスそれから計算出来るさまざまな項目

例えばQTYとCOSTはテーブルに
合計は 合計:[QTY]*[COST}
というようにクエリーに追加すれば、テーブルに
合計という項目を持つ必要がありません。
テーブルの「合計」を削除しても差支えありません。

また入力日という項目をテーブルに持ち
後の整理の目的でクエリーには
年:Year([入力日])
月:Month([入力日])
などとする事も可能です。

これで何年何月のデータだけを抽出したい場合でも
クエリーの抽出条件に 2004 とか 8(月)とかを
入力するだけでOKです。

合計、平均、最大、最小なども....

データベースはクエリーにあるレコードをいちいち保存するのではなく、計算式だけを覚えていて、開くたびに
計算して表示してくれるだけなのです。

QACCESSのクエリで抽出条件「または」は9個までしかかけませんよね…

10個以上の条件を扱うことは可能なのでしょうか?

もし、方法があればお教えください。よろしくお願いします。

Aベストアンサー

Access97で確認したところ、確かにデフォルトでは
そのぐらいの行数しかありませんが、
メニューの「挿入(I)」で「行(R)」をクリックすれば増やせます。

また、抽出条件列にマウスカーソルを移動し、左向きの
黒矢印になった状態でクリックすると、行が選択できます。
クリックしたままドラッグすると複数行が選択できますので(反転表示)、
これをCopy(キーボードでCntl+C)した後、
空白行一行を再び反転表示させてPaste(Cntl+V)しても、
行を増やすことができます。


・・・ただ、そこまで抽出条件を増やすと、場合によっては結果表示までに
だいぶ待たされる恐れがあります。
実際のデータを見ないと何とも言えませんが、
1つのクエリ内であまり多くの抽出条件を指定するのは
避けた方がいいと思います。
(複数のクエリに分割して、後でひとつに結果をまとめた方が早くなることがありますので、参考までに)

Qフォームで入力しても反映されない

ACCESSでフォームに入力しても元クエリに反映されない原因は何が考えられますか?コンボボックスからデータを入力しているのですが・・・。あと、選択クエリの更新結果が1件も表示されないのはリレーションシップの設定がまずいからでしょうか??

Aベストアンサー

元テーブルには反映されているのでしょうか?

>フォームに入力しても元クエリに反映されない

とは、そのコンボボックスからの入力値のみ反映されないのでしょうか?それともフォームで入力して保存しようとするとエラーメッセージがでて、入力自体が出来ないのでしょうか?入力は可能なのに1件もテーブルに保存されていないということなのでしょうか?

たいていのフォームで入力できな~い等の場合2つ以上のテーブルから必要項目を抜き出してクエリを作成する際の項目の選択ミスが多いのですが・・・。

また、もしかして・・・とは思いますが、ACCSESSは同時実行には弱いため、フォームも開いていて元クエリも開いていてはその場では反映されないですので一旦閉じてから開きなおさないと(クエリの再実行)なりません。

>あと、選択クエリの更新結果が1件も表示されない
についてももう少し具体的に(言葉では難しいかと存じますが)お聞かせいただけますか?

お力になれるとよいのですが。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング