一つ前の質問のつづきです。

私が完成形としてイメージしているのは、指定された場所に格納されてるエクセルのデータを、アクセスでコマンドをクリックするとその格納されてる複数のデータ(ファイル)が前の質問のクエリのような形式でファイルが作られる、というイメージをしているのですが、こういうのは可能でしょうか?また他にアイディアがありましたら教えて下さい。質問もあると思いますので聞いて下さい。

回答の条件
  • 1人10回まで
  • 登録:2006/11/24 15:06:23
  • 終了:2006/12/01 15:10:28

回答(9件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012006/11/24 16:05:07

ポイント16pt

http://q.hatena.ne.jp/1164015310

前回は長々とかかってしまってすみませんでした。

本題ですが、

(1)Excelのシート上にAccessのテーブルと同じような形式(1行目にフィールド名、2行目以下にデータ)でデータが整っているのであれば、Access上にてリンクテーブルを作成するだけで前回使ったクエリのテーブル1やテーブル2などと同じように使うことが出来ますので、下記を参考に設定してみてください。

Access 開発者向け VB プログラミング Tips - リンク テーブル

Excelが相手なので関連する機能は最初からインストールされていると思いますが、Office(Access)のCD-ROMから追加インストールが必要になる場合があります。

(2)Excelのシート上でAccessのテーブルのような形式になっていない場合は、まずExcel上で新しいシートを作って、その新しいシート上にきれいに並べておく必要があります。

(3)現時点では敷居は高すぎると思いますので、詳細は書きませんが、VBAでプログラムを作ればExcelのシート上から直接データを拾い上げたり、書き換えたりすることも可能ではあります。

id:hac20380

貼っていただいたURLをみてもよくわからなかったので(笑)リンクはデータベース・ウィンドウ内を右クリックして『テーブルのリンク』を選択し、はってみました。ちなみにエクセルのデータはAccessのテーブルのような形式になっています。しかし、3つのテーブルをクエリに追加した時にテーブル2と3のフィールドがF1、F2とかになってしまいました。そのまま実行するとパラメータの入力を聞かれます。またエクセルのデータのフィールドは30ぐらいありますが、その中から3つを抽出する形になっています。

2006/11/24 17:07:44
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012006/11/24 17:34:33

ポイント16pt

難しいページを書いてしまってすみませんでした。

>フィールドがF1、F2とかになってしまいました。

F1やF2のままでも、そのままで使えます。

商品名に該当するものがF1でJANがF2ならば、前回作成したクエリの商品名の部分をF1にJANをF2に書き換えます。

ただ、F1やF2のままでは使いづらいので、リンクテーブルを一旦削除して、リンクしなおしてください。その際にはリンクウィザードの途中で『先頭行をフィールド名として使う』という項目にチェックをいれるのを忘れないようにしてください。そうしておけば、Excelデータの1行目をフィールド名にしてくれます。

id:hac20380

クエリを実行したのですが、なぜかデータが8万件近く!?でてきてしまいました。ちなみにテーブル1のレコードは7000件ぐらいです。テーブルには同じ商品は1つしかないのですが、クエリを実行した結果だと同じ商品が多いので100件近く出てきています。

2006/11/24 18:45:45
id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012006/11/24 22:33:21

ポイント16pt

同じ商品が複数あると、互いに何度も結びつく格好になってしまって今回のようにレコード数が驚くほど増えてしまいますから、あらかじめ商品名毎に集計しておく必要があります。

まずは、

(クエリ1)

SELECT 商品名,First(JAN),SUM(在庫数) FROM テーブル1 GROUP BY 商品名;

(クエリ2)

SELECT 商品名,First(JAN),SUM(在庫数) FROM テーブル2 GROUP BY 商品名;

(クエリ3)

SELECT 商品名,First(JAN),SUM(在庫数) FROM テーブル3 GROUP BY 商品名;

というような3つのクエリを作ってそれぞれ実行してみてください。

そうすれば、各月の商品毎に集計された結果が得られるはずです。

前回までに作ったクエリではテーブル1/テーブル2/テーブル3を使いましたが、クエリ1/クエリ2/クエリ3に置き換えたものを新しく作りなおして実行してみてください。

id:hac20380

3つのクエリはできたのですが、フィールド名がExpr1001とかになってしまいました。ネットで調べると'フィールド名が指定されていないためにAccessが自動的に設定した名前'となっていますが、この場合はどうすればよいのでしょうか?

2006/11/25 10:27:46
id:kn1967 No.4

kn1967回答回数2915ベストアンサー獲得回数3012006/11/25 15:20:50

ポイント16pt

>フィールド名がExpr1001

SELECT句の部分に適宜、

  AS ○○

を追加してください。

(前回http://q.hatena.ne.jp/1164015310の2回目の回答も参照してください)

前回(1)~(7)というステップをつけたのは問題解決の方法であると共に、機能を追加していく過程でそれぞれの単語の意味を覚えていただこうという意図も含んでおりますので、今一度前回の回答に一通り目を通して(1)から(7)までのステップで、どこを変化させたら、結果がどう変わったかをご確認いただけますでしょうか。

id:hac20380

まず前回の私の質問の訂正なのですが、フィールド名がExpr1001とかになると回答しましたが、例えばクエリ1を3の回答していただいたとおり実行し、それをデザインビューで開きその時にSQLビューを開くと SELECT テーブル1.商品名, First(テーブル1.JAN) AS JANの先頭, Sum(テーブル1.在庫数) AS 在庫数の合計

FROM テーブル1

GROUP BY テーブル1.商品名;

このように記入されていました。この後実行すると AS の後のフィールド名が式どおり表示されています。また、この3つのクエリを元に最後、前回の回答4の(7)の式の’テーブル’を’クエリ’に置き換え実行すればよいのでしょうか?

2006/11/25 17:18:12
id:kn1967 No.5

kn1967回答回数2915ベストアンサー獲得回数3012006/11/25 23:02:33

ポイント16pt

>’テーブル’を’クエリ’に置き換え

そのとおりです。それと合わせてフィールド名もクエリの実行結果のフィールド名と合わせてください。

いきなり(7)でも結構ですが、できれば再度(1)から(7)まで順次拡張しながらがよろしいかと思います。

ところで、、、、今更ではありますが、、、、

前回回答の(7)はテーブル1を基準としているため、テーブル2あるいはテーブル3には存在するがテーブル1には存在しないという商品名があった場合に、その商品は結果に現れてこないのですが、それでよろしいでしょうか?

それは駄目ということであればUNIONとPIVOTという難しい技を使うクエリにしますが、、、、

id:hac20380

>前回回答の(7)はテーブル1を基準としているため、テーブル2あるいはテーブル3には存在するがテーブル1には存在しないという商品名があった場合に、その商品は結果に現れてこないのですが、それでよろしいでしょうか?

はい、大丈夫です。一応クエリ実行後の体裁はイメージ通りにできた状態です。この後なんですが、以前質問しましたが、完成イメージは別のツールからダウンロードしたエクセルファイルを指定場所に格納し、そのファイルを、アクセスのコマンドボタンを押すと自動で今の体裁になるようなマクロ?をつくりたいのですが、まずこのようなことは可能なのでしょうか?

2006/11/28 10:05:05
id:kn1967 No.6

kn1967回答回数2915ベストアンサー獲得回数3012006/11/28 10:46:03

ポイント15pt

>アクセスのコマンドボタンを押すと自動

この部分は、

前々回 http://q.hatena.ne.jp/1162269450

前回 http://q.hatena.ne.jp/1164015310

いずれにもなかったので集計の方法だけを書き込んできたのですが、、、

マクロはテーブルやフォームなどが一通りそろっている事を前提としていますので、リンクテーブル設定のようなことは出来ません。

VisualBasic for Application(略してVBA)によってプログラムを作ればリンクテーブルの設定を自動化することも可能ですがデータベースの基礎であるクエリを自力で作れない段階では敷居が高すぎますので、面倒ですが、クエリを操れるようになるまでは、古いリンクテーブルを削除して、新しくリンクテーブルを作るところまでを今回と同様に1つ1つ設定してください。

id:hac20380

ありがとうございました。ただ、仕組みがどのようなものなのか、または設定の仕方を説明しているサイトがありましたら、URLを貼っていただけないでしょうか?あくまで参考にするだけですが。

2006/11/28 12:02:50
id:kn1967 No.7

kn1967回答回数2915ベストアンサー獲得回数3012006/11/28 12:42:40

ポイント15pt

>リンクテーブル設定のようなことは出来ません。

すみません。これは誤りです。

マクロでもデータベース変換にてリンク作成可能でしたので、オブジェクトの削除→データベース変換の流れを登録すれば、自動実行可能となります。

id:hac20380

何度もすいませんが、

>オブジェクトの削除→データベース変換の流れを登録

この部分のやり方が載っているサイトがあればおしえていただきたいのですが。

2006/11/28 15:03:07
id:kn1967 No.8

kn1967回答回数2915ベストアンサー獲得回数3012006/11/30 16:02:37

ポイント15pt

私自身マクロはあまり使わない(VBAを使うので基本的に不要)ので探し方が上手く無いのだと思いますが、マクロの使い方を手ほどきしているようなページは見当たりませんでした。

ただ、、、マクロは非同期で動くためにリンクの削除→新しいリンクの作成とプログラムしてあっても、リンクの削除の完了を待たずに新しいリンクを作ろうとしたりする可能性があり、自動化は難しいと思います。

id:hac20380

ではVBAでの自動化はやれないことはない、ということでしょうか?

2006/11/30 16:52:58
id:kn1967 No.9

kn1967回答回数2915ベストアンサー獲得回数3012006/11/30 17:08:57

ポイント15pt

>VBAでの自動化はやれないことはない、ということでしょうか?

回答1.に書いた

Access 開発者向け VB プログラミング Tips - リンク テーブル

を理解できるようになれば可能ですが、こういったやりとりでそこまでお教えすることは無理です。

id:hac20380

何度も回答して頂きありがとうございました。

大変助かりました。

2006/11/30 17:12:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません