複数csvファイルのデータをACCESSのテーブルにインポートする方法

このQ&Aのポイント
  • 1,000個以上のcsvファイルをACCESSのテーブルにインポートする方法をVBAで作成したいです。
  • インポートする際には、各フィールドに適切なデータ型を指定する必要があります。
  • 現在試用しているACCESS 2003では、ファイル名を取得できないため、他の方法を探しています。
回答を見る
  • ベストアンサー

複数csvファイルのデータとファイル名をひとつのACCESSのテーブルにインポートしたい

1,000個以上のcsvファイルを、C:\tool\csvfiles\に格納し、C:\tool\にあるACCESSファイルのテーブル、「importfiles」にインポートするプログラムをVBAを作成したいです。 条件は、以下を満たしたいです。 ・1番右のフィールドにファイル名を追加したい ・それぞれのフィールドについて、データ型を指定したい ■CSVファイルのサンプル ファイル名(1):0009_xxx_0001.CSV データ内容(1): 部署コード 請求コード 日時  料金 0001   1234   090730 100 0001   1235   090730 150 ファイル名(2):0009_xzy_0002.CSV データ内容(2): 部署コード 請求コード 日時  料金 0002   2234   090730 100 0002   2235   090730 150 ■ACCESSでやりたいこと テーブル名:importfiles データ内容: ファイル名     部署コード 請求コード 日時  料金 0009_xxx_0001.CSV  0001   1234   090730 100 0009_xxx_0001.CSV  0001   1235   090730 150 0009_xzy_0002.CSV 0002   2234   090730 100 0009_xzy_0002.CSV 0002   2235   090730 150 データ型は料金は料金は数値型、それ以外はテキスト型です。 ACCESS 2003を試用しております。 transfertextではファイル名が取得できず、ほかの方法も見当がつかず、本当に困っています。 どなたかご存知の方、よろしくお願いいたします。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

ファイル1個分だけです。ファイルの数だけループを回すところはご自分でお願いします。あらかじめテーブル1というテーブルを作成し、データ型等を設定しておきます。 '☆ 標準モジュール Option Compare Database Option Explicit Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim FSO As Object Dim srcFilePath As String, srcFileName As String Dim lineCounter As Long Dim buf As Variant Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset srcFilePath = "C:\Documents and Settings\?????\デスクトップ\Book1.csv" rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic Set FSO = CreateObject("Scripting.FileSystemObject") lineCounter = 1 srcFileName = FSO.GetFileName(srcFilePath) With FSO.GetFile(srcFilePath).OpenAsTextStream Do While Not .AtEndOfLine buf = Split(.ReadLine, ",") If lineCounter > 1 Then rs.AddNew rs!ファイル名 = srcFileName rs!部署コード = buf(0) rs!請求コード = buf(1) rs!日時 = buf(2) rs!料金 = buf(3) rs.Update End If lineCounter = lineCounter + 1 Loop .Close End With Set FSO = Nothing rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 参考URL ADO http://mail.accessclub.jp/ado/index.html FSO http://officetanaka.net/excel/vba/filesystemobject/index.htm

japan116
質問者

お礼

mitarashiさん 御礼が遅くなり申し訳ございません。ほかの業務におわれておりました。 ありがとうございます!あとは複数のCSVファイルをインポートできるようにがんばってみます!

関連するQ&A

  • CSVファイルをテーブルにインポートする

    1行目が項目名のCSVファイルをテーブルにインポートするため Private Sub CSVインポート_Click() DoCmd.TransferText acImportDelim, , "ブランド", "J:\ブランド.TXT" MsgBox ("CSVファイルインポート完了") End Sub を実行すると、f1,f2のフィールドがありませんとメッセージがあり F1,F2 のフィールドを追加し再度実行するとデータは f1,f2に入り 項目名もデータとして入っています。 1行目は項目名と宣言する設定はありますか。 よろしくお願いいたします。

  • CSVファイルをインポートさせたい

    先頭行がフィールド名をあらわしたCSVファイルがあるのですが、これをOracle10gXEにインポートさせるにはどうしたらよいのでしょうか? 文字コードも気にする必要がありますか?現在SJISファイルのCSVファイルがあります。

  • 【Access2010】CSVインポートについて2

    お世話になります。 現在、表題につきまして以下の質問をさせて頂いておりますが、もう一つ質問させて頂きます。 http://questionbox.jp.msn.com/qa8724865.html インポートしようとしているCSVファイルはカンマ区切りですが、その中のデータにカンマが含まれている場合がございます。 項目1  項目2  項目3 ・・・  1    あ,あ   いい  2    うう    ええ これをカンマ区切りでインポートすると、 項目1  項目2  項目3  フィールド1 ←自動的についたフィールド名  1    あ     あ    いい  2    うう    ええ となってしまいます。 これを回避する方法はございますでしょうか。 ※CSVファイルは変更したくないので、予めCSVから不要なカンマを削除しておく・・というのは無しでお願いします。 ご教授の程、宜しくお願い致します。

  • CSV形式のファイル名をCSVの先頭に入れる方法

    EXCEL CSV形式のファイル名をCSVファイルの先頭に入れるたいのですが,EXCELのマクロやBVなどで簡単にできるよい方法はないでしょうか。 例えば, ファイル名:  123_001.csv 123_001.csvの内容:  氏名,年齢  山田,25歳    ↓ の123_001.csvを  コード,氏名,年齢  123_001,山田太郎,25歳 というデータにしたいのです。 できれば,フォルダ内に保存されているCSVファイルを一括で処理したいのですが...。 例) 123_001.csvの内容:  氏名,年齢  山田,25歳 123_002.csvの内容:  氏名,年齢  吉田,30歳 123_003.csvの内容:  氏名,年齢  鈴木,50歳    ↓ 123_001.csvの内容:  コード,氏名,年齢  123_001,山田,25歳 123_002.csvの内容:  コード,氏名,年齢  123_002,吉田,30歳 123_003.csvの内容:  コード,氏名,年齢  123_003鈴木,50歳 よろしくお願いします。

  • csvファイルのインポート

    Accessでcsvファイルをインポートさせようとしています。しかし、「F1フィールドがありません」のようなエラー表示が出て、できません。私の予想では、テーブルの型とcsvファイルの型が違うのではないかと思っています。テーブルには、数値型、テキスト型、日付/データ型があります。 保存したcsvファイルをExcelで開くと日付がApr-01や、2001/06/26となったりしていました。どこかで型変換のようなことをするのでしょうか?csvのことはよく分かりません。どうか、よろしくお願いします。

  • csvファイルのダウンロード

    phpでサーバーにあるCSVファイルをダウンロードさせる処理で、ファイルをダウンロードするとHTML部分のソースがファイルに書きこまれてしまっています。調べてみたのですが、解決出来ませんでした。お願いします まずサーバーにあるCSVファイルにsqLの結果を書き込み、その後 header ("Content-Disposition: attachment; filename=ファイル名"); header ("Content-type: application/x-csv"); readfile (ファイル名); という処理でダウンロードさせようとしています。 サーバーのCSVはデータの書き込みが成功しているのですが、 そのファイルをローカルにダウンロードして中身を確認すると、 XXX,XXX,XXX XXX,XXX,XXX <html> <head> ・・・ のような内容のファイルになっていました。

    • 締切済み
    • PHP
  • Access2000のCSVファイルのインポートについて

    Access2000でCSVファイルをインポートしようと思っています。 インポート方法は、VBAで 「DoCmd.TransferText acImportDelim, , "テーブル名", "ファイル名"」を使用しています。 この時に、CSVファイルが次のようなデータです。 F1,F2,F3 0010,0200,0001A12 0011,0201,0021B12 (実際は、1000件近いデータです) これをインポートすると、 F1,F2,F3 10,200,1A12 11,201,21B12 となってしまいます。 頭の「0」を省きたくないのです。 文字列として取り込めないでしょうか? CSVのデータに""を自動でつける方法はないでしょうか? Accessの外部データの取り込みを使うと、文字列として指定できるのですが、VBAを使いワンクリックでデータを取り込もうとしています。 よろしくお願いします。

  • テーブルにcsvファイルをインポートできない

    かなり困っています。REDHAT LINUXでpostgresのテーブルにpsqlからのCOPYコマンドでcsvファイルのデータをインポートしようとしているのですが、文字数オーバーのエラーがでてしまいます。テーブルは2列で1つ目の列はCHAR(10)で2列目はINT4型です。csvファイルの内容はとりあえず1行だけ入れていて「"1234567890","1234"」を入れています。コマンドはpsqlで「COPY テーブル FROM 'ファイルのパス' USING DELIMITER ","」で行いました。エラーはおそらくインポートしたデータがおかしくなって変な桁数になっているのですが、どういうふうにおかしくなっているのかがよくわからないので対策できません。

  • ACCESSでインポートしたレポートに自分のテーブルデータを載せるには

    全く同じフィールド項目のあるACCESSデータがあるのですが、他の人が使っているレポート内容が気に入ったので、 それを使えないかと思っています(その人とフィールド項目は全く同じ)。 で、その人のレポートをインポートしましたが、自分のテーブルデータが当てはまるようにするにはどうすればよいのでしょうか。 どうぞ宜しくお願いします。

  • アクセスと同フォルダのCSVファイルをインポートしたい

    初心者で質問がわかりにくかったらすみません。 アクセスで、CSVファイルを取込みたいです。 下記のような構文で、取込む方法はわかりました。 Private Sub コマンド62_Click() DoCmd.TransferText acImportDelim, "請求書csvインポート定義", _ "請求書", "C:\Documents and Settings\user3\デスクトップ\受付番号アクセス\これ!\請求書.csv", True End Sub しかし、これだと常に取込むCSVファイルが同じ場所ではないと、いけないので、他のPCで使用するとエラーになってしまいます。 なので、他のPCに移した場合でも、いちいち構文を修正せずに、 この構文が作成してあるアクセスと同フォルダの”請求書.csv”というファイル名のCSVデータを取込めるような、構文が知りたいです。 お手数ですが、教えてください。

専門家に質問してみよう