• ベストアンサー

AccessからExcelへ出力

Access2003からExcel2003へ出力したいのですが、 クエリに3つのフィールドがあるとして、 1つ目のフィールドをExcelの1行目、 2つ目を2行目、3つ目を3行目とゆうことはできるのでしょうか? VBAは勉強中です。 よろしくお願いします。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

クエリというより、テーブル"T"にフィールドA、B、Cがあるとします。 以下の4個のクエリを作ります。 (1)Q1 TRANSFORM Max(CStr(T.A)) SELECT "A" AS Col FROM T GROUP BY "A" PIVOT T.A; (2)Q2 TRANSFORM Max(CStr(T.B)) SELECT "B" AS Col FROM T GROUP BY "B" PIVOT T.A; (3)Q3 TRANSFORM Max(CStr(T.C)) SELECT "C" AS Col FROM T GROUP BY "C" PIVOT T.A; (4)QX SELECT Q1.* FROM Q1 UNION SELECT Q2.* FROM Q2 UNION SELECT Q3.* FROM Q3 最後のQXが目的のクエリです。但し、左端に識別用のフィールドが出力 されるので、Export後にA列を削除してください。

orih65
質問者

お礼

できました。ありがとうございます。 自分の思うようにできなくて時間かかりましたが。 まだまだわからないことがたくさんありますので、少しづつ勉強していきます。 どうもありがとうございました!

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

解決案をまとめます。 (1)クエリを工夫 一番、保守性が良く、速度も速い。但し、SQLの難易度が高い。 場合(テーブル構成などの条件)によっては実現できない。 現行のSQL(クエリ)を見ないと何とも言えない。 (2)Excel側の操作 一度、TransferSpreadsheet を使ってExcelに出力した後、Excelの 操作で行列を入れ替える。(コピー→形式を選択して貼り付け) (3)全てVBA 全てプログラムで実現する。 最もキメ細かい制御ができるが、処理速度が遅い。 上記中、(2)と(3)はプログラムすることに変わりは無いのですが、 データ量が多い場合は(2)の方が速く、少ない場合は同じ速さだと 思います。「多い、少ない」は感覚的なもので、マシンの性能や LANなどの環境に左右されますが、経験上、3000件くらいではないかと 思います。 プログラム難易度は(2)、(3)は同程度でしょう。(1)は実質1行で 実現でき、マクロ(Access)でも操作できます。

orih65
質問者

お礼

(1)でやる場合、 クエリにA、B、Cというフィールドがあり、  A   B   C  100   あ   1  200   い   2  300   う    3 というデータがあります。 テーブル構成は単純なものとします。 クエリ内で並べ替えたデータを表示できるのですか? 具体的にどのようにやるか教えて頂けますか? 理解できてなくて申し訳ありません。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

行、列、を入れ替えるということでしょうか? 直接は難しいので、クエリを工夫(ユニオン、クロス集計など)して 行列を入れ替えるか、Excel側の操作(マクロなど)で入れ替えるか、 全てプログラムを作りこんで対応するかの選択があります。 クエリが単純なら一番目の方法(クエリを工夫)がお勧めですが、 状況と、希望(例えばVBAを使いたい等)により解決策が変わります。

orih65
質問者

お礼

回答ありがとうございます。 はい。行、列、を入れ替えるということです。 出力するとき、Excelのファイルを指定したいので、 VBAを使わないとできないかと思いました。 他の人が使うので、フォームでボタンクリックで、 出力させて、操作がないようにしたいのです。