- ベストアンサー
Access97 Excelファイルのインポートエラーと原因の調査方法
- Access97で既存のテーブルにExcelファイルをインポートした際にエラーが出る問題があります。原因となる作業を事前に禁止するために再現性を確認しています。
- インポートボタンを押した際に『ファイル○○にアクセスできません。ファイルの存在と形式を確認してください』というエラーが表示されます。同じように作成したファイルもインポートできるため、原因の特定が必要です。
- ワークシートインポートウィザードで『先頭行をフィールド名として使う』をチェックすると、『先頭行にAccessフィールド名に使用できない文字が含まれています。』というエラーが出ます。空白の列のインポートが問題の一因と考えられます。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
遅くなりました。 >解答No3の例でいきますと年齢より右の列は空欄です。 >私は空欄列はインポートされないと思い込んでおりました、 >結果として4列目と5列目がフィールドとして認識され、 >質問内容のエラーがでました。 >ご解答からですと空欄の列をインポートするような設定? >があるということでしょうか。Excelデータ作成者が >無意識にその設定をしてしまったがために、 >起こったと考えられる・・・ということでしょうか。 >その場合、どういった設定が考えられますでしょうか。 たとえば、何らかのマクロで4列目と5列目に改行コードが 設定されていたりすると見た目には何も入力されていない ようであっても改行ということが設定されていると空欄 ではないと見なされます。 4列目と5列目に計算式の設定バーで以下を設定してみてください。 =CHAR(10) あるいは、30列目と31列目には何も入力されいないとして、 4列目と5列目に計算式の設定バーで以下を設定してみてください。 =A30&CHAR(10)&A31 保存してみると、4列目と5列目には見かけは何も入力 されていません。しかしAccessからインポートしようとすると、 何も入力されいないはずの4列目と5列目が対象のフィールド として認識されてしまいます。 上記のCHAR(10)は改行コードです。 つまり、 空欄 + 改行コード + 空欄 = 見た目は空欄 まあ、意図してこのようなことをするとは思えませんが、 トリックのようなものですが、このようなこともありえます。 あるいは、空欄のセルで[Alt]キー+[Enter]キーを押すとセルが 下に拡張されますが、見た目は何も入力されていません。 しかしながら改行されたセルはデータがあると認知されます。
その他の回答 (5)
- piroin654
- ベストアンサー率75% (692/917)
>ファイル→外部データ取込→インポートからインポートするExcelを選択し、 >インポートボタンを押した後、ウィザードの操作は『指定したファイルには >複数のワークシートまたは範囲が含まれています・・・』でワークシートを >選択し、次へ。先頭行をフィールド名として使うをチェックすると、 >『先頭行に Accessフィールド名に使用できない文字が含まれています。』がでます。 というのは要するに先頭のフィールドに空欄があったり するからだと思いますが。追加でインポートする場合、 空欄はフィールド名にはできません。 また、エラーが出た状態でウィザードをいろいろ操作すると Accessがエラー回避の操作をして思わぬデータの取り込みを することもあります。 表示されるエラーはイレギュラーな操作である、ということ ですから、エラーの内容をよく読んでください。エラーが 起こるであろうという予測のもとにウィザードを操作するのは いいのですが。 >ただ、Nullや空欄のセルは取り込んで欲しい範囲にはないので・・・。 ということであれば、正常に入力されたExcelシートを通常の 仕方でAccessにインポートすればいいのでは、と思いますが。 いろいろ試すもいいのですが、正常な扱いをすればエラーが 起こることは、まずありえないと思います。 バージョンは違いますが、以下にウイザードを使った インポートの仕方が述べてあります。また、Accessのヘルプにも あると思います。 http://office.microsoft.com/ja-jp/training/RZ010272247.aspx
お礼
ご解答ありがとうございます。 すみません、Nullや空欄のセルは取り込んで欲しい範囲にないので・・・という点について、私の認識不足かもしれません・・・。 どんな設定でも空欄の列はインポートされない、と思い込んでおり、作成されたExcelデータが正常であると思い込んでいたのかもしれません。 >先頭のフィールドに空欄があったりするからだと思いますが。追加でインポートする場合、空欄はフィールド名にはできません。 とご解答いただいたのですが、そもそも空欄列はインポートされるのでしょうか。 解答No3の例でいきますと年齢より右の列は空欄です。私は空欄列はインポートされないと思い込んでおりました、結果として4列目と5列目がフィールドとして認識され、質問内容のエラーがでました。 ご解答からですと空欄の列をインポートするような設定?があるということでしょうか。Excelデータ作成者が無意識にその設定をしてしまったがために、起こったと考えられる・・・ということでしょうか。 その場合、どういった設定が考えられますでしょうか。
- piroin654
- ベストアンサー率75% (692/917)
>なお、ご解答いただいたように例を書くと下のような状況です。 >名前 住所 年齢 >田中 東京 24 >山本 大阪 41 >佐藤 長野 35 >鈴木 東京 28 >となっていたときに、4列目、5列目にフィールド名が割り当てられます。 >また、6行目がレコードとしてインポートされてしまいます。 この部分については、インポートするときにウィザードを どのように操作されたのかわからないので何とも言えませんが。 一般的に、ExcelのファイルをAccessにインポートするときに Excelのファイルが一つならば手動でするのが簡単で、なおかつ ミスもすぐに判明できるでしょうが、ファイルの構造が同じで、 ファイル数がかなりあり、定期的に行なうルーチンワークならば、 手動によるミスをなくすためにもVBAを使って、インポート作業 をするのがいいのでは、と思いますが。VBAならば、複数の ファイルのデータを一つの操作ですべてテーブルに格納できます。 たとえば、 http://okwave.jp/qa/q7581632.html は複数のAccessファイルのテーブルデータを一つのCSVへエクスポート する場合ですが、質問はこれと似たような感じです。
お礼
ご解答いただき、ありがとうございます。 ウィザードの操作は補足に記載させていただきました。 今回のAccessは様々なデータを1つのCDをキーとして集約するのに使用しています。集約したものをエクスポートし、他のDBへ取り込む想定です。 ファイルの構造がそれぞれ異なり、今回のみの使用Accessで、ファイル数も十数個と手動でできる範囲ではあるので手動でインポートをしておりました。(インポートミスがないかは確認する必要がありますが、チェック可能な作業量として判断しております)。 VBAによる操作につきましては、今後の参考にさせていただこうと思います。
補足
ファイル→外部データ取込→インポートからインポートするExcelを選択し、インポートボタンを押した後、ウィザードの操作は『指定したファイルには複数のワークシートまたは範囲が含まれています・・・』でワークシートを選択し、次へ。先頭行をフィールド名として使うをチェックすると、『先頭行にAccessフィールド名に使用できない文字が含まれています。』がでます。
- piroin654
- ベストアンサー率75% (692/917)
No1以外に >(2)ファイル→外部データ取込→インポートからインポートする >Excelを選択し、インポートボタンを押した後、ワークシート >インポートウィザードで『先頭行をフィールド名として使う』 >をチェックすると・・・・・・・ という操作で >どういった作業をすると、空白の列や行がインポート >されるようになってしまうのでしょうか。 とうのはあまり思いあたりませんが、上記以外だと、たとえば、 、 Excelの第一行が、名前、住所、年令となっていて 二行以下にデータがあるとします。 たとえば、以下のように第一行の名前が記述されていない場合、 住所 年令 田中 東京 23 佐藤 名古屋 56 西田 大阪 89 AccessでテーブルリンクでExcelのSheetをテーブルとして リンクし、そのとき「先頭行をフィールド名として使う」 のチェックをはずすと、 F1 F2 F3 住所 #Num! 田中 東京 23 佐藤 名古屋 56 西田 大阪 89 のように表示されますが、一応これでもテーブルとして 認知されます。F3の第一行が#Num!とされるのはF3が数値 のフィールドとしてAccessで判断したからでしょう。 「年令」は文字列で以下は数値なので#Num!というような 表示になったのでしょう。 テーブルとして認知されても上記のようなデータだと どうしようもありませんが。 その他は、VBAを使ってDAOなりADOなりでExcelのデータを 取り込めば、NUll値もデータとしてテーブルに取り込みます。 よほど、Excel側に手の込んだマクロでも仕込んでいない限りは 以上の感じですが。
お礼
ご返答ありがとうございます。 なるほど、テーブルとして認知される部分に空欄がある・・・という意味合いでしょうか。 ただ、Nullや空欄のセルは取り込んで欲しい範囲にはないので・・・。 また、VBAなども使用しておりません。 参考に引き続き調査してみます。 ありがとうございました。 なお、ご解答いただいたように例を書くと下のような状況です。 名前 住所 年齢 田中 東京 24 山本 大阪 41 佐藤 長野 35 鈴木 東京 28 となっていたときに、4列目、5列目にフィールド名が割り当てられます。 また、6行目がレコードとしてインポートされてしまいます。
- chayamati
- ベストアンサー率41% (260/624)
Access97へインポートするExcelファイルの形式は決まっているのではないでしょうか 決まっている形式をテンプレート(雛形と呼ぶのでしょうか)を利用してはいかがでしょうか このテンプレートには、エクセルファイルで使われる入力規則を組み込み 見出し項目等のセルにはロックをかけ書き換え禁止にします。 1.テンプレートの作り方 1-1.見出し項目等固定項目のみを入力します。 1-2.入力が必要なセルに入力規則を適用します。 入力規則には日付のみ、指定文字列のみとかの制限ができます(添付図) 全角/半角の切り替えも可能です。 1-3.テンプレートとして保存 [ファイル]→[名前を付けて保存]→[ファイルの種類の右端の▼でテンプレート]→ 2.登録したテンプレート呼び出し [ファイル]→[新規作成]→[登録したテンプレートの一覧が出ます]→ これで通常のエクセルファイルが表示されます。 蛇足 エクセルファイルは通常三つのシートが用意されますが使わないシートは 削除しておきましょう。
お礼
ご返答ありがとうございます。 なるほど、テンプレートをこちらで配布すれば確かに制御がかけられそうですね・・・。 解決策の1つとして、参考にさせていただきます。
- piroin654
- ベストアンサー率75% (692/917)
(1) ブックにパスワードが設定されている場合など。 (2)先頭行に空白のセルがある場合は、メッセージが出ても そのまま続行し、「先頭行をフィールド名として使う」 のチェックをはずせば新規テーブルにフィールド名は フィールド1、フィールド2・・・のようにしてインポート されます。
お礼
早速のご解答ありがとうございます。 (1)に関して注意点として参考にさせていただきます。ただ、パスワードの設定や読み取り専用にはしていないので、今回の場合は異なるようです。 (2)に関しては、確かにチェックを外せばフィールド1、2でインポートすることができました。対応として参考にさせていただきます。 今後の作業において大変参考になりました。 ありがとうございました。 引き続き、原因として考えられる点がありましたらご教授のほどよろしくお願い致します。
補足
質問者です。 当方でもいろいろ試しておりましたところ、(1)に関して再現することができ原因と思われる作業が分かりました。 原因はシート名が長すぎたため、のようです。 情報不足でしたが、Excelは2003を使用しており、インポートできなかったファイルにはシート名が半角で31文字以上ついているものがありました。 シート名を削って見たところ問題なくインポートできましたし、他のインポートできたファイルと比較しても確かにシート名の文字数でインポートできるできないが分かれておりました。 お手数をおかけいたしました。 引き続き(2)に関しまして、ご教授のほどお願い致します。
お礼
ご解答ありがとうございました。 ご指摘いただいたとおり、改行が入っている列がありました。 最終的に送ってもらうときに作業者がExcelを調整しますが、その際に消し忘れていたようです。 また、書式設定されているセルがあるとたとえ空欄でもインポートされてしまうようでした。 こちらも作業者がそのExcel上で色々作業をしており、最終的に送っていただくときにExcelを調整する際、列や行の削除ではなく、デリートキーなどで文字だけを消したために発生したようです。 結論として、データ調整に必要な作業なので作業者の作業内容を禁止するのではなく、最終的なデータを送っていただいた後こちらでチェックをかける、という方法で対応したいと思います。 なんどもやり取りさせていただき、大変申し訳ありませんでした。 今後の参考になりました。 ご教授いただきありがとうございました。