• ベストアンサー

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/17069)
回答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