Accessでお仕事 区切り記号付きテキスト ファイルや固定長テキスト ファイルをインポートまたはリンクする

区切り記号付きテキスト ファイルや
固定長テキスト ファイルを
インポートまたはリンクする


 Accessでは、「外部データの取り込み」機能を使って、Excelやテキストのデータを取り込むことができます。

メモ   テーブルをリンクできるのは Access データベースだけです。Access プロジェクトではリンクできません。

重要   区切り記号付きテキスト ファイルまたは固定長テキスト ファイルのデータをインポートまたはリンクする前に、ファイルの各フィールドのデータが同じ型であり、各行が同じフィールドを含むことを確認します。

注:  CSV ファイルは、可変長ファイルです。下記のウィザードのプレビュー画面で表示されるデータは、ファイルの頭の25行のみなので、CSV をインポートする場合には、必ず事前に、各フィールドの長さを確認して、桁数を設定します。
 今回の事例では、「得意先」では「洋風居酒屋けい・えっくす」が、24桁で、最長ですが、ウィザードの画面にはあらわれてきません。
 インポート時にフィールドサイズを指定しないと、 Access は、自動でテキストフィールドに256桁を取るので、ファイルサイズが過大になります。

注:  テキスト インポート ウィザードで、
 ファイル内の 1 つまたは複数の行で、文字が多すぎます。インポートするファイルでは、1 行の文字が 65,000 以内でなければなりません。

 とエラーが表示され(Access 2003 または Access 2002 の場合)、
もしくは、何もメッセージが表示されることなく(Access 2000)、

 ウィザードが動きますが、テキスト ファイルのデータは、正しく表示されず、認識できない文字が表示されることがあります。
 これは、埋め込まれた Null 値を含む固定長テキスト ファイルに対して、データのインポートを実施した場合に発生します。
 下記のリンクにある、マクロを使って、事前にテキストファイルを変換します。そして、変換後のファイルをインポートすると、うまく取り込めます。
http://support.microsoft.com/kb/872914/ja

注:  Access のファイルサイズ制限のため、大きなファイルをインポートすると、「引数が無効です」と、エラーになる場合が有ります。
 Access は、Access 2007 を含め、「Access データベース (MDB) ファイル」は、ファイルサイズが 2GB 以上のものを作れません。
http://support.microsoft.com/kb/835416/ja
http://support.microsoft.com/kb/304932/ja
 Access 2007 の仕様
http://office.microsoft.com/ja-jp/access-help/HA010030739.aspx

外部データ インポートの手順

  1. 空の新しいデータベースを作ります。 通常は、まずAccessを起動して、新しい空のデータベースを作って、適当な名前を付けて、保存します。

  2. データベースを開くか、または開いているデータベースのデータベース ウィンドウに切り替えます。

  3. データをインポートするには、[ファイル] メニューの [外部データの取り込み] をポイントし、[インポート] をクリックします。

    データをリンクするには、[ファイル] メニューの [外部データの取り込み] をポイントし、[テーブルのリンク] をクリックします。

  4. [インポート] または [リンク] ダイアログ ボックスの [ファイルの種類] ボックスで、[テキスト ファイル (*.txt;*.csv;*.tab;*.asc)] をクリックします。

  5. [ファイルの場所] ボックスの右端にある下向き矢印をクリックして、ファイルが保存されているドライブまたはフォルダをクリックし、ファイルのアイコンをクリックします。

     今回の例では、order.csv を選択します。

    重要   ローカル エリア ネットワーク上のファイルにリンクする場合は、必ず UNC (汎用名前付け規則) パスを使用してください。Windows エクスプローラでマップされているドライブの文字は使用しないでください。コンピュータによっては、ドライブの文字が異なったり、定義されないことがあります。UNC パスを使用すると、リンクされたテーブルを含むデータ ソースを確実に見つけることができます。

  6. テキスト インポート ウィザードまたはテキスト リンク ウィザードで、画面に表示される指示に従って操作します。

    • CSVの場合は、「データ形式」で「区切り記号付き」のラジオボタンにチェックを入れて、「次へ」を押します。

    • フィールド区切り記号の指定
       フィールド区切り記号は、カンマとします。「先頭行をフィールド名として使う」にチェックを入れます。また、「テキスト区切記号」に「"」を選択します。(この例の場合は、「運送料」のデータが「"」で囲まれているからです。)

       詳細に設定したい場合は、左下の [設定] ボタンをクリックして、インポート/エクスポート定義を作成します。「インポート定義」がすでにできている場合は、選択して使用します。

    •  フィールドを次々に選択して、「データ型」を調整します。
       左下の設定ボタンを押して設定することもできます。この方が操作性がよいかもしれません。

       設定を繰返し使う場合は、この設定ボタンを使って設定結果を保存すると、次回から、「定義」を呼び出して使うことができます。

    •  特定の項目で、重複行を削除してインポートしたい場合は、そのフィールドを主キーに設定します。こうすると、インポート時にエラーを表示して、自動的に重複部分を排除することができます。

       データ加工に、Accessを使う場合は、「主キーを設定しない」を選択します。

       何か意味がある場合に限り、「主キーを自動的に設定する」を選択します。(私は推奨しません。)

    • 以上のインポート条件を、繰返し利用するために保存したい場合は、この画面で「設定」ボタンを押して、「インポート定義」を「保存」しすま。

    • フィールドの詳細設定 「テキスト型」で取り込んだデータの「フィールドサイズ」は、デフォルトでは、最大の256バイトになっています。
       このままで利用するには大き過ぎるので、「テーブル」の「デザイン」で、必要充分なサイズに減らすと良いでしょう。
注:  「テーブル」の「デザイン」で、フィールドサイズを変更しようとすると、

 データ型を変更できません。ディスクの空き領域またはメモリが不足しています。

となって、変更できない場合があります。

 これは、トランザクションに必要なページ ロック数が、レジストリ値 MaxLocksPerFile の設定値 (デフォルトでは 9500) を超過しているからです。
 MaxLocksPerFile の設定値は Windows のレジストリに格納されています。
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0
 Regedit.exe を使って、MaxLocksPerFile の値を、レコード件数に合せて、例えば 200,000 に変更すると、解消する場合があります。
 Access 2002 , 2003 での修正方法:
http://support.microsoft.com/kb/286153/ja
 Access 2000 での修正方法:
http://support.microsoft.com/kb/209940/ja

 これでもダメな場合は、テーブル定義をコピーして、項目サイズを変更したものを作っておいて、追加クエリで流し込みます。
 この方が速くて確実?

注:  テキスト インポート ウィザードでインポートすると、「空きメモリがありません」とエラーになる場合が有ります。
 ウィザードは、フィールド区切りに、自動で、過剰な「データ型」を設定するからです。
 エラーになった場合は、「設定」画面に戻って、データ型を必要充分なものに修正すれば、エラーは回避できます。
 例えば、数値の3桁以下の整数は、「長整数型」ではなく、「整数型」にします。浮動小数点の場合も、ゆるされるかぎり、「単精度浮動小数点」に修正します。

注: テキストが文字化け  テキストをインポートすると、文字化けすることが有ります。

 この場合は、設定で、「日本語」のコードページ「シフトJIS」か、「言語」すべての「ANSI」にして、やり直します。
文字コードを変更する

注:  テキスト インポート ウィザードでインポートすると、
オブジェクト '' が見つかりませんでした。オブジェクトが存在していること、名前やパス名が正しいことを確認してください。
とエラーになる場合が有ります。
 エラー・メッセージが、変ですが、フィールド設定が間違っている場合が有ります。
 私の経験では、テキスト型フィールドに、255 文字を超えるデータを格納しようとして、上記のエラーが出ました。
 データ型を、メモ型フィールドに変更して、無事インポートできました。

 以上で、Access 「Order」テーブルのでき上がりです。

インポート定義を編集する方法

 インポート定義を作った後、フィールドを後ろに追加することは簡単にできます。
 途中に挿入したい場合は、定義全体を、Excelにコピーして、Excelで編集して、Excelから貼り付けると簡単にできます。
 上のウィザードの画面で、フィールド名の左の角のセルをクリックすると、全体を選択できます。これをコピーして、Excelに貼り付けるのです。
 Excelで編集したものを、範囲選択してコピーして、また Access に貼り付けます。
 このテクニックは、下記の「インポート定義 にフィールド挿入」で教えていただきました。
http://www.accessclub.jp/bbs2/0052/beginter17154.html

http://office.microsoft.com/ja-jp/project/HP430079331041.aspx

 後日の参考のため、ファイルレイアウトを、Excelファイル出力しておくことをお勧めします。

メモ


文字コードをASCIIにすると日本語項目名は使えません

 私がハマった失敗談です。
 テキスト・ファイルをインポートするとき、インポート定義でASCIIを指定しました。
 そして、インポートの項目名に日本語を指定しました。
項目名に日本語を指定

 インポートされたテーブルでは、日本語項目名が ? になってしまいました。
日本語が??に化けている

 項目名に日本語を使いたい場合は、インポートする文字コードを Shift-JIS など、日本語を表示できる文字コードを指定します。

このページのトップに戻る↑ 次の項目を見る↓ Accessでお仕事 目次に戻る

ホームページのトップに戻る