• ベストアンサー

AccessのSQLで算術型丸め処理をしたい

いつも楽しく勉強させていただいております。 環境はWin7でAccess2013です。 Accessを使って請求書のシステムを作っています。 顧客からExcelで検算してみたが計算が違うのではというクレームが来ました。 調べてみるとAccessのSQLのRound関数とExcelのワークシート関数のRound関数では結果が異なることが分かりました。 前者はRound(2.5,0)が2になり、後者は3になります。 銀行型丸め処理と算術型丸め処理というらしいです。 (実はついさっき得たばかりの知識です)。 AccessのSQLで算術型丸め処理をするにはどうしたらいいでしょうか。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8525/19381)
回答No.1

>AccessのSQLで算術型丸め処理をするにはどうしたらいいでしょうか。 0.5を足してINTで切り捨てして下さい。 INT(元の値+0.5) これで「2.5」が「3」になります。 小数点第二位で行う場合は INT(元の値*10+0.5)/10 のように、10倍して0.5を足してからINTで切り捨てして10で割って桁を戻します。 これで「0.25」が「0.3」になります。 >銀行型丸め処理と算術型丸め処理というらしいです。 算術型丸め処理(普通の四捨五入)では「値が増加する方が多くなる」ので、四捨五入した後に合計を取ると、合計が「大きめ」になってしまいます。 銀行型丸め処理には「偶数丸め」と「奇数丸め」の2つがあり、値が増加するのと値が減少するのが均等になるため、丸めした後に合計を取っても、合計が狂いにくくなります。 因みに、AccessのSQLのRound関数は「偶数丸め」なので「0.5→0、1.5→2、2.5→2、3.5→4…」となります。

関連するQ&A

  • アクセスVBAで四捨五入

    アクセスVBAでROUND関数を用いると、"銀行型"という丸めになります。これをエクセルシートのROUND関数と同じように"算術型"にする方法を教えてください。

  • ADOで算術型のRound関数を使いたい

    お世話になっております。 ACCESSではRound関数を使うと銀行型で計算してしまうので、算術型で計算するため以下のような定義関数をACCESS上で作成しました。 Public Function Round(X As Currency, s As Integer) As Currency Dim t As Integer t = 10 ^ Abs(s) If s > 0 Then Round = Int(X * t + 0.5) / t Else Round = Int(X / t + 0.5) * t End If End Function この関数を使えばACCESS上でクエリを見た時にはちゃんと算術型の計算結果が表示されるのですが、ADOを使ってExcelで読み込んだ時にはなぜか銀行型の計算結果が表示されていしまいます。 "Round"という関数名が良くなかったのかと思い、"Round2"という関数に変更したところ、ACCESS上は問題なかったのですが、ADOで読み込んだ時に"未定義の関数があります"とエラーが出てしまいました。 ADOで読み込んでも算術型のRound関数で計算するような方法はないでしょうか。

  • Access SQL

    Access2000です。 クエリである項目が=1ならXX、=2なら○○としたいのでヘルプを参照し SQLビューで IF(項目A=1,10*項目B,IF(項目A=2,20*項目B,0)) としました。 データシートビューを出そうとするとエラーになります。 エラーはIFが未定義関数だというものです。 なお、デザインビューは開けます。 どこがいけないのでしょうか? よろしくお願いいたします。

  • Excel2010の使い方について

    Excel2010を使っていますが、 1ファイルに複数のワークシートを作成できますので、資料作成には大変便利です。 しかしながら次の点で困っています。 それは、ある1つのワークシート内では、変数や常数を扱った算術計算は支障はないのですが、同じファイル内の他のワークシートの変数や常数を一緒に使う算術計算ができません。 つまり同じファイルですが複数のワークシートにまたがる計算です。 こうした計算は、Excel2010では、できないのでしょうか? それともするには相当面倒な手順がいるのでしょうか。 どなたかご存じの方がありましたら、教示ください。

  • AccessレポートをExcel2010PDF出力

    AccessからレポートのPDF出力を考えています。 DoCmd.OutputTo acOutputReport, Source, acFormatPDF, FileName Access2007以降なら上の文でPDF出力できますが、Access2003とExcel2010がインストール された環境で、Access2003からExcel2010の機能を使ってPDF出力させることは可能でしょうか。 AccessからExcelのワークシート関数を使ったり、Excelファイルを開いて編集することはできたので、 PDF出力もできるかもしれないと思い、質問しました。

  • アクセスの集計クエリの件

    アクセスのクエリを使って集計計算をする際、エクセルで言うround関数のような処理をする方法はありますか。あれば教えてください。ヨロシクお願いします。

  • アクセス97での罫線について

    教えてください。 ACCESS97で一つのテーブルをEXCELにエクスポートする処理をマクロ (ワークシート変換)で作成しました。 EXCELシート上にデータはちゃんと書き込まれています。 次に、エクスポートされたEXCELのシート上に(セルすべてを囲む)罫線をつけて 見やすく表示したいと考えているのですが... マクロでもVBAでも構いません。そのようなことはできるのでしょうか? また出来るとしたら、データの中のある項目(フィールド)が変更したら、その下の罫線は太くするといったことは可能でしょうか? 参考HPでも構いません。宜しくお願い致します。

  • Accessで割り算の余りを求める計算方法を教えてください

    Excelの関数には、MODという関数がありますが、Accessにはそのような関数がありませんね。 intやroundはあるのに。 皆様はどのようにして余りを求められているのでしょうか? VBAでユーザー関数を作るのは面倒なので、関数だけで処理したいのですが。

  • EXCEL-VBA の round関数

    EXCEL-VBAで Cells(1, 1) = Round(Cells(3, 3), 0) として、 C3 に28.5 を入力し、上のマクロを実行すると、 A1には、28と表示されてしまいます。 ワークシート関数の =round(c3,0) を他の適当なセルに入力すると、 その返り値は、29 とちゃんとなります。 c3が 28.5001 とかだと両者ちゃんと 29 となります。 これは、VBA関数のバグなりスペックなのでしょうか?

  • SQLスキル、とはどこまでを?

    (専門的なご意見がほしいので、このカテゴリを選択) データを扱う事務系の仕事で、SQLの知識やスキルを要求されることが多いです。 今までエンジニアやプログラミング系の職種以外は、SQLまで聞かれることはなかったのですが ここ最近で大変増えてきました為、仕事が決まりません。 あくまでも事務職なのですが、この場合のSQLとはどこまでを求めているのでしょう。 また、これから勉強するなら、何から手を付ける(あるいは、何を学ぶべき)のでしょうか。 自分が分かるのは、AccessとExcelのマクロ(自動処理の記録)、ExcelのVBA基礎です。 仕事例としては、顧客データベース管理やセールスのフォーキャスト分析レポート業務など。 決してIT系の職種とはなっておりません。 どのキャリアコンサルタントや派遣の担当者に聞いても、 「できるだけ理解しているに越したことはないようで・・・ プログラミングやITエンジニアの仕事ではありませんので・・・付随的な知識で欲しいみたいで・・・」 と、相手の要求をイマイチ理解していないようです。 彼ら自信がSQLについて知らないため、こちらにアドバイスしきれないのです。 どうかご教授ください。