Page 45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼クロス集計 宮本 02/9/27(金) 16:28 ┗Re:クロス集計 イケガミ 02/9/28(土) 23:42 ┗Re:クロス集計 孫悟空 02/9/29(日) 18:52 ┗Re:クロス集計 宮本 02/9/30(月) 11:18 ─────────────────────────────────────── ■題名 : クロス集計 ■名前 : 宮本 ■日付 : 02/9/27(金) 16:28 -------------------------------------------------------------------------
こんにちは またお世話になります。 仕入先A,B,C,D,・・・があって支払額を部門別100,200,300,400、・・・にクロス集計しています。 仕入先Xの支払額は毎月一定していますが、部門別金額を算出するのに仕入先A,Bだけの部門別合計の割合に依存しています。最終的にはクロス集計の形をとりたいのですが、アクセスだけで出来るように教えていただけないでしょうか? 支払額計 100 200 300 400 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− A 1000 400 100 200 300 B 800 100 300 150 250 C 900 200 200 200 300 D 1200 500 400 100 200 X 500 ? ? ? ? −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 部門計 4400 ? ? ? ? 宜しくお願いいたします。 |
なかなか、回答がつかないようですが。。 #私はクエリ自体が苦手なので、そのままにしていましたが。。 >仕入先Xの支払額は毎月一定していますが、部門別金額を算出するのに >仕入先A,Bだけの部門別合計の割合に依存しています。 ここらへんの意味があんまり、理解できませんので、もう少し詳しく 説明していただけますか? |
宮本さん、イケガミさんこんばんは、横レス失礼します。 わたしも、いろいろ想像を働かせながら、考えてみましたが、 複雑なクエリーを組むより集計前のデータそのものを 修正した方が、一番素直でしょう。 集計元のテーブル構造がわからないですが、 もし以下の様な構造で、 CREATE TABLE テスト_tbl( 支店 TEXT(10), 部門 TEXT(10), 金額 LONG, PRIMARY KEY (支店,部門) ) 以下のようなデータを集計するなら 支店 部門 金額 A 100 400 A 200 100 A 300 200 A 400 300 A 支払額計 1000 B 100 100 B 200 300 B 300 150 B 400 250 B 支払額計 800 C 100 200 C 200 200 C 300 200 C 400 300 C 支払額計 900 D 100 500 D 200 400 D 300 100 D 400 200 D 支払額計 1200 X 支払額計 500 下記のようなモジュールで不足するデータを補う事が可能です。 Sub X社のデータ追加() Dim Ms_Db, Ms_Rs, Ms_Rs2 As Object Dim X_delSQL, 比率SQL, 総額SQL, Ins_SQL As String Set Ms_Db = CurrentDb 'X社の売り上げから支払額計以外の金額を削除します。 X_delSQL = "" X_delSQL = X_delSQL & "DELETE" & Chr(13) & Chr(10) X_delSQL = X_delSQL & "FROM テスト_tbl" & Chr(13) & Chr(10) X_delSQL = X_delSQL & "WHERE 支店='X'" & Chr(13) & Chr(10) X_delSQL = X_delSQL & "and" & Chr(13) & Chr(10) X_delSQL = X_delSQL & "部門<>'支払額計';" Ms_Db.Execute X_delSQL, dbFailOnError 'X社の支払いを各部門単位にデータを追加してきます。 まずは、部門毎の総額を求めておきます。 総額SQL = "" 総額SQL = 総額SQL & "select" & Chr(13) & Chr(10) 総額SQL = 総額SQL & "部門," & Chr(13) & Chr(10) 総額SQL = 総額SQL & "sum(金額) as 部門合計金額" & Chr(13) & Chr(10) 総額SQL = 総額SQL & "from テスト_tbl" & Chr(13) & Chr(10) 総額SQL = 総額SQL & "where" & Chr(13) & Chr(10) 総額SQL = 総額SQL & "部門<>'支払額計'" & Chr(13) & Chr(10) 総額SQL = 総額SQL & "group by" & Chr(13) & Chr(10) 総額SQL = 総額SQL & "部門" Set Ms_Rs2 = Ms_Db.OpenRecordset(総額SQL) Do While Not Ms_Rs2.EOF '改めて支店AB総額から計算してXの売り上げを算出してレコードに追加していきます。 '各部門毎の支店ABの売り上げ比率を算出します。 比率SQL = "" 比率SQL = 比率SQL & "SELECT 'AB_比率'," & Chr(13) & Chr(10) 比率SQL = 比率SQL & "sum(iif(部門='" & Ms_Rs2("部門").Value & "',金額,0))/Sum(金額) AS 比率" & Chr(13) & Chr(10) 比率SQL = 比率SQL & "from テスト_tbl" & Chr(13) & Chr(10) 比率SQL = 比率SQL & "where" & Chr(13) & Chr(10) 比率SQL = 比率SQL & "(支店='A' Or 支店='B')" & Chr(13) & Chr(10) 比率SQL = 比率SQL & "and" & Chr(13) & Chr(10) 比率SQL = 比率SQL & "部門<>'支払額計'" & Chr(13) & Chr(10) 比率SQL = 比率SQL & "Group by 'AB_比率';" Set Ms_Rs = Ms_Db.OpenRecordset(比率SQL) 'データ追加クエリーを実行します。 Ins_SQL = "" Ins_SQL = Ins_SQL & "insert into" & Chr(13) & Chr(10) Ins_SQL = Ins_SQL & "テスト_tbl" & Chr(13) & Chr(10) Ins_SQL = Ins_SQL & "(支店,部門,金額)" & Chr(13) & Chr(10) Ins_SQL = Ins_SQL & "values" & Chr(13) & Chr(10) Ins_SQL = Ins_SQL & "(" & Chr(13) & Chr(10) Ins_SQL = Ins_SQL & "'X'," & Chr(13) & Chr(10) Ins_SQL = Ins_SQL & "'" & Ms_Rs2("部門").Value & "'," Ins_SQL = Ins_SQL & Ms_Rs("比率").Value * Ms_Rs2("部門合計金額").Value & Chr(13) & Chr(10) Ins_SQL = Ins_SQL & ")" Ms_Db.Execute Ins_SQL, dbFailOnError DoEvents Ms_Rs2.MoveNext Loop MsgBox "クロス集計クエリーを実行してください。" Set Ms_Rs = Nothing Set Ms_Rs2 = Nothing Set Ms_Db = Nothing End Sub 実行後クロス集計を実行すれば、いかがかと。 外れでしたらすみません。 |
イケガミさん 孫悟空さん おはようございます。 連休してる間にご回答いただき有難うございます。 WIN98 AC2000です。書くの忘れました。ごめんなさい。 今の私には少しレベルが高いのですが、孫悟空さんの方法にトライしてみます。 解らないところが出てくればまたよろしくお願いします。 |