ExcelからAccessへのテーブルインポートでの主キーの問題

このQ&Aのポイント
  • Excelで作成したリストをAccessテーブルへ追加インポートする際に、主キーの数値が大きく桁違いになる問題が発生します。
  • 例えば、Accessテーブルのレコード数が10957件あり、主キーの一番最後の数字は10980番です。一方、Excelのレコード数は100件であり、追加インポートすると主キーの数値が10980以下のものが桁違いになってしまいます。
  • この問題はExcel2002とAccess2002のソフトウェアの組み合わせによって引き起こされるものであり、主キーの生成方法やデータのインポート設定に問題があります。
回答を見る
  • ベストアンサー

Excel→Accessテーブル インポート後の主キーについて

Excelで作成したリストを、Accessテーブルへ追加インポートしたとき、 インポートはできますが、主キーの数値が大きく桁違いな数字が現れてしまいます。 例えば、Accessテーブルのレコード数が10957件あります。 主キーの一番最後の数字は10980番です。(途中いくつか削除しました) Excelのレコード数は100件あり、これを追加インポートしますが、     10979     10980  85200513  85200514  85200515  85200516     ・     ・     ・ というように、10980以下の主キーの数値が、まったく桁違いになってしまいます。 どうしてこのようなことになってしまうのでしょうか? ソフトはExcel2002、Access2002です。

  • cusco
  • お礼率91% (104/114)

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

  • ベストアンサー
  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.4

えーっと、なんだか問題点が曖昧になってきましたね・・・ 1.インポートすると主キーが桁違いになる。 2.インポートすると年月フィールドがエラーになる。 1は通貨型かテキスト型にしたことで解決し、未解決は2だけでいいんでしょうか? 2004/04/01→2004年4月(yyyy"年"m"月") 2004→2004年(####"年") これらはそれぞれ、かっこ内の書式設定によってこのようにセルに表示されているだけであり、セルの値そのものは、数式バーに表示してある通りです。 (ただし、2004/04/01の方は、厳密に言えば本当はシリアル値といって、1900年1月1日を1とした、38078という数字が実態ですので、このセルを標準表示すると38078となったのはご承知の通りです。) そんな訳で、ACCESSには、数式バーに表示される値でインポートされるみたいですね・・・僕もそれ以上はちょっと今はわかりません(>_<) EXCELでの書式設定通りにインポートする方法は、調べれば多分あると思いますので、まずはACCESSのヘルプが、下記のMS技術情報などを見てみてください。 http://support.microsoft.com/default.aspx?scid=fh;JA;KBHOWTO 頑張ってくださいヽ(^。^)ノ

参考URL:
http://support.microsoft.com/default.aspx?scid=fh;JA;KBHOWTO
cusco
質問者

お礼

昨日会社をお休みしてたので、本日出社後、さっそくいろいろいじっていたところ、原因がようやくわかりました。 Accessの「年月」フィールドは、今はテキスト形式ですが、最初のころは日付/時刻型だったようです。 途中からテキスト形式に変更したため、いくつかのデータが 「2004年」のところを「2004」という表示のままになっていました。 つまりAccessは日付/時刻型としてデータが残っていたため、追加するExcelを文字列にしても 追加インポートでエラーが出る→主キーにも影響が出る ということになったようです。 早速Accessの10957件のデータを、一旦Excelへエクスポートし、 「年月」の書式を統一して再度Accessへインポートしたものに、 追加する100件のデータをインポートしたところ、成功しました。 最初にエラーについて記載していなかったために snoopy64さんに何度もご回答いただくことになってしまい、すみませんでした。 でも丁寧にアドバイスいただき、本当に助かりました。どうもありがとうございました。

その他の回答 (3)

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.3

#2の補足を見ました。 う~ん、何でしょうね・・・ インポート元のEXCELの方に、長整数型の有効範囲を超えるような大きな数字はないですか? 通貨型かテキスト型にするとどうでしょうか。 エラーメッセージにあるように、キーが重複しているのではないかと・・・確認してみてください。 ちなみに今、質問文を改めて読み返したんですが、85200513などのデータは、正しくインポートされたデータだったのですか?

cusco
質問者

補足

おっしゃる通り、インポートできたものの、あるフィールドについてエラーは出ています。 それは「年月」を入れているフィールドで、Accessテーブルではテキスト型に設定し、 元のExcelファイルでは「2004年4月」「2004年」と表示されています。 ただ気になるのは「2004年4月」のセルは、数式バーでは「2004/04/01」という表示になります。 セルの中と数式バーを同じ表示になるよう、文字列に設定してみましたが、 今度はセルの中が「38078」という数字になってしまいましたので、元に戻しました。 もしかしたらこのあたりがインポート・エラーの原因かもしれませんね。 実は元のExcelファイルは他の部署から送られたもので、 Accessへインポート後「2004/4/1」「2004」という表示になりますが、 うちの部署ではさほど重要なデータではないため、エラーが出ても無視してました。 しかし主キーに影響が出てくるのは、ひょっとしたらこれが原因かもしれませんね・・・。 作業は会社で行ってるため、この数日間は確認することができませんが、 来週出社したら、Excelの設定のほうをもう一度チェックしてみます。

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.2

#1です。補足ありがとうございます。 オートナンバーかそうでないかによって、以降の回答がかなり違ってくるので、まずはじめに確認させていただきました。 オートナンバー型をやめて、数値型(長整数型)にすれば現在のような現象は解消されると思います。 オートナンバー型は、レコードを追加するたびに自動的に1加算された数字が入ります。が、レコードを削除しても番号は自動的には詰まりません。 詰めるには最適化をすればよかったはずです。 頑張ってくださいヽ(^。^)ノ

cusco
質問者

補足

再度ご回答いただきありがとうございます。 オートナンバー型をやめて、数値型(長整数型)に設定しましたが、今度はインポートできませんでした。 「キー違反のため、0件のレコードのデータが失われ、100件のレコードが削除されました。  *データが失われたときは、貼り付けまたはインポートしたデータが、対象となるテーブルのフィールドのデータ型または"FieldSize/フィールドサイズ”プロパティと一致していません。  *レコード削除されたときは、対象となるテーブルにすれに存在する主キー値が貼り付けたレコードに含まれているか、テーブル間に設定されているリレーションシップの参照整合性に違反しています。」 というエラーメッセージが出ました。 Accessテーブルはこれ一つのみで、リレーションシップは関係ないはずですし、変更前はオートナンバー型で、フィールドサイズ:長整数型、新規レコードの値:インクリメント、インデックス:はい(重複なし) に設定してます。 また何かご存知でしたら、よろしくお願いします。

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.1

テーブルの主キーがオートナンバー型だとそうなるかも・・・未確認なので自信なしです(>_<)

cusco
質問者

お礼

たしかに主キーはオートナンバー型です。オートナンバー型以外に設定すれば直るものなのでしょうか・・・? 主キーのフィールドは、ただのレコードNo.なので、今のところ追加のインポートしたあと、 Accessテーブルの主キー解除&フィールド削除し、また新たにフィールド追加&主キー設定をしています。 なぜこんなことが発生してしまうのかがわかればいいんですが・・・ ご回答ありがとうございました。

関連するQ&A

  • ACCESSにインデックス(主キー)のあるテーブルを作りたい

    元データがEXCELでそのデータを利用し、 ACCESS内にマスター用(品目マスタ)のテーブルを作り、 1番目の部品コードというフィールドを インデックス/主キー(重複しない)にして 2番目、3番目の項目の値をえられるように しようとしていますが、EXCELからの元データを インポートしようとしても部品コードフィールドが インデックス/主キーに設定できません。 EXCEL内で部品コードが重複しないように削った つもりです。 部品コードが重複していなくても、いけない文字列 があってインデックス/主キーにできないのでしょうか? ※詳細 以下のようなテーブルをつくり、 284-A80と入力したら製品部品名称の「基板」と いう値や製品分類の「LED」という値を得ようと している。 部品コード    製品部品名称   製品分類 284-A80      基板        LED 7841P20      ヨーク       ブザー CL-270-CD     LED         LED HSDL-3201#001   センサー     センサー ……約17000レコードぐらい ただし、部品コードの値がもっとごちゃごちゃして いて、「*」、「スペース」「#」「_」「/」などや カタカナ文字のものも含まれていたりします。 なぜ、上記の部品コードをインデックス/主キーとして 設定をおこなったテーブルとしてインポート できないのですか?

  • Accessへのインポートについて

     Excelで作成したリストを、Accessのテーブルへ追加インポートした時、インポートはできるのですが、主キー(フィールド名はID、オートナンバーに設定)の数値がとんでしまって、大きな数値が入力されてしまいます。  ExcelのIDのセルには空白にしてあります。  そこで疑問なのは、うまくいく時といかない時があることです。  たとえば一つのリストをインポートしたら1~100までちゃんと連番で入るのに、次のリストをインポートしたら、100000~という風になります。  これは何が問題なのでしょうか。同じように設定・作業をしているのですが・・・。  よろしくお願いします。

  • テーブルの数値をほかのテーブルに更新していくのには?

    OS:Windows Xp Access Version:Access 2002 お世話になります。 毎日、CSVファイルの成績表が取得でき、それをテーブルにインポート後、ほかのテーブルに数値を加算していきたいと思っております。 テーブルの構成が仮に、 Tインポート用テーブル 社員ID テキスト型←主キー 実績  数値型 とあり、この実績の数字を T実績テーブルにある 社員ID 実績 の"実績"のフィールドに加算していきたいと思っております。 インポートされた「Tインポート用テーブル」の全レコードは「T実績テーブル」に加算後、 消去します。 当方、SQL構文にはいまだに不慣れでありますので、更新クエリ、追加クエリでの方法があればありがたいです。 乱筆、乱文ですがよろしくお願いいたします。

  • Access(アクセス)でのインポートについて

    テーブルのインポートでエクセルファイルをインポートしたいのですが「ワークシートインポートウィザード」の画面でテーブルを指定して保存すると 「Microsoft Access」の画面で「すべてのデータをテーブルに追加できませんでした。 キー違反のため、0件のレコードのデータが失われ、0件のレコードが削除されました。」と出てきて、保存できません。 もとのテーブルのデータ型を使ってインポートするにはどうしたらいいのでしょうか。よろしくお願いします。 インポートする元のデータ(エクセル)とインポート先(アクセス)の関係は次の通りです。 エクセルファイル    アクセスのテーブル (セルの書式設定)   データ型、フィールドサイズ --------------------------------------------- 数値          数値型、長整数型 文字列         テキスト型、16 インポートする前に元のエクセルデータをアクセスのデータ型に合わせただけではダメなのでしょうか

  • Accessのインポートについて(上書きと追加)

    Access2000を使用しています。 インポートについて教えて下さい。 あるテーブルにExcelデータをインポートしています。 「あるテーブル」の設定としましては主キーを設定して いて重複なしにしています。 実現したいこととしましては、Excelデータ上にAccessデータ(すでにあるデータ(主キー))があれば上書き保存して、なければ追加したいのです。 Access側        | Excel側 主キー フィールド1  |  列1  列2    A     ○      |   B   ○ B     ×      |   D   × C     ○      |   E   ×   つまり上記の表でAccess側Bデータのフィールド1の「×」 をExcelデータをインポートすることにより「○」に 変更(上書き保存)したいのです。 そして、Excel側D・EデータはAccessに新規レコードと して追加したいのです。 よい方法はないでしょうか? なお、私の知っている知識としましては、 インポートするとデータは上書き保存されずに 追加されてしまうということは知っているのですが。 以上、よろしくお願い致します。

  • Accessのテーブルへのデータインポートについて

    Accessのテーブルへのデータインポートについて Access2002で、A.mdbのTESTテーブルからB.mdbのTESTテーブル(構造は同じ)へテーブルデータをインポートしたいのです。 TESTテーブルの主キーはSEQ(オートナンバー)しかありません。 そのときに、コピー元とコピー先の主キーに重複があった場合、オートナンバーなので自動で再付番しデータが追加して欲しかったのですが、 Accessの機能のエクスポート、インポートでは、コピー先に主キーに重複があったデータは上書きされてしまいます。 テーブルを開き、データをコピー&ペーストしますと、ペーストしたときにオートナンバーで自動で再付番されます。 この方法でもいいのですが、データが数百万件あるので、現実的ではありません。 Accessのインポート・エクスポートで、オートナンバーで主キーを再付番してから、B.mdbのTESTテーブルにデータ追加する方法はないでしょうか? よろしくお願いいたします。

  • EXCEL→ACCESSインポートでセル内改行が機能しません・・。

    EXCELデータをACCESSにインポートする局面で、 ・EXCELデータのセルは、CHAR(10)によって、セル内で改行されています。 ・これをACCESSへインポートすると、改行が機能せず連続した文字列となってしまいます。 ・ACCESSの該当項目は、メモ型(文字数が多いので)です。 EXCELでの表示と同一の表示がACCESSで得たいのです。 よろしくご指導下さい。

  • 外部キーだけのテーブル(主キーがない?)

    データベースのテーブルについておたずねします. 主キーがなくて,そのかわりに外部キー(と主キー以外の列)しか持たない テーブルも可能だと聞きました. テーブルには主キーが必ずあるものだと思っていましたが, どのような使いかたをするのでしょうか. どうやら,最初からデータがあるわけではなく, 追加されるタイミングがわからないデータを格納する場合に作っておく, ということらしいのですが,なんのことかよくわかりません. データベース関連書籍をいくつか調べましたが, 主キーのないテーブルの説明などは見当たりません. また,この悩ましい問題を与えてくれた知り合いに訊ねましたが, テーブル構成などの具体的なことは, 企業内のことなので,教えてもらえませんでした. 何か具体的な例を交えながらご説明いただければと思います.

  • 1万件のレコードの追加方法、主キーは億単位で不規則

    テスト用のテーブルを作りたいと思っています。しかし、主キーの部分が実際とはかけ離れた状態になってしまいます。 フィールド数が複数あり、同じ値でも構わないので1万件分のレコードを追加したいです。 やり方としては、 <1>主キーのフィールド以外の全部のフィールドを作ってデータを入れます。 <2>そしてから、INSERT INTO `aaa` SELECT * FROM `aaa`を1万件超えるまで繰り返し実行。 <3>主キーのフィールドをauto_increment指定して追加します。 <4>1万を超えるフィールドを削除するためにDELETE FROM `aaa` WHERE id>10000を実行 ※実際には主キーにauto_incrementを入れません。 ※実際には主キーのデータは数千万~億単位(89234521や000455839)の数字(型はBIGINT)で、増加の仕方はまちまちです。 auto_incrementを使わず、数千万単位の数字で、増加の仕方もまちまちな主キーのデータを追加する方法はないでしょうか。

    • ベストアンサー
    • MySQL
  • ACCESS2003で、複数テーブルのある項目を一括して主キーにしたい

    アクセス2003で、1つのmdbの中に、同じデザインのテーブルがたくさんあります。 これらのテーブルには共通して「A、B、C、D」という項目があり、Dが数値型です。 既にテーブルにはデータが入力されています。(正確には、エクセルファイルから「TransferSpreadsheet」を使って同じ形式の複数シートを一気にインポートした状態です) 全てのテーブルに対して、一括してこのDという項目を主キーに設定したいのですが、どのようにすれば良いでしょうか? テーブル数は、200個程度あります。 VBAを利用したり、外部ツールを利用しても良いです。 ご教示、よろしくお願いします。

専門家に質問してみよう