• ベストアンサー

accessマクロについて教えてください。

csvファイルをaccessにインポート、エクスポートする業務があります。 ファイル名は「○○1」などとしています。 ※○○は全てのファイルに共通する名称で、 その後ろにファイルごとの連番をつけています。 この業務をマクロ化したいのです。 1つのマクロで1つのファイルをインポート、エクスポートする方法は分かるのですが、 複数ファイルを同時に変換する方法が分かりません。 VBAでも良いですので、教えてください。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

Dir関数を使ってフォルダ内を検索する方法です。 CSVファイルを数字の順に取り出し、処理を したいということだろうと思います。 どこかで並び替えをする必要がありますが、 配列に入れて並び替えてもいいのですが、 ここは安易にファイル名をテーブルに 入れてそのまま並び替えをして、処理を する、というようにします。 準備として、ファイル名を入れるテーブルを 一つ、名前を「Tファイル」として、 フィールドの名前を「ファイル名」とします。 フィールドの型はファイルへのフルパスが 収まる型にしておいてください。もし 255文字以内で収まるならばテキスト型で フィールドサイズを255に設定しておいてください。 それ以上ならばメモ型。 なお、以下はDAOを使っているので、コード表の ツールから参照設定を開き、 Microsoft DAO xx Object Library にチェックを入れ↑ボタンで上げられるところまで あげてください。xxは3.6のような数字です。 なお、以下ではたとえばファイル名をAAA123.csvのように ○○○123.csvの○○○をAAAに置き換えています。 実際に合わせて変更してください。 Dir(strPath & "AAA*.csv", vbNormal) のところでは*を使っています。 Sub test1() Dim db As Database Dim rs As Recordset Dim strPath As String Dim myFile As String strPath = "C:\Documents and Settings\user\デスクトップ\CSVフォルダ\" Set db = CurrentDb Set rs = db.OpenRecordset("Tファイル", dbOpenDynaset) myFile = Dir(strPath & "AAA*.csv", vbNormal) 'ファイルの検索、取り出し Do While myFile <> "" rs.AddNew rs!ファイル名 = strPath & myFile rs.Update myFile = Dir() Loop 'ファイルの処理 If rs.RecordCount > 0 Then rs.Sort = "ファイル名" rs.MoveFirst Do Until rs.EOF 'ファイルのインポートその他の処理の記述 MsgBox rs!ファイル名 rs.MoveNext Loop End If rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub

spring012345
質問者

お礼

ありがとうございます! 無事、作業が成功しました。 とても勉強になりました!!

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

プログラム処理がしやすいように、対象Csvファイルを1つのフォルダに集めること。 これが出来ないときは以下は無視して。 ーー エクセルVBAの別の質問の回答だが、1つのフォルダ内の名前一部と拡張子を指定してファイルを掴むコード(参考) アクセスのモジュールでも動くと思う。 Sub test02() Dim buf As String Dim cl x = CurDir 'フルパス指定のため buf = Dir(x & "\") Do While buf <> "" If Left(buf, 2) = "回答" And Right(buf, 4) = ".xls" Then MsgBox buf '実際は下記処理を書く End If buf = Dir() Loop End Sub If Left(buf, 2) = "回答" And Right(buf, 4) = ".xls" Then は○○と長さ2にして、.xlsは.csvにする。 これでCSVファイル不が過不足なくつかめるかテストする。 ーーーーー アクセスのモジュールで Sub test13() i = 2 DoCmd.TransferText acImportDelim, , "菓子B", "C:\Documents and Settings\OTO\My Documents\菓子" & i & ".csv", True End Sub の i を変化させて繰返すコードにして、前記の「 MsgBox buf '実際は下記処理を書く」の部分に入れる。 テスト例データ 菓子1.csv ID,菓子 <--TransferTextでTrueにしているので見出しが必要 4,トマト 5,イチジク 7,メロン 菓子2.csv ID,菓子 8,アムスメロン 9,マンゴ 10,ベリー -- 結果 レコードが、実行の都度、累積されることを確認できた "菓子B" テーブル ID 菓子 1 紫芋 2 赤りんご 3 メロン 4 トマト 5 イチジク 7 メロン 8 アムスメロン 9 マンゴ 10 ベリー

spring012345
質問者

お礼

ありがとうございます。 うまく行かない点がありましたが、 再度、じっくり読んでやってみます!

関連するQ&A

  • Accessのマクロにパラメータを渡したい!

    AccessのマクロでCSVファイルのインポートをしているんですが、このときのCSVファイル名をパラメータでVBAから指定する方法を知っていたら教えてくださいっ。

  • ACCESSで、テキストファイルをインポートしたい

    宜しくお願い致します。 ACCESSで、テキストファイルをインポートしてテーブルを作成したいのですが、ファイル→インポートを選択して、ウィザードを開く方法は分かるのですが、マクロを作成してインポートは出来ないでしょうか? excel、CSVファイルでしたら、「ワークシート変換」、「テキスト変換」のマクロでインポートしたりエクスポートしたり出来ると思うのですが・・・、 (1)テキストファイルをインポートしたり、エクスポートしたりする場合、どのようなマクロがあるのでしょうか。 (ためしに、「出力」マクロで、あるテーブルをCSVファイルにエクスポートしてみたのですが、カンマ区切りにできず、excelのような枠付きのテキストファイルになってしまいました。) (2)容量が大きいデータの場合は、テキストファイルでエクスポートしたほうが良い・・・という認識に間違いはありませんでしょうか。 質問が一つ増えてしまいましたが、宜しくお願い致します。

  • Accessのマクロ

    オラクルからアクセスへテーブルをエクスポートする際ですが、メニューバーから外部データー取り込みではなくマクロを使用してアクセスへインポートしたいと思います。この場合マクロのデーターベース変換でインポートするのが良い方法でしょうか?それとも他に何か良い方法があるでしょうか?オラクルとはリンクせず、テーブルのみアクセスのデーターベースへインポートしたいと思っています。 よろしくお願いします。

  • Access2003でインポートをマクロで簡単に自動化したいです。

    Access2003でインポートをマクロで簡単に自動化したいです。 今はAccess2003でインポートをマクロにしたい時は、インポートする画面でインポート定義を作っておいて、マクロのテキスト変換でマクロにしています。 これだと、テキスト変換の画面でインポート元のフルパスを指定して、インポート先のテーブルのファイル名を指定しなくてはいけません。 インポート定義を作ってるのだから、定義と同じインポート元、インポート先で簡単にマクロでインポートを自動化する方法はありませんか? マクロにしたいインポートとエクスポートが結構な数あるので、マクロを作る時にいちいちフルパスとファイル名をコピーしてくるのが大変です。 簡単にインポートをマクロにする方法がありましたら、教えてください。

  • アクセス2000のマクロでエクスポートってありますか?

    アクセスのマクロにはオブジェクトの保存や、フォームを開くなどがありますが、 エクスポートやインポートはありますか? VBAは使えないのですが、よろしくおねがいします。

  • ACCESS2000 クエリをテーブル化するマクロ(VBA)おしえてください

    こんにちは。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1801262 の質問者です。コレの続きを教えてください。 まとめますと、クロス集計クエリや、ユニオンクエリをそのまま扱うと、データや計算式がからまってエラーになったり、処理が遅かったりするので、テーブル化してからいじりたいのです。 マクロは データベース変換 変換の種類…インポート データベースの種類…MS ACCESS データベース名…L:\パス\パス\ファイル名.MDB オブジェクトの種類…クエリ オブジェクト名…クエリ名 変換先名…テーブル名 テーブル構造のみ変換…いいえ としてみましたが、クエリとしてインポートされてしまいます。 いちどCSVか何かでエクスポートしてから、テキスト変換するという手もありますが、もっとスマートな方法がありましたら教えてください。 VBA も勉強中なので、VBAでお答えいただいてもけっこうです。 よろしくお願いします。

  • アクセス97のテーブルをVBAでCSV変換するには?

    アクセス97のテーブルをCSVに変換して エクスポートする必要があります。 CSVの出力先フォルダが固定で無いため マクロで無くVBAで記述する必要があります。 どのような記述にすればいいでしょうか?

  • マクロにてaccessへテキストファイルをインポートする方法

    マクロを利用しaccessへテキストファイルをインポートしようとしているのですが、 どのHPを参照しても、 マクロを利用してのテキストインポートはできないみたいなことが書かれてます。 一度、CSVに落として実行するしか方法はないのでしょうか?

  • ACCESSテキスト変換について

    特定フォルダ内の複数のcsvファイルを自動インポートするために、マクロ(テキスト変換)を使って、フォーム上にコマンドボタン化しているのですが、csvファイル名が変わったりした時でもコマンドボタンでインポートできる方法ないでしょうか?(インポート定義も指定しています) 具体的には下記のようなイメージなのですが・・ どなたかご教授ください。よろしくお願いします。 (1)コマンドボタン押下にて、インポートしたいcsvファイル選択できる (2)特定フォルダ内のcsvファイルをすべてインポートできる。

  • マクロでエクスポート(アクセス97)

    W2000・アクセス97・エクセル2000です。 アクセスのクエリーを、マクロを使用して、新規にエクセルにエクスポートしたいです。 マクロでは、 ・変換の種類 エクスポート ・ワークシートの種類 Excel97(2000は選択の中になし) ・テーブル名 エクスポートしたいクエリーを指定 ここまでは、わかりましたが、ここまででマクロを実行すると、 ”このアクションまたはメゾットを実行するには、[file name/ファイル名]が必要です” と、表示され、エラーになります。 できましたら、この後、どのようにすればよいのか? もしくは、こういう方法で、というのがありましたら、お教えくださいませ。詳しく解説してくれている、URLのご紹介でも、かまいません。 お手数ですが、どなたか、よろしくお願い申し上げます。

専門家に質問してみよう