• 締切済み

アクセス サブフォルダ内のエクセルをインポート

お世話になっております。 是非ともご教示ください。 1.フォームのテキストボックス(Forms!F_管理!txt_Path)でトップパスを指定し、 トップパスの配下にyyyymmddhhmmssといったサブフォルダ(例:20180515010128)ができるので、 そのサブフォルダ内にあるファイルの一部を テーブル(tbl_MRG)へマージさせたい。 サブフォルダにあるファイル:エクセル以外も有り (1)AB-yymmdd~(省略).xlsx (2)AC-yymmdd~(省略).xlsx (3)DE-yymmdd~(省略).xlsx (4)その他 その(1)~(3)のファイルを一定のテーブル(tbl_MRG)へマージ ・サブフォルダのhhmmssは日によって異なります。 ・マージ対象のファイル名は固定(AB~ ・AC~ ・DE~)です。 ・(4)のファイルの拡張子はエクセル以外の場合もあります。 ・マージするエクセルファイルの中身(データ範囲)は固定ではありません。 2.「ファイル名」のフィールドにファイル名(拡張子を含む)を入れたい。 3.既に取り込んだファイルは、マージ処理しない。 このような条件の処理を実装させたいですが、 どのように組んだら可能でしょうか。 ご教示のほど、よろしくお願い致します。 ※初心者につき、説明に整理できていない点などありましたら  追記させていただきます。 よろしくお願い致します!

みんなの回答

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

(1) >トップパスの配下にyyyymmddhhmmssといったサブフォルダ これは、複数存在するのですか? また、14桁の数値のようですが、この解釈でいいですか? フォルダはこのような形式の名前以外にも存在しますか? (2) >マージ対象のファイル名は固定(AB~ ・AC~ ・DE~)です。 Excelファイル以外にもこのような書き出しで始まるファイル、 たとえば、テキストファイルとかは存在しますか? (3) 結合するExcelファイルは、一つのフォルダにある対象となる 複数のファイルのみですか。 あるいは他にもフォルダが存在するとしてそれらもすべて同じテーブルに 一度に結合するのですか。 もし、別々に結合するのであれば、テーブルはどのようにするのですか。 (4) もし、 >トップパスの配下にyyyymmddhhmmssといったサブフォルダ 以外にもフォルダがあるとして、そのフォルダに >マージ対象のファイル名は固定(AB~ ・AC~ ・DE~)です。 のような同じ形式のexcelファイル、あるいはテキストファイルなどが 存在するようなことはありませんか? (5) >マージするエクセルファイルの中身(データ範囲)は固定ではありません。 これは、列の数、Accessでいうところのフィールドの数がファイルによって 違うということですか。あるいは行の数、Accessでいうところのレコード数が 違うということですか。または両方ですか?

すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

メッセージボックスを表示しているのは、 どのような値が埋まっているのかを知らせたかったからです。 実稼働の時は、コメントアウトする、 または行削除してください。 >Forms!F_管理!txt_Pathで指定したいのですが Sub sample()  Dim buf As String, f As Object  Const TargetDir = "D:\wk"  これを Sub sample()  Dim buf As String, f As Object  Dim TargetDir as string  TargetDir = Forms!F_管理!txt_Path としてみてください。

aka_ao
質問者

お礼

ご親切に、ありがとうございました!!!

すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.1

課題親フォルダーの下階層に複数のフォルダーがあり、 そのフォルダーごとに複数ファイルが格納されているんですね。 で、不明な部分は、 これらのフォルダー群、ファイル群を個々に取り出す部分 ということでいいでしょうか? その前提でサンプルコードを掲示します。 Sub sample()  Dim buf As String, f As Object  Const TargetDir = "D:\wk"  'これが対象の親フォルダー    With CreateObject("Scripting.FileSystemObject")   For Each f In .GetFolder(TargetDir).SubFolders    MsgBox (f)    buf = Dir(f & "\*.*")    Do While buf <> ""     MsgBox (buf)     If ((Left(buf, 3) = "AB-") Or _       (Left(buf, 3) = "AC-") Or _       (Left(buf, 3) = "DE-")) Then      'ここでファイルに応じたマージ処理、さらに      '次回マージ対象外にするためにファイル名を適当に変更     End If     buf = Dir()    Loop   Next f  End With End Sub

aka_ao
質問者

お礼

補足の追加です。(「お礼コメント」にすみません。) 親フォルダは、Forms!F_管理!txt_Pathで指定したいのですが、Const TargetDir = Forms!F_管理!txt_Pathでは弾かれてしまいます。大変お手数をおかけしますが、こちらの設定方法もお教えいただけますと幸いです。どうぞ、よろしくお願い致します!

aka_ao
質問者

補足

fの取得時とbufの取得時に、それぞれメッセージボックス表示していますが、表示させずに処理することは可能ですか? ご教示、よろしくお願いします!

すると、全ての回答が全文表示されます。

関連するQ&A