• ベストアンサー

Accessインポートについて

超初心者です。 エクセルファイルで2つのシートがあります。 表1の方は名前、住所、電話番号 表2の方は名前、口座番号、名義 です。 名前をキーにして結合させてアクセスにインポートしたいです。 ほしい表は 名前、住所、電話番号、口座番号、名義 となります。 ちなみに表1と表2の名前の並び順がまったく違います。 つまり「表1.名前=表2.名前」みたいな条件文がいるのかな?と思います。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.6

Officeのエクセル用アドイン [Accessリンク] これをインストールしてあったら、O_cyanさんが言われているように、リンクテーブルが作成できます。 さらにSQL文次第で、リンクテーブルを作成しないでも、クエリだけで出来ます。 まず、SQLビューを開きましょう。 http://okweb.jp/kotaeru.php3?q=1545973 の#3でSQLビューの出す手順を書いてます。 次に以下のSQL文を編集して、張ってください。 ※1.≪インポート先テーブル名称≫ はインポート先のテーブル名称です。 名前,住所,電話番号,口座番号,名義の各フィールドがあることが必須です。 ※2.≪エクセルのブックパス≫は、データファイルとなるエクセルブックのフルパスを書いてください。 例:C:\C:\Program Files\Microsoft Office\データブック.xls その中には「表1」と「表2」というシートがある事が必須で、各シートに、データが記されています。 INSERT INTO ≪インポート先テーブル名称≫ (名前,住所,電話番号,口座番号,名義) SELECT 個人情報.名前,個人情報.住所,個人情報.電話番号,口座情報.口座番号,口座情報.名義 FROM [Excel 5.0;Database=≪エクセルのブックパス≫].[表1$] as 個人情報 LEFT JOIN [Excel 5.0;Database=≪エクセルのブックパス≫].[表2$] as 口座情報 ON 個人情報.名前 = 口座情報.名前 ちなみにExcel 5.0というのが2箇所存在していますが、Excel2000の場合です。 そちらの環境で正常に動いてくれなければ、6.0や7.0など、バージョン数値を変更してみてください。

その他の回答 (7)

回答No.8

>蛇足ですがAccessをインストすればExcelや他のDBにリンクするのは標準でセットされます。 蛇足ではありません。。。 しばらくインストール作業をしてなかったので、何が標準かわからなくなってました^^;;;;

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.7

>その時点ですでに名前の連結(結合線)ができており すでにリレーションシップでリレーションが出来ていればクエリにテーブル追加すれば結合線は表示されます。 リレーションは結ばれているという事です。 >その時点でデータシートビューを見ると行がひとつだけしかなく、以下がありません リレーションの結合で[両方のテーブルの結合フィールドが同じ行だけを含める]になっているためだと思います。 そして表1と表2には同じ名前が一つしかないという事です。(同じ名前を入力してあると思ってもスペースの入れ方などで違う値と判断されているため) 初心者の方には分かりづらいかもしれませんが1050YENさんが書いてあるSOLでコピペして試しにやってみるのも良いと思います。しかしクエリを開いても上記の事があるのでやはり1行しか表示されないと思います。 名前の値を適正化しないと取り合えずダメなのでは。 リレーションの結合をリレーションの編集で開き結合の種類を['表1'の全レコードと'表2'の同じ結合フィールドだけを含める]に変更してクエリを開いてみてください。 表1のレコードが全て表示されます。しかし表2のフィールドが空白の行が出てくると思います。 それは表1と表2の名前が合っていないためです。 >名前をキーにして結合させてアクセスにインポートしたいです 通常は名前はキーとして使いません。同姓同名がいた場合にどちらか名前だけでは判断できない等の問題が出ます。 蛇足ですがAccessをインストすればExcelや他のDBにリンクするのは標準でセットされます。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.5

2つのExcelのSheetをAccessのテーブルにリンクさせればそのままテーブルとして使えます。 テーブルリンクしたExcelのSheetをクエリで結合させれば使えます。 テーブルを作りたかったらそのクエリをテーブル作成にすればテーブルを作成できます。 こちらの方が簡単だと思います。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

#3のmshr1962です。 1.選択クエリで表1と表2のテーブルを追加する。 2.表1の名前をドラッグして表2の名前にくっつける。 ここで結合線が表示されます。 3.表示したい内容のフィールドをドラッグして、下のフィールド欄に設定する。 4.「並べ替え」や「抽出条件」を設定する。 5.クエリを保存して開く

0000ai
質問者

補足

追加文ありがとうございました。 選択クエリで表1と表2のフィールドを選択し、完了を押すと選択クエリの画面(?)が出ます。 その時点ですでに名前の連結(結合線)ができており、 さらに下の表には先ほど追加したフィールド全てがフィールド欄に書かれています。 その時点でデータシートビューを見ると行がひとつだけしかなく、以下がありません。 教えてくださったとおりにやりたいのですが以上のことが起きてしまい、 最後までたどりつくことができません。 どういうことなのでしょうか。 よろしくお願いいたします。

  • moon_myu
  • ベストアンサー率33% (39/118)
回答No.3

エクセルの方で、表引きVlookup関数を使って一つの表にしてから、インポートするのも手ですよ。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

EXCEL上で連結ならVLOOKUP関数で値表示させる。 ACCESS上ならテーブル作成後にクエリで2つのテーブルを 名前をキーに連結(表1.名前=表2.名前)すれば可能です。 このとき並び順は問題ありませんが、同姓同名がいる場合は問題があります。

0000ai
質問者

補足

すみません。 名前をキーにするの意味がわかりません。 クエリではテーブルやクエリからフィード選択してやっていくと思うのですが キーを指定する部分があるのでしょうか? よろしくお願いいたします。

  • laputart
  • ベストアンサー率34% (288/843)
回答No.1

別々にインポートして(テーブル)2つのテーブルをクエリーで 結合させる方法があります。(名前をキーにして) これはクエリー作成ウィザードで結合出来ます。 この場合リレーションシップに関しての知識が少しだけ必要ですが いかがですか。 2つの表の名前が完全に1対1に対応していればいいのですが もしどちらか一方しかない名前があった時はリレーションシップの 変更で対処します。

関連するQ&A