1.クエリーのビルドで計算をして四捨五入をしたいのですがどうしても
  方法がわからないので、教えてください。プロパティで表示形式を
  変えても、エクセルにエクスポートをすると戻ってしまいます・・・
 
 2.クエリーで計算をし、そのクエリー1、クエリー2を一つのクエリーに
  したときに、(1,2のテーブル結合は一方を全部表示させるものにしてま   す)項目で空欄になっているものは、計算されないのでしょうか?
  なにか良い方法がありましたら、教えてください。
  宜しくお願いします。

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

A 回答 (2件)

第1位なら



int([NUM]*10+0.5)/10

第2位なら

int([NUM]*100+0.5)/100

となります。
    • good
    • 0

1.について


>クエリーのビルドで計算をして四捨五入をしたい

Accessで、と言う意味でしょうか?
例えば、NUMと言うカラムを四捨五入したいのであれば
INT([NUM]+0.5)で、四捨五入の値になります。

>プロパティで表示形式を変えても、エクセルにエクスポートすると戻ってしまいます。

クエリーの結果がと言うことでしょうか?四捨五入した結果の値がと言うことであれば、上記の計算式にしてからやってみてください。それとも、小数点を持った値をエクセルへエクスポートすると小数点以下が見えなくなるという意味でしょうか?

当方では、ちゃんとなっていますね。(Office2000環境です。)

2.について

項目で空欄とは、クエリー1は全部出すとしたばあいの、クエリー1にあって、クエリー2にない場合のクエリー2の項目をさしているのでしょうか?

そうだとして、クエリー2の項目の値はNULLになっていますので、NULLと計算を行うと、結果はNULLになってしまいますので、たとえば、計算に使用したい項目をDATだとすると

IIF([DAT] Is Null,0,[DAT])

のように、Null以外の値に変えて計算すれば、OKだと思いますが・・・

質問自体が良くわからなかったので、的をはずしているかもしれません。

この回答への補足

遅くなりましたが、つまりこういうことです。
 1.のものは、確かに四捨五入されましたが、小数点第()位で四捨五入したい
   場合はどのようになりますか?

 何度もすいませんが、またまたお願い致します。

補足日時:2001/01/18 09:33
    • good
    • 0
この回答へのお礼

遅くなりましたが、ありがとうございました。
 どたばたの最中に聞いてしまったので、ちゃんとした文章になってませんでしたね。また、いろいろと教えてください。

お礼日時:2001/01/25 10:06

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

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

Qクエリーであるフィールドの値が空欄の時には空欄を表示したい時の方法

選択クエリーにて売上高フィールドと土日祝フィールドがあります。
いま、新しく「計算用」フィールドをもうけました。
これには、売上高フィールドにデータが入っていて、かつ、土日祝フィールドの数値が1ときには1を、そうじゃない時には2を、そして、売上高フィールドに数値が入ってないときには空欄を表示したいと思います。

これを、
計算用: IIf(Len([売上高])>=1,IIf([土日祝]=1,1,2),"")


と記述したら、プロパティにて、書式がブランクで表示され、これにより、フォームなどにもいろんなところに影響が出てしまいました。

単純に、売上高フィールドが空欄ならばという表現を記述したかったのですが、「空欄」という記述方法が分からなかったのでこのような方法をとりました。

しかしながら、結果として、こんなおかしな現象が生じてしまいました。

どなたか解決方法をお願いいたします。

Aベストアンサー

> そのやり方でもプロパティの書式が出てこないのです。

テキスト型と認識されるために、書式プロパティが使えないということかな?

> IIF(IsNull([売上高]),"",IIF([土日祝]=1,1,2))

IIF(IsNull([売上高]),Null,IIF([土日祝]=1,1,2))
とか
IIF(IsNull([売上高]),0,IIF([土日祝]=1,1,2))
のようにしたら、どうでしょうか?

Qアクセス・クエリーのビルドについて

《クエリー》 ビルドの式構築について
論理判断により式が違う場合、式の構築は可能でしょうか?

 もし A=12 
    B=B+1
 でなければ
    B=13

 こんな場合のビルドはどうしたらよいのか?

Aベストアンサー

もしA=12ならばB=B+1
でなければB=13として記述します。

IIF関数を使用します。
ExcelのIF関数と使い方は全く同じです。
IIFのヘルプも確認されるといいかと思います。

IIF(A=12,B=B+1,B=13)となります。

おそらくAやBはフィールド名を入れたいのでは
ないかと思いますが、
フィールドBに計算結果を入れたい場合は、
"B="は書かなくても大丈夫だったと思います。

的を外していたらごめんなさい。

Q五捨五入

エクセルで五捨五入を行う場合は、どのような数式を作成すればよいのでしょうか。また、VBAでround関数を使うと五捨五入になると聞いたのですが、どのようなユーザー定義になるのですか。よろしくお願いします。

Aベストアンサー

こんにちは。

通常、偶数丸め(銀行型丸め)というと思いますが、ExcelのVBAでは、偶数丸めというのは、Excel2000 から採用されましたので、歴史的にも浅いです。いわゆる、2進の計算で、浮動小数点誤差丸めに、正式な名称「最近接偶数丸め」として出てくるだけで、実務上でワークシートなどで使う場を知りません。統計には出てくるそうですが、なぜ、銀行型丸め(Banker's Rounding)というのか、そういう歴史的な背景を私は知りません。

ご質問者さんが、どういう状況で必要になるのか少し興味を持ちました。以前にもそのような質問に出会ったことがありました。

現実的な対応は、VBAのユーザー定義関数を使うにしても、原理は、以下のようになるはずです。以下の数式を見れば分かるとおり、

丸める桁が、奇数の場合、その下の桁の数字を四捨五入、偶数の場合は、下の桁が上の桁の半分よりも小さい場合は切り捨てになりますね。

=IF(MOD(INT(MOD(ABS(A1),10)),2),
SIGN(A1)*ROUND(ABS(A1),0),
SIGN(A1)*ROUND(ROUNDDOWN(ABS(A1),0)+(ABS(A1)>(ROUNDDOWN(ABS(A1),0)+0.5))*0.5,0))

小数点第一位の場合は、

=IF(MOD(INT(MOD(ABS(A1)*10,10)),2),
SIGN(A1)*ROUND(ABS(A1),1),
SIGN(A1)*ROUND(ROUNDDOWN(ABS(A1),1)+(ABS(A1)>(ROUNDDOWN(ABS(A1),1)+0.05))*0.05,1))

少し、数式は、ややこしいですが、理屈は、単純なことだ思います。

質問者さんが、銀行型丸めを要求している話で、既存のVBAのRound関数をそのまま使う分には、出された結果がそのとおりだと思います。

>少数桁が大量にあった場合(?)は、どのように設定すればよろしいでしょうか。
>このVBAをしようした場合の有効桁は2ケタということになりますでしょうか。

そのままの計算でしたら、有効桁数は関係ないのではありませんか?
つまり、浮動小数点の無限小数が存在していても、判定が、その半分よりも大きい・小さいには、有効桁数はありませんね。

>たとえば、2.501だった場合は「2」にはならず「3」になるということでしょうか。

私が説明してよければ、こういうことになると思います。
1桁で丸める場合は、1桁が偶数2だから、その下の桁の数値0.501が、丸める桁の半分0.5よりも多いので、四捨五入されて、3になります。2.5でしたら、半分[よりも]大きくない(以上ではなくて)ので、切捨てになるという仕組みだと思います。だから、Excelの仕様の小数点第16位以降は別としても、基本的には有効桁数は関係ありませんね。

ただ、私は実際には出会ったことのない計算です。

こんにちは。

通常、偶数丸め(銀行型丸め)というと思いますが、ExcelのVBAでは、偶数丸めというのは、Excel2000 から採用されましたので、歴史的にも浅いです。いわゆる、2進の計算で、浮動小数点誤差丸めに、正式な名称「最近接偶数丸め」として出てくるだけで、実務上でワークシートなどで使う場を知りません。統計には出てくるそうですが、なぜ、銀行型丸め(Banker's Rounding)というのか、そういう歴史的な背景を私は知りません。

ご質問者さんが、どういう状況で必要になるのか少し興味を持ちました...続きを読む

Q削除クエリー”更新可能なクエリーでなければなりせん”のエラー

アクセス97(W2000)
削除クエリーを実行すると、上記のようなエラーメッセージが出てきます。
行ったのは、下記のような内容です。

テーブルA:品種・商品コード
テーブルB:購入月・商品コード・単価

この2つのデーブルを、商品コードで結合します。
そして、選択クエリーで、
”購入月・品種・商品コード・単価” を表示させます。
その後、品種で”R”を設定し、抽出します。

ここまでは、抽出も出来、後は、テーブルBから”品種R”だけ、
つまり、選択した内容を削除したく、選択クエリーを削除クエリーに変更し、
実行したところ、上記のエラーが発生いたしました。

削除するテーブルを指定する、サブクエリーを使用する、
など、このままではいけない、というのはわかったのですが、
具体的な方法が、よくわかりません。

今の自分の実力では、かなりの勉強不足、と思いますが、
なにがしかのアドバイスを頂ければと、思っております。
お手数ですが、どなたか、よろしくお願い申し上げます。

Aベストアンサー

テーブルの構造からして、テーブルAには同じ商品コードを持つレコードは1件のみで
テーブルBは同じ商品コードをもつレコードが複数件存在すると思われます

この2つのテーブルを商品コードで結合すると
テーブルAとテーブルBのレコードが 1:多 の形で
繋がることになります。

 テーブルA        テーブルB
品種 商品コード   購入月 商品コード 単価
R   ABC       10    ABC    100
              11    ABC    150
         ↓
購入月 品種 商品コード 単価
10    R    ABC    100
11    R    ABC    150

※テーブルBの複数件のレコードに対して、テーブルAは
 同じ1件のレコードの内容が同時に使われている

こうした 1:多 の形のクエリは「更新不可能なクエリ」になります。
(上記の例で、11月のレコードだけ消そうとしても
テーブルAのデータは10月のレコードの方にも使われているため消す事はできない
といった不整合が発生するため、更新不可とみなされる)

サブクエリを使った形にするためには
テーブルの結合は行わず、テーブルBのみを指定した削除クエリとし
商品コードの抽出条件の部分に

IN(SELECT 商品コード FROM テーブルA WHERE 品種 = "R")

という式を埋め込んでみてください。

これならば
「テーブルAから 品種 = R の商品コードを抽出し
 テーブルBの商品コードがそれと一致するレコードを削除する」
という意味のクエリになります。

SQLビューで書くならば

DELETE FROM テーブルB
WHERE 商品コード IN(SELECT 商品コード FROM テーブルA WHERE 品種 = "R")

という形になります。

テーブルの構造からして、テーブルAには同じ商品コードを持つレコードは1件のみで
テーブルBは同じ商品コードをもつレコードが複数件存在すると思われます

この2つのテーブルを商品コードで結合すると
テーブルAとテーブルBのレコードが 1:多 の形で
繋がることになります。

 テーブルA        テーブルB
品種 商品コード   購入月 商品コード 単価
R   ABC       10    ABC    100
              11    ABC    150
       ...続きを読む

QAccess クエリのビルドで合計の計算

Access クエリのビルドで合計の計算をする場合、空欄があると計算が出てきません。空欄すべてに0を入力すると計算されるのですが、どこか大切な設定を間違っているのでしょうか

Aベストアンサー

>空欄があると計算が出てきません
Nz関数を使ってフィールドを演算すればできます。
例えば
[A]+[B]+[c]で[B]が空欄の場合、合計されないということですよね。
Nz([A])+Nz([B])+Nz([c])にすれば空欄があっても演算できます。
>大切な設定を間違っているのでしょうか
間違っている訳ではありません。空欄をNullと扱っているので演算できないだけです。そのためNz関数を使ってNullを0として演算できるようにすれば良いだけです。


このカテゴリの人気Q&Aランキング

おすすめ情報