• ベストアンサー
  • すぐに回答を!

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

お世話になります。 ※再投稿となります。 Access2010のExcelインポート時の制限につきまして、ご教授頂けたらと思います。 現在、VBAにてExcelをインポートし(※)、その後、SQLサーバーへエクスポートする処理を行っておりますが、Excelの「備考」の文字数が多くなってきた為、途中で文字が切れないよう修正することとなりました。 上記(※)の処理では予めローカルに空のテーブル(temp)を作成し、そこにExcelデータをインポートしております。  DoCmd.CopyObject "", "temp", acTable, "tempcopy"  DoCmd.TransferSpreadsheet acImport, 8, "temp", strFile, True tempはtempcopyをコピーして作成しており、今回tempcopyの「備考」をテキスト型からメモ型に変更しました。 これにより「備考」の文字は途中で切れなくなりました。 ※当該mdbはAccess2003にて作成。 しかし、このmdbをAccess2010で実行すると、文字が途中で切れてしまいます。 Access2010は2003とインポート時の仕様(制限)が異なるのでしょうか?その場合、どのようにすれば文字列が途中で切れずにインポートすることが出来るようになるのでしょうか。 以上、宜しくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数9450
  • ありがとう数1

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

  • ベストアンサー
  • 回答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では無いですね。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • AccessでExcelデータをインポート

    お世話になります。  Access2003/2010  Excel2003/2010 10年程前より、Access2003で作成したツール(Excel2003形式のファイルを インポート)を利用しております。 Excelファイルは毎日追加/更新しているのですが、先日、とうとうExcel2003 の行の上限である65,536行を超えてしまいました。 今後はExcel2010形式のファイル(行の上限は1,048,546行)とし、かつ、 2010形式のファイルをインポートできるようツールの修正をしなければならなく なりました。 ツールの修正というよりは、今までAccess2003上で使用していたので、そのまま Access2010上で使用したいだけなので、修正が必要がどうかも分からない 状況です。 そこで2点質問ですが、  1.現状インポートする際は、   DoCmd.TransferSpreadsheet acImport, 8, "temp", strFile, True   としておりますが、「8」の箇所は2010形式のExcelをインポートする場合   どのように修正すればよいでしょうか。   ヘルプを見ても8(Excel2000形式)までの記載しかありません。   とりあえず8のままExce2010形式で、かつ2003の行の上限を超えている   ファイルを(66000行)インポートしてみましたが、行は削れることなく   インポートできました。  2.インポート時の文字数制限について   インポートするExcelファイルの「備考」フィールドは文字数が多いのですが、   Access2003上で使用すると全ての文字列(750文字程度)をインポート   できておりました。   しかしAccess2010上で使用すると、文字列が途中で切れる(255文字)   不具合が発生しました   インポートする際は、あらかじめテーブルを作成しておき、そこに対して   Excelのデータをインポートしております。なお、「備考」のデータ型は   メモ型です。   (255文字で切れることから)恐らくAccessがインポートする時点で「備考は   テキスト型」と判断しているから255で切れてしまうのではないか、で、切れた   文字列をメモ型に入れてるだけのように見受けられるのですが。。   2003から仕様が変わってしまったのでしょうか。   上記のことから、インポートするExcelの先頭行の「備考」に、適当な文字列   (750文字)を入力し、それをインポートすると途切れることなくインポート   できました。   ※Accessがメモ型と認識したから? ※いずれもツールをAccess2010上で使用した状況です。 ご教示の程、宜しくお願い致します。

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

    お世話になります。 Access2010 Excelインポート時の仕様についてご教示下さい。 フォーム上に「インポート」ボタンを設置し、ボタンを押すと ファイル選択ダイアログが表示され、そこで選択されたファイルを インポートしています。 DoCmd.TransferSpreadsheet acImport, 10, "temp", strFile, True ※strFileはダイアログにて選択されたファイルのパス インポートする前に事前にテーブルを作成しておき、そこに Excelのデータがインポートされます。 事前に作成しておくテーブル(temp)のデータ型は以下の通りです。 ID オートナンバー 契約開始日 日付/時刻型 契約終了日 日付/時刻型 案件名   テキスト型 価格    テキスト型 ※Excelの「価格」は通貨型となっておりますが、いくつかのセルに  文字列が入力されている為、テキスト型としてます。 <質問> インポートすると、「価格」フィールドにてデータ型の変換エラーが 発生します。エラーテーブルを確認したところ、Excelの「価格」に 文字列が入っている行でした。 予めテキスト型を用意しておいても、文字列の行はエラーとなって しまいます。なお、価格(数値)が入力されているものは、文字列として インポートされています(左詰めになっている)。  100000  50000  10000  80000   ・  50000  空白  ← 本来は文字列が入力されている。 予めテキスト型を用意しておいたとしても、インポート時の仕様?で 先頭から数行が数値なら数値フィールドと認識されてしまって、 文字列が削れ落ちてしまうのかなと。 ちなみに、インポートするExcelの先頭行の価格を「'100000」にして インポートしたところ、ちゃんとインポートはできましたが、 2行目以降は¥マークも含めた文字列でインポートされてしまいました。  100000  ¥50000  ¥10000  ¥80000   ・  ¥50000  文字列 どうにか対処する方法はございますでしょうか。 以上、宜しくお願い致します。

  • インポートの上書

    アクセス2003で DoCmd.TransferDatabase acImport, "Microsoft Access", "C:\DATA\データ.mdb", acTable, "データ", "データ"を実行してテーブルをインポートしましたが 実行する度にテーブルが データ データ1 データ2と増えていきます 上書させるにはどの様にすればよいでしょうか

その他の回答 (1)

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

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • ゾンビエクセル・・・(ExcelVBA)

    ExcelのVBAからAccessを起動し、エクセルファイルのインポートを行っています。 この処理を行うと、その後エクセルを閉じてもプロセスにエクセルが残ってしまいます。 なぜこうなってしまうのか判りません。よろしかったら教えてください(><) 一応コードを書いてみます。TransferSpreadsheetのコードを実行しない場合はゾンビエクセルは残らないので、それが原因だとは思うのですが他の方法がわかりません。 よろしくお願いいたします。 Dim appAccess As Object Dim acImport, fname As String, ffname As String acImport = "acImport" fname = ThisWorkbook.Path & "\取込.mdb" ffname = ThisWorkbook.FullName Set appAccess = CreateObject("Access.Application") appAccess.OpenCurrentDatabase fname appAccess.DoCmd.TransferSpreadsheet , 8, _ "torikomi", ffname, True, "torikomi" Set appAccess = Nothing

  • ACCESS VBAでのインポート

    アクセスでエクセルのファイルをインポートするVBAを書いています。 まず、フォルダ内のファイル名を全て取得してコンボボックスで表示します。 そのコンボボックスからインポートするファイルを選択し、インポートします。 ところが、インポートしようとすると「実行時エラー'3011'」となり、オブジェクトが見つかりませんとなってしまいます。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "氏名順_仮", Me.shimei_folder.Value & "\06.6.1氏名順.xls", True このように記述するとキチンとインポートするのですが、 path = Me.shimei_folder.Value & "\" & CStr(Me.shimei_combo.Value) DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "氏名順_仮", path, True これだと3011エラーになってしまうのです。 エラー表示が「オブジェクト"06.6.16氏名順$"が見つかりません」となるのですが、.xlsが$になってしまうのが原因??とも思います。 コンボボックス上は「06.6.16氏名順.xls」と表示されているし、デバッグしてみてもMe.shimei_combo.Valueは「06.6.16氏名順.xls」なのですが・・・。 どなたか、解決方法がわかれば教えて下さい。 ちなみにACCESS、EXCELともに2000です。

  • [PG]AccessVBAでファイルのインポートする方法

    [PG]AccessVBAでファイルのインポートする方法 VBAでエクセルファイルのインポートする機能を実装しています。 下記のコードで実行しますと実行時エラー"3011"が表示され DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange で止まります。何か解決方法を教えていただけないでしょうか? Function ExcelDataImport() 'On Error GoTo エラー Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String ' --- Accessテーブルを指定します。存在していなければ自動的に作成します。 varac = "tbl_売上げテーブル" ' ---Excelファイルを指定します。必ず、存在していなくてはいけません。 varxls = "C:\売上げ.xls" ' --- データ入力のシート名とセル範囲を指定します。 ' なお、省略が可能です。省略した場合は、ワークシート全体がインポートされます。 strrange = "売上げシート!A1:D10" strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & _ "へ、データ入力を行います。" & Chr(13) & _ "Excelファイルの入力レンジは、 " & strrange & " です。" ' --- DeleteObjectメソッドを用いて、tbl_売上げテーブルを削除します。 ' --- TransferSpreadsheetメソッドを用いてデータをインポートします。 DoCmd.DeleteObject acTable, varac If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange MsgBox "データ入力は、正常に完了しました。" End If Exit Function

  • ACCESS2000でExcelから特定フィールドをインポートしたい

    ACCESS2000でExcelから特定のフィールドをインポートしたいのですが、 うまくいきません。 Excelはフィールド数が254フィールドもあり、 テーブルにインポートしたいフィールド数は30フィールドです。 Excelでは特定フィールドをインポートすることができないようなので、 一時テーブルに全てのフィールドをインポート後 必要なフィールドだけ取り出そうとやってみたのですが、 以下のコードを実行すると、13のフィールドが「解析不能なフィールド」と インポートエラーが出てしまいます。 DoCmd.TransferSpreadsheet acImport, 8, "TEMPテーブル", "c:\data.xls" また、Excelファイルをcsv形式に変換して、インポート定義を作る方法も やってみたのですが、インポート定義作成時に 「フィールド'ID'はインポートまたはエクスポートしようとしている テーブルまたクエリに存在しません」 というエラーが出てしまいます。 どうしたらインポートできるでしょうか。よろしくお願いします。

  • Access から Excelのシートをインポート時エラー

    Access の既存のテーブルにExcelのスプレッドシートからデータをインポートするため次のコマンドを実行すると、 F1フィールドがない旨のエラーメッセージが表示されます。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "アクセスのテーブル名", "インポート元のエクセルファイル名.xls", False ここで、F1フィールドとは何でしょうか。 Excelのシートの1行目にAccessのテーブルの項目名と同名の項目名を挿入しておけば、上のコマンドの最後の引数をTrueにすればインポートは成功します。項目名のないスプレッドシートはインポートできないのでしょうか。 ご存知の方、教えてください。

  • AccessからVBAでExcellシートのインポート

    すみません。教えてください。 AccessVBAでエクセルのシートをインポートしたいのです。 いつも同じ行数ではありませんのでrange指定を埋め込むわけに行きません。 DoCmd.TransferSpreadsheet acImport, , "給与データ報告書", "c:\test\test.xls", True, "a1:p6000" でインポートできるのですが DoCmd.TransferSpreadsheet acImport, , "給与データ報告書", "c:\test\test.xls", True, "" range指定をしないとエラーになります。(出来ると書いてあるが) sheet1、ワークシート名とかの指定が出来ればと思い、いろいろ試してみたのですが出来ません。 宜しくお願いいたします。

  • EXCELファイルからACCESSへインポート

    質問させていただきます。 ACCESSのフォームから、EXCELファイルを選択してEXCELの内容を、 テーブルにインポートさせたいのですが。以下の方法で行って いるのですが、テーブルに反映されません。 Private Sub cmd_Import_Click() Dim InitialFileName As String Dim varTitle As Variant Dim FileName As String InitialFileName = "hoge.xls" varTitle = "ファイルを開く" FileName = GETHOGEOPEN(varTitle, InitialFileName) DoCmd.SetWarnings False DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "T_HOGE", FileName, True DoCmd.SetWarnings True MsgBox "完了しました" End Sub ACCESS → ACCESS2003 SP3 EXCEL →EXCEL2003 SP3 よく見ると、すでにEXCELのバージョン指定が違う(汗) これが原因かも・・・・(汗) わかる方がいらっしゃったら教えてください。

  • エクセルからアクセスにインポートする際のエラーについて

    こんにちは。 エクセルで作成された従業員台帳を、アクセスにインポートしたいのですが、エラーが出て困っています。 インポートの為のフォームを作り、参照ボタンでそのエクセルファイルを選択してフルパスを取得し(こちらの動作はOKです)、実行ボタンでそのファイルをインポートする、という方法をとろうと思います。 transferspreadsheet で、エクセルのファイル(.xls)は問題なくいくのですが、csv形式のファイルを指定して同じようにインポートすると、 実行時エラー 3274 外部テーブルのフォーマットが正しくありません。 となってしまいます。 書いているコードは、 DoCmd.TransferSpreadsheet acImport, 8, "従業員台帳(アクセス側でのテーブルの名前)", "上記画面で取得したフルパス", True(一番上の項目をフィールド名として使用します), "" です。.xlsでも.csvの形式でもインポートできるようにしたいのです。 環境は、winXPpro、Access2000、Excel2000 です。 よろしくお願いします。

  • Access Excelインポート時の制限について

    お世話になります。 Access2010 Win7Pro Excelファイルのデータをインポートし、それをSQLサーバーへ エクスポートするツール(Access)があります。 例えば、Excelに「ID」と「メモ」というフィールドがあり、1500行 あったとします。 また、メモには100文字程度の文字列が入力されています。 それをインポートすると、問題なくメモの100文字はインポートできます。 但し、1000行目のメモに500文字入力されている場合、それを インポートすると255文字に削られてしまいます。 これはインポートするときに、先頭から数行がチェックされて データ型が自動的に決められる為、上記のケースだとテキスト型に なってしまい1000行目のメモは255文字に削られている・・・ ということだと思います(仕様)。 なので、現状はExcelをインポートする前に先頭行のメモを255文字 以上入力した状態でインポートし、SQLサーバーへエクスポート後 テーブルの先頭レコードのメモより不要な文字(追加して入力した分)を 削除しております。 当該ツールを使って、インポート⇒エクスポートするのは日々の作業なので 毎回メモに文字を追加して、あとで削除するというのが手間でなりません。 なにかよい方法はございますでしょうか。

  • access97で作成したエクセルインポート機能がaccess2003で機能しません

    お世話になります。 下記ご経験ある方いらっしゃいましたら、教えていただけないでしょうか? Access97で開発されたあるシステムがあります。 これをAccess2003で使用したいと考えています。 データベースの変換は問題なく終了し、プログラムエラーも発生していないのですが、実行するとエクセルのインポートができていないことがわかりました。 ソースの該当箇所は以下のようになっています。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97, "Trtry", "\\jpn\test\マスタ.xls", True (ある共有フォルダ上で管理しているエクセルを読み込みます) 試してに"acSpreadsheetTypeExcel97"の部分を変更してみたところ、以下のような状況でした。 (1)"97"の部分を"5"~"9"に変更したところ、現象は回避せず。 (2)"97"の部分を"3"~"4"に変更したところ、インポートはできたが、文字化けが発生してしまう。 ここで行き詰ってしまい、困っております。 宜しくお願い致します。