• ベストアンサー

任意のCSVファイルをAccessに取り込むには?

同様の質問が発見できなかったため質問させて頂きます。 アクセスを利用して日々の電力監視のデータを管理しようと思います。 データを出力するシステムの都合で、日々のデータがcsv形式で毎日1ファイル生成されます。 ファイル名は[AT20070925.csv]のような形です。 このファイルをアクセスにインポートする際、ファイル名をダイレクトに指定しなくてもインポートするファイルを指定することは出来るのでしょうか? 具体的には (1)毎日指定した時間にデータを取り込むものとして、本日の(または前日の)ファイル名のデータを取り込む (例えば9月26日0時2分に9月25日のデータ[AT20070925.csv]を自動的にインポートする) (2)処理を行う際に随時指定した日付のファイル名のデータを取り込む (フォームで日付を指定し、例えば9月25日と指定したら[AT20070925.csv]を随時インポートする) インポートするファイル名に変数を使うことは可能なのでしょうか? また実際にはインポートでなくリンクを使用する可能性もあるのですが、リンクでも同じ様な処理は出来るのでしょうか? 良い方法等ありましたらご教授いただければと思います。

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

  • ベストアンサー
  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.2

>インポートするファイル名に変数を使うことは可能なのでしょうか? 可能です。 1、2ともに「AT20070925.csv]という文字列(日付部分が変化)を生成する方法がわかればよいですよね? サンプルを書きましたので参照されてください。(ファイルがCドライブ直下にある場合の定義です。C:\AT20070925.csv というような文字列になります。) (1)のパターン 「昨日」 FileName = "C:\AT" & Format(Date-1, "yyyymmdd") & ".csv" (2)のパターン 「フォーム内のTextBox1の値」 FileName = "C:\AT" & Format(Me.TextBox1.Value, "yyyymmdd") & ".csv" これで変数FileNameにご希望の文字列が格納されます。 あとは、DoCmd.TransferTextメソッドでこのFileNameを引数に指定してあげれば希望のテーブルにインポート/リンク可能です。インポートの場合の例は下記のとおりです。リンクの場合もほぼ同じです。(デリミトの形式はCSVは省略可です、、、確か。)  'TableName = "任意のテーブル名(インポート先)" DoCmd.TransferText acImportDelim, , TableName, FileName 今回は書いていませんが、エラー処理等を忘れずに。

xtoufux
質問者

お礼

なるほど、前日であってもDate関数でいけるのですね!大変参考になりました!ありがとうございました。

その他の回答 (2)

noname#182251
noname#182251
回答No.3

変数を使用してファイルをインポートする方法は既に解答がでているようです。しかし 「任意のCSVファイルをAccessに取り込む」 のではなく、「定められたフォルダに規則性のあるファイル名で生成されるファイル」が対象のようです。それならば 1.一定間隔(一日一回?)フォルダを監視する。新しいファイル名があればデーターベースに取り込む 2.インポートフラッグの立っていないファイル名に対し、インポート処理を行い、処理日時を書き込み、インポートフラッグを立てる このようにした方がデーターベースらしいし、取りこぼしのなさや、トラブル発生時に、色々解析しやすいのでは?

xtoufux
質問者

お礼

たしかにデータベースの基本的考え方だとそうかもしれません。ただ今回の場合処理の都合上どうしてもこの方法をとらないといけなかったので今回はこの方法で行く予定です! また何かありましたらよろしくおねがいいたします。

回答No.1

できると思います。 ちょっとやってみたのでマクロコードを出しておきますね。 見れば大体わかりますよね? filePath = "AT20070925.csv" の記述を、日付関数を用いて置き換えてやればOKだと思います。 日付関数参考URL) http://www.geocities.jp/cbc_vbnet/function/date.html 「AT20070925 インポート定義」「AT20070925 リンク定義」は、一度手動でインポート/リンクを行い、 その時の設定を保存したものです。 ==== Macro ==== Option Compare Database '------------------------------------------------------------ ' マクロ1 ' '------------------------------------------------------------ Function マクロ1() On Error GoTo マクロ1_Err Dim filePath As String Dim dist As String filePath = "AT20070925.csv" dist = "table1" DoCmd.TransferText acImportDelim, "AT20070925 インポート定義", dist, filePath DoCmd.TransferText acLinkDelim, "AT20070925 リンク定義", "AT20070925", filePath マクロ1_Exit: Exit Function マクロ1_Err: MsgBox Error$ Resume マクロ1_Exit End Function ==== end of Macro ====

xtoufux
質問者

お礼

なるほど。インポート定義はしてあったのでこれで解決します!ありがとうございました。

関連するQ&A

  • 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を使いワンクリックでデータを取り込もうとしています。 よろしくお願いします。

  • AccessでのCSVファイル取り込みの自動化をしたいのですが。

    AccessでのCSVファイル取り込みの自動化をしたいのですが。 D:\DATA\というフォルダの下に「01」~「99」という99個のフォルダがあり、すべてのフォルダの中に「item.csv」「kaku.csv」,「kumi.csv」,「time.csv」,「total.csv」という存在します。 毎日01-99に順番にデータが格納されていきます。そのデータを毎日、Accessのテーブルに保存する作業を自動化(「01」~「99」のフォルダ指定)にしたいのですが出来ません。 どなたかご教授ください。ちなみにAccessのテーブルはCSVのファイル名と同じです。

  • Access csvの取込 ファイルは任意でテーブルは指定したいのですが?

    Access初心者です。2003を使用しています。 csvをマクロの「テキスト変換」で取り込ませています。取り込み時に定義どおりのテーブルを作成してくれるので、追加クエリを使い作業用テーブルに移動させ、処理にはそちらを使う仕組みにしています。 csv → データ用テーブル → 作業用テーブル(実際使うテーブル) csv取り込みには「テキスト変換」マクロでファイル名にパスを設定していますが、この部分を固定パスではなく任意に指定できるようにしたいのです。(取り込みたいcsvが決まったパス、ファイル名で無い場合があります。) 「コマンドの実行:インポート」ですとダイアログが出て任意に取込ファイルが指定できますが、インポートウィザードが起動してしまいます。使用者がウイザードで適切な定義を選びデータ用テーブルを作成してくれればいいのですが、私がツールを作りPCに詳しくない人が使うのでインポートウイザードを避けたいと考えます。 どなたか、マクロ「テキスト変換」でファイル名をダイアログなどで、任意に指定できるような手法をご存じないでしょうか? また、マクロでは無理なようでしたらVBAでしたら可能でしょうか? よろしくお願いします。

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

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

  • csvファイルをAccessに取り込むとデータ数が増える

    項目をカンマで区切っただけの単純なcsvファイルをAccessでインポートしてテーブルを作成したら、データ数が増えてしまいました。 (csvファイルをテキストで開いたときの行数と、Accessの行数が異なる) 5000件ぐらいなら、csvもAccessもデータ数は同じなのですが、データ数が大きくなると、csvとAccessのテーブルで6万件とかの差分が出てしまいます。 csvファイルとAccessで、データ数を同じにするにはどうしたら良いでしょうか。 参考になるURLでも良いので、教えて頂ければと思います。 よろしくお願いします!

  • csvファイルをアクセスにインポート

    こんにちは。Access2000について質問させてください。よろしくお願いいたします。 csvファイル内のデータをAccess2000に作成したデータベースにインポートしたいんのですが、どうすれば良いでしょうか? 何を調べたらいいかもわからない状態で… どなかかご存知の方がいらっしゃったら教えて下さい。なにとぞ宜しくお願いいたします。

  • Access CSVファイルインポート時にタイトルを省く

    毎日送られてくる会員データ(CSVファイル)を Accessで管理しようと考えております。 そのとき、先頭のタイトルを省いてインポートしたいのですがどのようにすればいいのでしょうか。 現在、フォーム上からCSVファイルを選択し「実行」コマンドを クリックするとインポートするようにしているのですが 一行目のタイトルを省く方法がわかりません。 Private Sub 実行_Click() TextConv Me.テキスト1, "インポート_定義", "T_会員データ" End Sub よろしくお願いします。

  • Access2000 CSVファイルのインポート

    アクセスでCSVファイルをインポートしようと思うのですが CSVファイルに項目がありません。 COBOLで作成したファイルなのですが レコードだけの状態です。そのままインポートしようと しても文字化けのような感じになります。 どうしたらよいでしょうか?

  • アクセスマクロで、csv データを取り込むときに起こるエラー

    こんにちは、いつも質問ばかりですみません。 WINDOWS2000 で ACCESS 97 ユーザーです。 品番.CSVがあるとします(数千行) 品番は、 100 A100 のように、数字のみやローマ字が入り混じっています。 ACCESS 側に「品番」テーブルを作り、データ型をテキストにします。その上で  ファイル  -外部データの取り込み  -インポート  -次のテーブルに保存する「品番」 でテーブルを指定すると、きちんと入ります。 が、マクロで  テキスト変換  -区切り記号付インポート  -テーブル名「品番」  -ファイル名「品番.CSV」  -フィールド名の設定「はい」 で実行すると、 「品番インポートエラー」テーブルが別に作成され、 A100 を「データ型の変換エラー」と見なしています。 …どうしてでしょう。

  • Access(ファイルの管理、インポートの自動化)

    ファイルサーバーにあるCSVファイルを、accessでインポートしてレポートにしたいのですが ※ファイルサーバーにあるCSVファイル名は固定 ※バッチ処理が動くとCSVファイルは上書き 普通にインポートするだけならできるのですが 同じファイル名なのでレポートを発行しなかった場合、 インポートを忘れてしまった場合などで 前のファイルが上書きできえてしまします。 インポートの自動化と例えば時間ごとのファイル管理が アクセスでできたらいいのではないかと思うのですがやり方もわかりません。 アドバイスいただけないでしょうか?