- 締切済み
アクセスで近似値を求めるには・・・
マイクロソフトアクセス初心者です。 エクセルでいうVLOOKUPに相当する関数を使いたいのですがどのようにするといいでしょうか?データベースは以下のようなものです。 人数 金額 台数1 台数2 2人 123,456円 1台 0台 3人 234,567円 1台 1台 4人 345.678円 1台 1台 5人 456,789円 2台 1台 2人 343,343円 0台 1台 のようなものがテーブルが10万件ほど並びます。 このデータベースを、金額を10,000円ごとに、「人数」ごとの件数、それにかかる「台数」の件数を分析した表を作成したいのです。たとえば、10,000~20,000円の間で、2人が何件、2人にかかる台数1が何件、台数2が何件というような感じです。 ここで、「1万円ごとに」件数を割り出すというのがネックになってます。そこで、金額をあらかじめ123,456円を20,000円というように置き換えればやりやすいと考えました。エクセルならば、ここでVLOOKUP(金額,○○,○,false)で近似値で置き換えができます。この近似値の処理をアクセスで行いたいのですが、可能でしょうか? もしかして、1つずつクエリで抽出をしなきゃいけないということはないと思いまして。ちなみにマクロはさっぱりわかりません。質問の内容がわかりにくいかと思いますがよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- CHRONOS_0
- ベストアンサー率54% (457/838)
数字をある刻みごとのグループに分けるには Partition関数を使います 詳しくはヘルプで確認してください Partition 関数 ある数値が、区切られた複数の範囲のうち、どの範囲に含まれるかを示すバリアント型 (内部処理形式 String の Variant) の文字列を返します。
- x0000x
- ベストアンサー率52% (67/127)
以下のSQLをクエリのSQLビューに貼り付けたて実行すれば、可能では? テーブル名は"TBL"です。 SELECT Int(TBL.金額/10000)*10000 AS 集計単位, TBL.人数, Count(*) AS 件数, Sum(TBL.台数1) AS 台数1, Sum(TBL.台数2) AS 台数2 FROM TBL GROUP BY Int(金額/10000)*10000, TBL.人数; <TBLデータ> 人数 金額 台数1 台数2 2 \123,456 1 0 3 \234,567 1 1 4 \345,678 1 1 5 \456,789 2 1 2 \343,343 0 1 2 \123,999 1 0 <集計結果> 集計単位 人数 件数 台数1 台数2 120000 2 2 2 0 230000 3 1 1 1 340000 2 1 0 1 340000 4 1 1 1 450000 5 1 2 1
お礼
ありがとうございました。早速、明日試してみます。
- imogasi
- ベストアンサー率27% (4737/17070)
(1)アクセスにもピボットテーブルがあり、金額区分(1万円毎)を指定できたような気がする。調べてみてください。 (2)エクセルでなら処理できると思うなら、アクセスからエクセルノデータを写すのは簡単です。2007で無いと、6万行の制約に引っかかるが。 (3)ソートして簡単なプログラムを組めば簡単なのだが。何万を越えると、件数合計、計数合計を書き出し、それら各変数をご破算して、次ぎの万を越えるまで、件数、計数を各変数に足しこめばよい。 (4)集計クエリでもできたような気がする。
お礼
ピボットテーブルは試してみましたが10000ごとの設定がわかりませんでした。もう少し調べてみます。ありがとうございました。
- kurodai2
- ベストアンサー率38% (77/202)
>123,456円を20,000円というように置き換えればやりやすいと考えました これは、123,456円を120,000円の意味で書かれてますよね? テーブル名をテーブル2でテストしました。 クエリ SELECT テーブル2.人数, テーブル2.金額, Int(([金額])/10000)*10000 AS 調整額, テーブル2.台数1, テーブル2.台数2 FROM テーブル2; 金額を10000円で割った整数値に10000円かけています。 人数 金額 調整額 台数1 台数2 2 \123,456 120000 1 0 3 \234,567 230000 1 1 4 \345,678 340000 1 1 5 \456,789 450000 2 1 2 \343,343 340000 0 1
お礼
なるほど、10000で割った整数に10000を掛けるという方法がありますね。ありがとうございます。
- himajin100000
- ベストアンサー率54% (1660/3060)
SQLほとんど未経験者だが, 下に似たような質問が出ている。(PostareSQL向け) 英語が読めなくてもSQL文が読めれば想像できると思う http://www.nabble.com/group-by-range-of-values-t4159701.html
お礼
ありがとうございます。初心者でSQLの知識ないので、難しそうですが試してみます。
お礼
partition関数について、少し調べてみました。基礎知識が不足していてわからないところもありますが、理解できれば求めている結果が得られそうな気がします。ありがとうございました。