こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

お世話になっております。
是非ともご教示ください。

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.既に取り込んだファイルは、マージ処理しない。

このような条件の処理を実装させたいですが、
どのように組んだら可能でしょうか。
ご教示のほど、よろしくお願い致します。


※初心者につき、説明に整理できていない点などありましたら
 追記させていただきます。

よろしくお願い致します!

投稿日時 - 2018-06-05 15:36:23

QNo.9505381

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

(1)
>トップパスの配下にyyyymmddhhmmssといったサブフォルダ

これは、複数存在するのですか?
また、14桁の数値のようですが、この解釈でいいですか?
フォルダはこのような形式の名前以外にも存在しますか?


(2)
>マージ対象のファイル名は固定(AB~ ・AC~ ・DE~)です。

Excelファイル以外にもこのような書き出しで始まるファイル、
たとえば、テキストファイルとかは存在しますか?


(3)

結合するExcelファイルは、一つのフォルダにある対象となる
複数のファイルのみですか。
あるいは他にもフォルダが存在するとしてそれらもすべて同じテーブルに
一度に結合するのですか。
もし、別々に結合するのであれば、テーブルはどのようにするのですか。



(4)
もし、
>トップパスの配下にyyyymmddhhmmssといったサブフォルダ
以外にもフォルダがあるとして、そのフォルダに
>マージ対象のファイル名は固定(AB~ ・AC~ ・DE~)です。
のような同じ形式のexcelファイル、あるいはテキストファイルなどが
存在するようなことはありませんか?


(5)
>マージするエクセルファイルの中身(データ範囲)は固定ではありません。

これは、列の数、Accessでいうところのフィールドの数がファイルによって
違うということですか。あるいは行の数、Accessでいうところのレコード数が
違うということですか。または両方ですか?

投稿日時 - 2018-06-11 11:54:21

ANo.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

としてみてください。

投稿日時 - 2018-06-06 12:32:21

お礼

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

投稿日時 - 2018-06-06 16:32:16

ANo.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

投稿日時 - 2018-06-06 09:16:28

補足

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

投稿日時 - 2018-06-06 12:04:41

お礼

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

投稿日時 - 2018-06-06 12:10:31

あなたにオススメの質問