• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:多量のファイルをフォルダに自動振り分けするマクロを教えて下さい。)

マクロで多量のファイルをフォルダに自動振り分けする方法

このQ&Aのポイント
  • エクセルVBAを使って、多量のファイルをフォルダに自動的に振り分けるマクロを作成したいです。以前教えていただいたマクロを使用して、一行ごとにテキストファイルを生成することはできましたが、フォルダの自動生成とファイルの振り分けについて教えていただきたいです。
  • 生成するファイル名は4桁の数字で、ファイル自動生成時に特定の範囲のファイルは特定のフォルダに収めたいです。たとえば、1000番代のファイルはフォルダ1に、2000番代のファイルはフォルダ2に振り分けるようにしたいです。現在はファイルの生成はできているので、フォルダの自動生成とファイルの振り分けについて助言をいただけると助かります。
  • マクロを使用して一行ごとにテキストファイルを生成する方法は以前教えていただきましたが、残りの課題としてフォルダの自動生成とファイルの振り分けについて教えていただきたいです。ファイル名は4桁の数字で、特定の範囲のファイルは特定のフォルダに振り分けたいです。例えば、1000番代のファイルはフォルダ1に、2000番代のファイルはフォルダ2に振り分けるようにしたいです。よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

内容を換えました。 このマクロの特徴は、2列目を使うファイル名は4桁の数--つまり数字であるということ。 フォルダが見つからないと、マクロはストップしてしまいます。 '// Sub TestMacro1()  Dim i As Long, k As Variant, j As Long, m  Dim fn As String  Dim mPath As String, nPath As String  Dim rng As Range, ar As Variant  Dim buf As String  Set rng = Range("A1", Cells(Rows.Count, 1).End(xlUp).Offset(, 2))  'パスを決める(CurDir は、カレントディレクトリ)  mPath = CurDir & "\" '末尾には必ず¥を入れます。  ar = rng.Value  For i = 1 To rng.Rows.Count   fn = Format(ar(i, 2), "0000") & ".txt"   nPath = mPath & Left$(fn, 1) & "\"   If Dir(nPath, vbDirectory) = "" Then MsgBox "Folderが見つかりません", 48: Exit Sub   Do Until Dir(nPath & fn) = ""    k = Val(k) + 1    j = InStr(1, fn, "(", 1)    If j > 0 Then    '同名ファイルの場合     fn = Mid(fn, 1, j - 1) & "(" & k & ")" & ".txt"    Else     fn = Replace(fn, ".txt", "", , , 1) & "(" & k & ")" & ".txt"    End If   Loop   Open nPath & "\" & fn For Output As #1   Print #1, ar(i, 1) & ar(i, 2) & ar(i, 3)   Close #1   k = ""   nPath = ""  Next  If Len(buf) > 2 Then   MsgBox Mid(buf, 2) & vbCrLf & "重複のため保存は省かれました。"  Else   MsgBox mPath & "に出力されました。"  End If End Sub

その他の回答 (2)

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

勉強(と言ってもWEB照会してコードをさがす程度)をせず、全面的に回答頼りになっていませんか。 個別要素のコードは、良くある例なので、WEB照会で直ぐ見つけられます。 前問の回答にも使えるものがあります。前問の回答の周辺事項が身についてないのでは。回答コピーで動けば良しとするからでしょう。 (1)在るフォルダのすべてのフォルダを採り上げるコード (2)新規にフォルダを作成し、望みのフォルダ名にするコード (3)振り分けの判別(ファイル名の文字列の一部を切り出し、IF分を使うだけ) (4)ファイルをコピーして指定のフォルダに入れるコード などGoogleででも照会すれば、沢山ありますよ。 照会のキーワードは (1)VB Dir (2)VB Mkdir (3)Mid関数 (4)VB copy http://homepage1.nifty.com/rucio/main/Samples/s_sh3.htm 日本語で、例えば(2)は「VB フォルダ作成」などで照会しても良い ーー 本質問については、それぞれFSO(FileSystemObject)のコードでやる方法もあります。 (4)はMoveFileもある。

noname#141201
質問者

お礼

書いて頂いた項目、順次調べさせてもらっています。 ご丁寧にありがとうございました。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>ファイルは生成できているので、 あとはフォルダの自動生成と >自動振り分けができるマクロを教えて頂けませんか? この手の質問に回答するのはかなり度胸が必要なのですよ。 間違ったコードや操作でパソコンの中をめちゃくちゃにしてしまう可能性もあるからです。 参考程度の回答を致します。 失敗の事を考えて2つのステップで操作します。 ステップ1 指定したフォルダ内のファイル名をエクセルのシートに一覧で表示させます。 ステップ2 表示されたファイル名を別のフォルダーにコピィする。 ステップ3 うまく出来たらフォルダ内のファイルを削除する。 それぞれがうまく出来るか確認の上。次のステップに進んでください。 ステップ1 B2セルに ファイルが入っているフォルダ名を入れておきます。 Sub ボタン1_Click() Dim Buf As String Range("C3:D1000").ClearContents Buf = Dir(Range("B2").Value & "\" & "*.*") i = 3 Do While Buf <> "" Range("C" & i).Value = Buf Range("D" & i).Value = Left(Range("C" & i).Value,1) Buf = Dir() i = i + 1 Loop End Sub DirについてはWeb調べると色々と説明がされています。 C3セル以下にファイル名の一覧 D3セル以下にはファイル名の最初の1文字がでます。 Sub ボタン2_Click() For i=3 To Range("C65536").End(Xlup).Row FileCopy Range("B2").Value & "\" & Rnage("C" & i).Value, Range("D" & i).Value & "\" & Range("C" & i).Value Next End Sub FileCopy コピィ元のパスとファイル名,コピィ先のパスとファイル名 と指定して使います。 B2セルで指定したフォルダ(パス)で C列のファイル名を D列で指定したフォルダへ C列で指定したファイル名コピィします。 簡単なコードですので、ご自身で理解して使ってください。 お酒も履いてしまっているので スペルミスなどもあるかもしれません。 検証もしていていませんの保証もいたしません。 ご自身の責任で実行してください。

noname#141201
質問者

お礼

そういう懸念があったのですね。。 確かに出力すると数千ファイルが生成されるので、 間違った場合の削除にも手間がかかりました。。 教えて頂いたこと、慎重に検証させていただきますね^^ ありがとうございます。

関連するQ&A