• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【再】AccessでExcelインポート時の制限)

【再】AccessでExcelインポート時の制限

このQ&Aのポイント
  • Access2010のExcelインポート時の制限について質問があります。
  • VBAにてExcelをインポートし、その後、SQLサーバーへエクスポートする処理を行っています。
  • Excelの「備考」の文字数が多くなると、文字が切れてしまいます。対策はありますか?

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

XLS、Access2002、2010で検証してみました。 なんとも納得のいかない結果になりました。 (私の調べ方が拙いのかもしれませんけど・・・) ご質問と同様にあらかじめメモ型のフィールドを含むテーブルを用意。 http://office.microsoft.com/ja-jp/access-help/HA001219419.aspx ではExcelファイルをインポートする際に最初の8行をスキャンし データ型の決定を行う・・となっています。 そこで、まず、2~26行目まではText型(255文字以内) 27行目に初めてメモ型(300文字)のデータをセルに入力。 Docmd.TransferSpreadSheet ・・を実行 結果 2002→何故か切れていない 2010→切れている では、27行目のデータを2行目にコピペし保存し実行 結果 2002→切れていない 2010→やっぱり切れる?? ならば、レジストリを開いて、TypeGuessRows を検索 http://support.microsoft.com/kb/968580/ja Windows7 & Office2010では少なくとも二か所見つかるはずです。 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel 其々のTypeGuessRowsの値を0(ゼロ、フルスキャン)に変更。 2010でも切れることはなくなりました。 なんとなくバグの匂いがします。 レジストリの値を変更するのに抵抗が有る場合は Excelファイルをオートメーションで開いて、各セルの値を順次 Accessのレコードに追加するVBAを作成すれば出来るような気がしますが 未検証です。 以上、ご参考まで。 追伸 Access2010の外部データタブ→Excel でウィザードで進めていって 途中でデータ型の指定を行ってインポート。 この際に最後の、「インポート操作の保存」を行えば 次回からは、「保存済みのインポート操作」から行えます。 CSV や TXT ファイルは「インポートの定義」を保存すれば Docmd.transferText ・・・でインポート定義名(SpecificationName)を 利用できるのですが、TransferSpreadSheetでは無いですね。

naoto0216
質問者

お礼

ご回答ありがとうございます! お返事が遅くなり申し訳ございません。 検証までやって頂いたんですね。 当初、インポート定義をやればいけると思ったのですが、Excelでは定期出来ないことが判明し、どうしようか悩んでいたところです。 あと、インポートするExcelは約4万行で100列ほどあるデータなので、順次レコード追加も厳しい状況かと。 まずは教えて頂いたレジストリの修正で、切れずにインポート出来るか試してみたいと思います。 色々ありがとうございまいました。

その他の回答 (1)

  • OKNeko
  • ベストアンサー率66% (42/63)
回答No.1

問題の原因を切り分けてみましょう。 手動でインポートしても同じ結果になる>>Access2010は2003とインポート時の仕様の可能性あり、手動でインポートできる方法をまず探>>VBAに置き換える 手動でインポートすればOK>>Access2010は2003と VBAで仕様が違う>>対応コードを探す *エクセルの元ファイルが開いてるインポートがうまくいかないことがある *インポートできない場面で共通の特徴はありませんか? 特定の文字列? 改行コード 等