こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Access2002でExcel2002のデータをインポートしようとした際に起こるエラー

予めExcel2002で作成したワークシート(名前付)に、Access2002から一度データをエクスポートします。
この時点では旨くいっています。
Excelに出力する理由は回帰分析等、いくつかの分析を行う為で、Accessがクエリに搭載していない関数を使用するためです。

ここで、分析結果を別シート(同一ブック内)で参照するのですが、この参照するセル範囲(名前付部分)をインポートすると実際にインポートしたいのは分析結果である数値なのですが、インポートできず「データ型の変換エラー」が発生します。

VBで書くことも検討したのですが、ロジックが大変ややこしくなることと、Excelへ出力した方が時間的に早いので、エクスポートした後、結果数値のみをインポートするという手順をとっています。

インポートしようとしているデータは(数値)(テキスト)(日付)(日付)(数値)(数値)(数値)(数値)の順で、1行目にインポートしたいデータを配置しています。

このAccessからExcelへデータをエクスポートし、ExcelからAccessへ関数の入っているセルに存在する結果数値のみを取り込む方法をお教え下さい。

よろしく御願いします。

投稿日時 - 2007-01-04 02:07:18

QNo.2641776

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

ここにエクスポート処理?
DoCmd.DeleteObject acTable, "分析結果テーブル"
DoCmd.TransferSpreadsheet acImport, 8, "分析結果テーブル", "C:\分析\分析シート.XLS", False, "分析結果テーブル"

DoCmd系の命令は非同期的に実行される場合がありますので500回の繰り返しの中で
順序が崩れる場合があるのでは?(500回の経験はさすがにありませんけど)

テーブルは削除しないで(削除・作成の繰り返しは問題発生の可能性が大きくなります)
CurrentDb.Execute("delete * from 分析結果テーブル") としてレコードを削除したら
どうなりますか?
さらに発生する場合は、ステップ実行した場合にエラーが出ないのならば
DoCmd.TransferSpreadsheet・・・の処理が済むまで時間稼ぎ?を
何とかしないといけないように思えます。

投稿日時 - 2007-01-05 13:03:20

ANo.4

インポートで失敗する時の対処法としては、1フィールドずつ数を増やすやり方が良いと思います。どのフィールドでエラーが起こっているのか把握する一番の近道です。
経験から言うと時間に関わるフィールドはエラーが出やすいと思います。またNullをスペに変えると入る場合もあります。
面倒ならば、全てをテキストにしてインポートするという荒業もあります。
どれか成功するでしょう。頑張ってください。

投稿日時 - 2007-01-05 03:16:23

ANo.3

対症療法的ですが、データをコピーして空のシートに「値」のみ貼り付けし
そこからインポート処理でどうなりますか?
それでも同じエラー(データ型変換)なら、長整数・倍精度浮動小数点・文字列
などのところで引っかかっているかと。

投稿日時 - 2007-01-04 20:48:54

お礼

回答ありがとうございました。

ご指摘の手順通りにインポートしましたが、正常にインポートできることを確認しましたのでエクセルの書式設定、アクセスのデータ型に起因する部分ではなさそうでした。

下の回答にも記入している通り、複数回処理を実行するプロセスで発生しているので、そこが大きな問題なのかどうか。。。

よく分かりません。。。

投稿日時 - 2007-01-04 22:55:49

ANo.2

NO1です
あとで元テーブルと結合出来るよう「新規テーブル」に保存でもうまくいきませんか。
私も今実際にセルに関数が入ったものをインポートしてみましたきちんと表示できました。
インポートする際、1行目はフィールド名としておいた方が良いでしょう。

投稿日時 - 2007-01-04 11:12:52

お礼

度重なる回答恐縮します。

実際には処理そのものはかなり多くのデータを扱ってるため1データについて以下の手順を繰り返し実行(VBA)しています。

(1)元データをAccessからExcelにエクスポート
(2)分析結果テーブル(Access側)を削除
(3)分析結果を分析結果テーブルとしてインポート
(4)クエリで別テーブルへデータを加工してADD

(1)~(4)の処理を概ね500回繰り返しています。

VBAで今回問題なのは(2)と(3)なのですが、ソースは以下の通りです。

DoCmd.DeleteObject acTable, "分析結果テーブル"
DoCmd.TransferSpreadsheet acImport, 8, "分析結果テーブル", "C:\分析\分析シート.XLS", False, "分析結果テーブル"


500回程繰り返すことに問題があるのかどうか…

一度データをエクスポートしたExcelのシートをインポートしようとするとエラーになるのですが、このExcelファイルを一度開けて上書き保存すれば、どういう訳かファイルのインポートからインポートはできます。がしかし、、、同じ処理をVBA(上記ソース)で実行するとすべてエラーで返ってきます。。。

どうしようもないのでしょうか。。。

投稿日時 - 2007-01-04 22:51:25

ANo.1

インポートしようとするテーブルをデザインビューで開き、各フィールドのフィールドサイズが、Excelに入っているデータが収まりきるのかを確認して下さい。
例えば、Excelに入っているデータ(テキスト)が20文字あるのに、テーブルのフィールドサイズでは10文字になっていれば、エラーとなって、該当レコードはインポートされません。

投稿日時 - 2007-01-04 02:25:04

補足

早速の回答有り難うございました。
もう少し詳しく書けばよかったのですが、Access2002の「ファイル」の「外部データの取り込み」にある「インポート」で実際にインポートしたいエクセルのファイルを指定すると「ワークシートインポートウィザード」が表示され、その中にある「名前のついた範囲」を指定しているのですが、この時点ですでに本来Excelで参照しているセルに入っているべきデータが表示されていない状況です。

これをExcel内の書式をすべて文字列にしてしまえば確かに問題は起こらないのですが、日付は日付として、数値は数値として、テキストはテキストとしてインポートしたいのですが、セルに関数が入っていると無理があるのでしょうか・・・

ちなみに、フィールドサイズは確認してみたのですが問題はありませんでした。

投稿日時 - 2007-01-04 04:04:48

あなたにオススメの質問