• ベストアンサー

アクセスで同じ種類のものを横に並べたい

お世話になります。 アクセスでデータを取り込んだデータをエクセルで吐き出す為、横に並べたいと思っています。 種類 品物 a  aa-1 a  aa-3 a  aa-5 b  bb-3 c  cc-1 c  cc-2 上記のようなデータを 種類 品物1   品物2   品物3  a  aa-1    aa-3    aa-5  b  bb-3  c  cc-1    cc-2 というようにクロス集計をしたいと思っています 品物1 品物2 品物3にあたる列見出しをどのようにしたら良いか分かりません。 種類ごとにカウントでくる関数ってありますでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

>種類ごとにカウントでくる関数ってありますでしょうか? 関数はないと思いますが、クエリを工夫すればカウントは可能です。 SELECT X.種類, X.品物, '品物' & Count(N.種類) AS 列見出 FROM テーブル名 AS X INNER JOIN テーブル名 AS N ON (X.種類=N.種類) AND (X.品物>=N.品物) GROUP BY X.種類, X.品物; 又は、 SELECT X.種類, X.品物, '品物' & DCount("*","テーブル名","種類 ='" & X.種類 & "' AND 品物 <= '" & X.品物 & "'") AS 列見出 FROM テーブル名 AS X; どちらのクエリでも、同じ結果が出ます。 上記の方がパフォーマンスは良いと思います(しかし難解です)。 下記のクエリの方が分かり易いかも。 お好きな方を使ってください。 このクエリで、種類ごとのカウントをし、 ついでに"品物"という文字列をつけて、列見出用に使います。 このクエリを「集計準備」という名前で保存したとします。 次に、上記のクエリを元に、クロス集計をします。 TRANSFORM First(集計準備.品物) AS 品物の先頭 SELECT 集計準備.種類 FROM 集計準備 GROUP BY 集計準備.種類 PIVOT 集計準備.列見出; これで、ご希望の結果になると思います。 ただし、全く同じ種類、品物がある場合、 この方法では、うまく動きませんので、注意して下さい。 全く同じレコードが含まれている場合は、 オートナンバー等の主キーを追加し、 それを集計に利用する必要があると思います。 ----補足---- SQL文からクエリを作るには、 クエリの新規作成 → テーブルは追加しない 表示 → SQLビュー として、SQL文をコピー&ペーストして下さい。 テーブル名は正しいテーブル名に置き換えて下さい。

kapakapa
質問者

お礼

ご回答ありがとうございます。思い通りに出来ました。ありがとうございます。内容が難しかったですが、これから理解して勉強してみようと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

並べる順番を決定できるフィールドがいるのですが 品物の文字コード順でよさそうですね クエリデザインビューで下のような式フィールドを作ります 列名:"品物" & DCount("*","テーブル名","種類='" & 種類 & "' and 品物<='" & 品物 & "'") このクエリをクロス集計クエリに変え 種類:行見出し 列名:列見出し 品物:値:先頭

kapakapa
質問者

お礼

ありがとうございます。いろいろな方法があって勉強になりました。 またよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • 目次設定時のナビゲーションウィンドウについて

    Word2010を使っています。 目次を設定すると、左側のナビゲーションウィンドウの見出しが2重で出てきてしまいます。 目次を設定していない状態のナビゲーションウィンドウは、 1.A 1.1.AA 2.B 2.1 BB 3.C 3.1 CC となっています。 ※1.は見出し1、1.1.は見出し2としています。 目次を追加した状態のナビゲーションウィンドウは、 1.A 4 1.1.AA 5 2.B 6 2.1 BB 7 3.C 8 3.1 CC 9 1.A 1.1.AA 2.B 2.1 BB 3.C 3.1 CC と2重にリストされてしまいます。 目次を追加しても、下記のようなナビゲーションウィンドウにする設定を教えてください。 1.A 1.1.AA 2.B 2.1 BB 3.C 3.1 CC 初歩的な質問で申し訳ありませんが、宜しくお願い致します。

  • calcの計算式について

     A列 B列 1 aa 500 2 bb 210 3 cc 140 4 aa 520 5 cc 140 6 bb 20 7 cc 420 ・ ・ という100行ぐらいのデータの aa bb ccごとの合計を出す場合は どのように計算すればいいでしょうか? 例えばaaの合計は1020です。 よろしくお願い致します。

  • エクセルで、規則性はあるのですが、数字と文字が混在しているものを重複しないように抽出したいのですが。

    エクセルで、シート1に列A(数値)と列B(文字列)を結合したものが、 列C(列A&列B)であります。 これをシート2で列Cの文字列が重複しないように抽出したいのです が、どうしたらよいのでしょうか? シート1     列A  列B  列C 行1  項目A 項目B 項目C 行2  2   CC  2CC 行3  3   AA  3AA 行4  5   BB  5BB 行5  7   PP  7PP 行6  2   CC  2CC 行7  5   AA  5AA これをシート2で、     列C 行1  項目A 行2  2CC 行3  3AA 行4  5BB 行5  5AA 行6  7PP このように重複するものを統合した形でまとめたいのですが、 わかるかたがいれば教えてもらえないでしょうか?

  • Excelの順不同の難しい重複チェックについて

        列A     列B     列C    列D     列E     列F     列G     列H 行1  愛      青      パンチ                            行2  愛      勇気     友達   BB    AA    CC            行3  勇気     愛      友達   AA    CC    BB            行4  勇気     弁護士    正義                             行5  勇気     愛                                     行6  コイ     ダイス    ダチ                             行7  ダイス    ダチ     コイ                             行8  友達     愛      勇気   CC    AA    BB 上記のような6列のデータ(データによってはB列で終わっていることもあります。) の順不同で行での重複をチェックする関数を知りたいです。 行2、3、8と行6、7が順番は違いますが同じデータなので重複と出したいです。 こちらのサイトで色々聞いたので、3列の場合には E1に↓を入れて下にコピー =IF(COUNTA(A1:C1)=0,"",A1&"_"&B1&"_"&C1&"_"&COUNTA(A1:C1)) D1に↓を入れて下にコピー =IF(SUMPRODUCT(1*(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(E$1:E1,A1,""),B1,""),C1,"")="___"&COUNTA(A1:C1)))>1,"重複","") 上記のように教わり、6列のデータが出てきてしまったので それに対応できるように、 列G1行目に =IF(COUNTA(A1:F1)=0,"",A1&"_"&B1&"_"&C1&"_"&D1&"_"&E1&"_"&F1&"_"&COUNTA(A1:F1)) こちらの関数を入れ下にドラッグし、 列H1行目には =IF(SUMPRODUCT(1*(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(H$1:H1,A1,""),B1,""),C1,""),D1,""),E1,""),F1,"")="___"&COUNTA(A1:F1)))>1,"重複","") 上記のように関数を追加したのですが、下記のような欲しいデータがどうしても出てきません。     列A     列B     列C    列D     列E     列F     列G     列H 行1  愛      青      パンチ                            行2  愛      勇気     友達   BB    AA    CC            行3  勇気     愛      友達   AA    CC    BB    重複      行4  勇気     弁護士    正義                             行5  勇気     愛                                     行6  コイ     ダイス    ダチ                     重複      行7  ダイス    ダチ     コイ                     重複      行8  友達     愛      勇気   CC    AA    BB    重複      3列の時にはできた関数なので6列も可能だと思うのですが何がいけないのか調べていたら こんな時間になってしまい、助けをお願いしたく再度書き込みしております。 何卒よろしくお願いいたします。

  • エクセルの名前の定義について。

    ご覧いただきありがとうございます。 エクセルの名前の定義についての質問です。 (1)【sheet1】 A2:A6に『aa』、 B2:B10に『bb』、 C2:C6に『cc』という名前を付けたとします。 ちなみにそれぞれのセルには文字列が入力されています。 (名前の定義の《範囲》はブックではなく、sheet1) (2)【sheet2】 B2:D6に『aa』、 B7:D15に『bb』、 B16:D20に『cc』と、sheet1と同じ名前を付けました。 それぞれB列・C列・D列には数字が入力されています。 (名前の定義の《範囲》はブックではなく、sheet2) ちなみにA列には、sheet1に入力されている文字列と同じものが入力されています。 A2:A6にはsheet1で『aa』と名前をつけた範囲と同じ文字列。 A7:A15にはsheet1の『bb』と同じ文字列。 A16:A20には『cc』と同じ文字列です。 ここからが本題です! (3)【sheet3】 A2に何らかしら関数を入れて、【sheet1】で作った名前(aaやbbやcc)が1つ表示されるようにしたとします。 そしてB2には、A2で表示された名前の中の文字列が1つ表示されるようにします。 (例えばA2に『aa』と表示されたら、B2には◯◯) 更にC2には、B2に表示された◯◯という文字列を使って、【sheet2】の名前『aa』の中のB列と、A列にある◯◯とが交差するセルに入力されている数字(図でいう(5))を表示させる関数を入力したいのです。(INDEXやINDIRECT、MATCH関数など…) 他に例えば、A2に『bb』(sheet1の名前)、B2に★★と表示されたら、C2には【sheet2】の名前『bb』の中のB列と、A列にある★★が交差するセルに入力されている数字を表示させたいです。 同じように、今度は、D2には、B2に表示された◯◯という文字列を使って、【sheet2】の名前『aa』のC列と、A列にある◯◯の交差するセルに入力されている数字を表示させたいです。 長々とややこしくてすみません… 説明分かりますでしょうか?? つまりは【sheet3】のC2・D2・E2に入力する関数が知りたいです。 自分なりに関数を入力してみたのですが、A2で表示された名前がsheet1での名前なので、sheet2の情報を引き出す事が出来ません。 わざわざsheet1とsheet2でシートを分けたのは、同じシート内で同じ名前が付けられないと思ったからです! どなたか分かりましたら教えて下さい! どうぞよろしくお願い致します。 ※ちなみに、貼付した図の『・』は以下省略の意味で使ってます。

  • excel グループごとにデータの種類数を数えたい

    こんばんは。お世話になります。 Excelで、データの種類数をかぞえたいのですが、いくつかのグループがあり、そのグループごとのデータの種類数をカウントしたいと考えています。 (データは数字のみ、空白もありますが、空白はデータ数として採用しない) ~データ~   A         B    1 グループ     データ 2   a          10 3  a           5 4   a 5   b           4 6   b           4  7   b            8  b            9  c           ・ 10  c           ・ ・    ・           ・ ・   ・ ・   ・ ~集計(求めたい結果)~ グループ    データの種類数 a           2       b           1 c           ・   ・           ・  ・           ・ 単純にB列のデータ種類を数えるには、 {=SUMPRODUCT(IF(B2:B・・・<>"",1/COUNTIF(B2:B・・・,B2:B・・・),0))} でできるというところまでは分かったのですが、「グループ別に」というところでつまづいています。 なお、Excel2007です。 恐縮ですが、ご教示願います。

  • excel index関数?changeイベント??

    作者不明のため、教えていただきたいのですがお願いします。 シートが4つほどあり、index関数でデータを5つめのシートで集計しています。 集計シート例:  A  B C D E F G H ・・・ 1   【ここにドロップダウンのボックス?があります▼】 2   あ い う え ・・・ 3●● 1 1 2 2 ・・・ 4△△ 2 2 3 2 ・・・ 5□□ 1 1 1 1 ・・・ ・ ・ ●●シート例:  A  B C D E F G H ・・・ 1   あ い う え ・・・ 2AA 1 1 1 1 ・・・ 3BB 0 1 1 1 ・・・ 4CC 1 2 2 2 ・・・ あいうえ項目が各シートにあり、集計シートでドロップダウンリスト(リストの下のセルB1には数字の割り当てがあります)からAAを選ぶと各シートからデータを引っ張ってきて(index関数がB1の数字を読み取ります)、各シートのデータが集計されます。 BBやCCと選んでも簡単に集計してくれるので重宝していたのですが、 これを応用しようと新規ブックで似たものを作り、 index関数(例:=IF((INDEX(●●!$B$2:$H$10,$B$1,1))="","*",INDEX(●●!$B$2:$H$10,$B$1,1))) ※列番号も右セル(あ→い→う・・・)にいくごとに増えていきます。 もコピーしましたが「#REF!」となって集計してくれません。 元のブックを開いてドロップリストを右クリック→マクロの登録をみるとマクロ「ドロップ1_change」という登録が見えますが、マクロを調べても表示は Sub ドロップ1_Change() End Sub しかでてきません。 なにも入っていないのになぜ動くのでしょうか? また他のブックではなぜ「#REF!」となるのでしょうか。 質問もどうしていいかわからないためわかりにくいかと思いますが、教えてください。この説明で不足している場合はご連絡下さい<(_ _;)>

  • オープンオフィスを使っています。

    オープンオフィスを使っています。 A列に AA BB CC AA DD ・ ・ ・ というデータが六万行ほどあります。 AA、BB、などは数が多すぎて何という文字列で何種類あるかも把握できていません。 AA、BB、などがそれぞれいくつあるかを導くにはどういう式にすればいいでしょう。教えてください。

  • Excel 複雑なセル埋めのVBA

    エクセルで入力済みのデータをテーブル形式にするためにVBAを組んでいますが突き当たりました、お知恵を拝借させてください。現在成形出来ているのは以下の状態です。    A列     B列    C列 1行  AA      2     1 2行 3行  BB      3     2 4行 5行 6行 7行 8行 9行  CC      2     3 10行 11行 12行 13行 14行 これを以下のようにB列を埋めたいと考えています。A列を埋めるVBAは当方で分かります。      A列    B列    C列 1行    AA     1     1 2行    AA     2 3行    BB     1     2 4行    BB     2 5行    BB     3 6行    BB     1 7行    BB     2 8行    BB     3 9行    CC     1     3 10行   CC     2 11行   CC     1 12行   CC     2 13行   CC     1 14行   CC     2 B1に2が入っていてC1に1が入っているときはB1から下へ1,2の連番を1回入れます、B3に3と入っていてC3に2と入っているときはB3から下へ1,2,3の連番を2回繰り返します、同じようにB9以降も処理しています。連番のスタートは必ず1で、現在B列に入っている数字が連番の最後に当たる数値でC列が繰り返し回数という事です。上の例ではB列を書き直していますが、新たにD列にB列に入れたい連番の列を作る方法でもいいと思っています。 もし表が崩れていたら済みませんでした。恐れ入りますがポインタでも結構ですのでご教授下さい、よろしくお願いします。

専門家に質問してみよう