複数のフォルダ内の名前や作成日等をリスト化する方法

このQ&Aのポイント
  • フォルダ内の名前や作成日等をリスト化する方法をご紹介します。
  • マクロを使用すると、複数のフォルダ内の情報を一気にリスト化することができます。
  • フォルダのパスを入力して実行すると、別シートにフォルダ内の情報が表示されます。
回答を見る
  • ベストアンサー

複数のフォルダ内の名前や作成日等をリスト化する方法

複数のフォルダ内の名前や作成日等をリスト化する方法 こんにちは。 以下に示しますマクロは フォルダ内の名前や作成日等(サブディレクトリを含む)をリスト化するもので 以前同サイト内で教えて頂きました。 現在このマクロでは シート1のAセルにフォルダのパスを入力して実行すると、 シート2にフォルダ内の情報がリスト化されます。 このマクロでは1つのフォルダ内の情報をリスト化することが可能ですが、 今回は更に、 エクセルのA列にフォルダのパスを複数個入力し、 それらのフォルダ内の情報を、それぞれ別シートに 一気にリスト化したいと考えています。 ご存じの方がいらっしゃいましたら よろしくお願いいたします。 Sub makeFileList()   Call fileList   MsgBox "終了しました" Columns.AutoFit 'すべての列幅を自動調整する End Sub    Function fileList(Optional trgDir As String = "", Optional fCnt As Long = 0)   On Error GoTo err   Dim objFs As Object   Dim objDir As Object   Dim objFile As Object   Dim i As Long      Set objFs = CreateObject("Scripting.FileSystemObject")      If trgDir = "" Then     Set objDir = objFs.Getfolder(Sheets("sheet1").Range("a1"))   Else     Set objDir = objFs.Getfolder(trgDir)   End If      Set objFile = objDir.Files        With Sheets("sheet2")     For Each objFile In objDir.Files         fCnt = fCnt + 1 .Cells(fCnt, 1).Offset(1, 0) = fCnt .Cells(fCnt, 2).Offset(1, 0) = objFile.DateCreated .Cells(fCnt, 3).Offset(1, 0) = objFile.DateLastModified .Cells(fCnt, 4).Offset(1, 0) = objFile.Path .Range("A1").Value = "No" .Range("B1").Value = "作成日" .Range("C1").Value = "更新日" .Range("D1").Value = "ファイル名"     Next objFile          For Each objDir In objDir.SubFolders       If objDir.Attributes <> 22 Then   'システムフォルダ除外                      '--------------サブフォルダの再帰検索             Call fileList(objDir.Path, fCnt)           '--------------サブフォルダの再帰検索                End If     Next objDir   End With      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing Exit Function err:   Select Case err.Number     Case 76 ' path がない       MsgBox "path 指定が間違っています"     Case Else       MsgBox err.Number & vbCrLf & err.Description   End Select      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing End Function

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

回答2、myRangeです。 変数宣言が抜けてますねぇ、、すみませぬ。。(^^;;; 下記、●●の一行を追加願います。 '--------------------------------------- Sub MakeFileList()  Dim NewSheet As Worksheet  '●●これを追加する  Dim R As Long  For R = 1 To Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row    Set NewSheet = Sheets.Add(after:=Sheets(Sheets.Count))    NewSheet.Range("A1:D1") = Array("No", "作成日", "更新日", "ファイル名")    Call FileList(NewSheet, Sheets("Sheet1").Cells(R, "A").Value, 0)    NewSheet.Columns("A:D").AutoFit  Next R  MsgBox "終了しました" End Sub '-------------------------------------- 以上です。

doji4014
質問者

お礼

感動です! ありがとうございました。 急いでいましたが、これで間に合いそうです。 天才ですね!!

その他の回答 (2)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

(処理内容) Sheet1のA列にディレクトリー名が入力してあるものとする A1~A最終行までひとつずつ検索し、別シートに内容を表示する 別シートは【自動】で増やす 該当がない場合は、増やしたシートにその旨表示。 '-------------------------------------------------------- Sub MakeFileList()   Dim R As Long   For R = 1 To Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row     Set NewSheet = Sheets.Add(after:=Sheets(Sheets.Count))     NewSheet.Range("A1:D1") = Array("No", "作成日", "更新日", "ファイル名")     Call FileList(NewSheet, Sheets("Sheet1").Cells(R, "A").Value, 0)     NewSheet.Columns("A:D").AutoFit   Next R   MsgBox "終了しました" End Sub '---------------------------------------------------------  Function FileList(NewSheet As Worksheet, trgDir As String, fCnt As Long)   Dim objFs As Object   Dim objDir As Object   Dim objFile As Object   Dim i As Long      On Error GoTo ErrRtn     Set objFs = CreateObject("Scripting.FileSystemObject")     Set objDir = objFs.Getfolder(trgDir)     Set objFile = objDir.Files      With NewSheet     For Each objFile In objDir.Files       fCnt = fCnt + 1       .Cells(Fcnt, 1).Offset(1, 0) = Fcnt       .Cells(Fcnt, 2).Offset(1, 0) = objFile.DateCreated       .Cells(Fcnt, 3).Offset(1, 0) = objFile.DateLastModified       .Cells(Fcnt, 4).Offset(1, 0) = objFile.Path     Next objFile      For Each objDir In objDir.SubFolders       If objDir.Attributes <> 22 Then   'システムフォルダ除外         Call FileList(NewSheet, objDir.Path, fCnt)       End If     Next objDir   End With Exit Function ErrRtn:   NewSheet.Range("B4").Value = trgDir & " は無し!"   NewSheet.Range("B4").Font.Size = 24 End Function '------------------------------------------- 以上です。  

doji4014
質問者

お礼

回答ありがとうございます。 早速走らせてみたところ、 「コンパイルエラー:ByRef引数の型が一致しません」 と出てしまいます。 エクセルSheet1のAセルにディレクトリー名は入力しました。 それ以外にどこかいじるところがあるのでしょうか。 初歩的なことかもしれませんが、 教えていただけないでしょうか。 よろしくお願いいたします。

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

コードは随分きっちりした正統な書き方のコードの回答です。 それだけに初心者には要点が判りにくいかも。 この質問はどちらかと言うと、回答がVBSを使っているために、VBSの関連質問になっている。 これが本質問のケースに応用できないようでは、この質問の回答をもらっても場合によっては役立たないようにおもう。中身も含めてわかるように勉強すべきだ。 この関数は objFs.Getfolder(Sheets("sheet1").Range("a1")) Set objDir = objFs.Getfolder(trgDir) でtrgDirという引数の指定なければ前者、Sheet1のA1セルの値であるフォルダ名のフォルダを 指定あれば後者でtrgDirというフォルダを対象にしているから、 本質問の場合は、ここのtrgDirの指定を、>パスを複数個入力したシートの、次々のセルの値(をForNextなど使って)にずらして、回答全体を繰り返せば(この関数を使えば、この関数に飛んでくれば)仕舞い。 またfCntという書き出す行ポインターの変数は、作業中は連続したほうが良かろうから、関数の外に出して続けた方が良い。

doji4014
質問者

補足

回答ありがとうございます。 少しずつ勉強していきたいと思います。 現在、そのマクロ作成を急いでおり、 具体的にどこをどう直すかを教えていただけないでしょうか。 決して楽をしようとしている訳ではありませんが、 全くの初心者で、期日までに間に合わせなければならないので… また、フォルダ情報をエクセルに出力する際、 セルの幅を自動調節するため4行めに自分で Columns.AutoFit を挿入しましたが、この挿入場所は正しいでしょうか。 教えてください。 よろしくお願いします。

関連するQ&A

  • ファイル名をエクセルにリスト化するマクロの応用

    ファイル名をエクセルにリスト化するマクロの応用 こんにちは。 以下に示しますマクロは フォルダ内の名前や作成日等(サブディレクトリを含む)を エクセルにリスト化するもので 以前同サイト内で教えて頂きました。 現在このマクロでは シート1のAセルにフォルダのパスを入力して実行すると、 シート2にフォルダ内の情報がリスト化されます。 このマクロでは1つのフォルダ内の情報をリスト化することが可能ですが、 今回は更に、 エクセルのA列にフォルダのパスを複数個入力し、 それらのフォルダ内の情報を、それぞれ別シートに 一気にリスト化したいと考えています。 ご存じの方がいらっしゃいましたら よろしくお願いいたします。 プログラミングに関する知識はほとんどありません… 具体的に、どこに何を入力するのかを教えていただけると嬉しいです。 お手数をおかけし、すいません。 ※以下は以前nicotinismさんに回答いただいたマクロを 参考にさせていただいております。 Sub makeFileList()   Call fileList   MsgBox "終了しました" Columns.AutoFit 'すべての列幅を自動調整する End Sub    Function fileList(Optional trgDir As String = "", Optional fCnt As Long = 0)   On Error GoTo err   Dim objFs As Object   Dim objDir As Object   Dim objFile As Object   Dim i As Long      Set objFs = CreateObject("Scripting.FileSystemObject")      If trgDir = "" Then     Set objDir = objFs.Getfolder(Sheets("sheet1").Range("a1"))   Else     Set objDir = objFs.Getfolder(trgDir)   End If      Set objFile = objDir.Files        With Sheets("sheet2")     For Each objFile In objDir.Files         fCnt = fCnt + 1 .Cells(fCnt, 1).Offset(1, 0) = fCnt .Cells(fCnt, 2).Offset(1, 0) = objFile.DateCreated .Cells(fCnt, 3).Offset(1, 0) = objFile.DateLastModified .Cells(fCnt, 4).Offset(1, 0) = objFile.Path .Range("A1").Value = "No" .Range("B1").Value = "作成日" .Range("C1").Value = "更新日" .Range("D1").Value = "ファイル名"     Next objFile          For Each objDir In objDir.SubFolders       If objDir.Attributes <> 22 Then   'システムフォルダ除外                      '--------------サブフォルダの再帰検索             Call fileList(objDir.Path, fCnt)           '--------------サブフォルダの再帰検索                End If     Next objDir   End With      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing Exit Function err:   Select Case err.Number     Case 76 ' path がない       MsgBox "path 指定が間違っています"     Case Else       MsgBox err.Number & vbCrLf & err.Description   End Select      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing End Function

  • Excelのマクロで条件を指定して、自動処理する方法。

    Excelのマクロで条件を指定して、自動処理する方法。 こんにちは。 条件を指定して自動処理したいのですが、 どのようにしたらよいかわからず困っています。 よろしくお願いします。     A    B 1   α   ○                           2   β 3 エクセルの表で、A1セルが空白か否か A1セルが 空白の場合→終了 記入してある場合→B1セルが空白か否か B1セルに○が 記入してある場合→A2セルへ 空白の場合→「ファイル情報リスト作成マクロ(既に作成済み)」を使ってリストを自動作成          →リスト作成が終わったらB1セルに○印を付ける          →A2セルへ A2セルが空白か否か…(繰り返し) 「ファイル情報リスト作成マクロ」は、文字数の許す限りで以下に示します。 こちらも相談箱を参考にさせて頂いたものです。 「ファイル情報リスト作成マクロ」 Sheet1 の A1 セルに調べたいフォルダ名を入力して 標準モジュールに貼り付けて、マクロ makeFileList を実行 Sheet2にリスト出力 Sub makeFileList()   Call fileList   MsgBox "終了しました" Columns.AutoFit 'すべての列幅を自動調整する End Sub    Function fileList(Optional trgDir As String = "", Optional fCnt As Long = 0)   On Error GoTo err   Dim objFs As Object   Dim objDir As Object   Dim objFile As Object   Dim i As Long      Set objFs = CreateObject("Scripting.FileSystemObject")      If trgDir = "" Then     Set objDir = objFs.Getfolder(Sheets("sheet1").Range("a1"))   Else     Set objDir = objFs.Getfolder(trgDir)   End If      Set objFile = objDir.Files        With Sheets("sheet2")     For Each objFile In objDir.Files         fCnt = fCnt + 1 .Cells(fCnt, 1).Offset(1, 0) = fCnt .Cells(fCnt, 2).Offset(1, 0) = objFile.DateCreated .Cells(fCnt, 3).Offset(1, 0) = objFile.DateLastModified .Cells(fCnt, 4).Offset(1, 0) = objFile.Path .Range("A1").Value = "No" .Range("B1").Value = "作成日" .Range("C1").Value = "更新日" .Range("D1").Value = "ファイル名"     Next objFile          For Each objDir In objDir.SubFolders       If objDir.Attributes <> 22 Then   'システムフォルダ除外                      '--------------サブフォルダの再帰検索             Call fileList(objDir.Path, fCnt)           '--------------サブフォルダの再帰検索                End If     Next objDir   End With      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing Exit Function err:   Select Case err.Number     Case 76 ' path がない       MsgBox "path 指定が間違っています"

  • エクセルで複数のフォルダ内のファイルのパスと作成日

    いつもお世話になっております。 だいぶ前にここで表題の質問に対し下記の回答をもらって使っていたのですが、当初はうまく動いているはず(と思った?)ですが、今回明らかにかなりの抜けが有ることが分かりました。A~Zまでのフォルダで抜けているフォルダがいくつもあります。 また、出力の順番が品名フォルダのN、Yから始まって、50音、アルファベット(A、B・・)と順不同。 また、数字で始まる品名のフォルダは無視されているようです。 かなりの確率で抽出されているようなのですが、当方にはどこが悪いのか全く分かりようがないのでHELPさせていただきます。 尚、対象となるファイルが保存されているフォルダー構成は 下記のように・・・・と長いファイルパスの最後に「1.試験成績表」というフォルダに入っている、エクセル、pdf、ワードファイルで、知りたい情報は、当該ファイルのフルパスと作成日です。 Option Explicit Const tgDir = "\\Srv01\部署名\・・・\担当者名\成績書" Const PicDir = "1.試験成績表" Sub Sample() Call setFileList(tgDir) End Sub '//-------------------- Sub setFileList(searchPath) Dim startCell As Range Dim maxRow As Long Dim maxCol As Long Set startCell = Cells(5, 2) 'このセルから出力し始める startCell.Select 'シートをいったんクリア maxRow = startCell.SpecialCells(xlLastCell).Row maxCol = startCell.SpecialCells(xlLastCell).Column Range(startCell, Cells(maxRow, maxCol)).ClearContents Call getFileList(searchPath) startCell.Select End Sub '//-------------------- Sub getFileList(searchPath) Dim FSO As New FileSystemObject Dim objFiles As File Dim objFolders As Folder Dim separateNum As Long 'サブフォルダ取得 For Each objFolders In FSO.GetFolder(searchPath).SubFolders Call getFileList(objFolders.Path) Next 'ファイル名の取得 For Each objFiles In FSO.GetFolder(searchPath).Files separateNum = InStrRev(objFiles.Path, "\") If Right(Left(objFiles.Path, separateNum - 1), Len(PicDir)) = PicDir Then 'セルにパスとファイル名を書き込む ActiveCell.Value = Left(objFiles.Path, separateNum - 1) ActiveCell.Offset(0, 1).Value = Right(objFiles.Path, Len(objFiles.Path) - separateNum) ActiveCell.Offset(0, 2).Value = FileDateTime(objFiles) ActiveCell.Offset(0, 3).Value = Format((FileLen(objFiles) / 1024), "#.0") ActiveCell.Offset(1, 0).Select End If Next End Sub

  • FileSystemObject & For Eachループで・・・

    皆様こんにちは! VBAでプログラムを作っていて不明点があり困っています。 FileSystemObjectを使用してあるフォルダにあるサブフォルダ内のすべての ファイルをコピーしフォルダを削除する処理を作成しています。 Set objFolder = objFs.GetFolder("C:\TEST") For Each objSubFolder In objFolder.subfolders 'TESTフォルダ内にあるサブフォルダ獲得 For Each objFile In objSubFolder.Files 'サブフォルダ内のファイル獲得 ON Error Go To CopyErr objFs.CopyFile(objFile.Path,"コピー先名") 'ファイルコピー処理 ON Error Go To 0 Set objFile = Nothing Next Set objSubFolder = Nothing Next Set objFolder = Nothing objFs.DeleteFolder("C:\TEST") 'TESTフォルダ削除 Set ObjFs = Nothing exit sub CopyErr: Set objFile = Nothing Set objSubFolder = Nothing Set objFolder = Nothing objFs.DeleteFolder("C:\TEST") Set ObjFs = Nothing end sub 上の様な処理でファイルのコピーでエラーが発生し CopyErrへ飛んだ場合、TESTフォルダの削除時に ”書込みできません”とエラーが発生し TESTフォルダが削除できません(その中のサブフォルダは削除されます)。 正常にFor Each文を抜けた場合は問題なく削除するので解せません。 For EachからはGo To,Exit等で抜けるとまずいのでしょうか? 上の様な処理を作成しようと思えば、Dirを使用した方がいいのでしょうか? (Nothingの処理は元々なかったのですが、 この現象が出たため試しにつけてみたものです。) どなたかアドバイスをお願い致します。

  • Call GetSubDirでの 任意のセル参照方法について

    はじめまして Excel VBAで、社内の共有サーバのフォルダサイズを確認するようなものを作ったのですが、社員に必要なサーバ名を、VBAの記述を直に変更させたくないので、EXCELの任意のセルに、サーバ名を記述させて、そのセルを参照させる方法を教えていただけませんか? 今組んでいるVBAは以下の通りです。 ============================================================== Function GetSubDir(strTrgDir As String, Optional rRow As Integer) Dim objFs As Object Dim objDir As Object Dim objFile As Object Set objFs = CreateObject("Scripting.FileSystemObject") Set objDir = objFs.Getfolder(strTrgDir) Set objFile = objDir.Files rRow = 1 Sheets(1).Cells(rRow, 1) = "フォルダ名" Sheets(1).Cells(rRow, 2) = "サイズ(MB)" Sheets(1).Cells(rRow, 3) = "作成日" Sheets(1).Cells(rRow, 4) = "最終アクセス日" Sheets(1).Cells(rRow, 5) = "最終更新日" For Each objDir In objDir.SubFolders If objDir.Attributes <> 22 Then rRow = rRow + 1 Debug.Print "rRow =" & rRow, "folder =" & objDir.Path, "size =" & Int(objDir.Size / 1024 / 1024) & "Mbyte" Sheets(1).Cells(rRow, 1) = Mid(objDir.Path, Len(strTrgDir) + 2) Sheets(1).Cells(rRow, 2) = Int(objDir.Size / 1024 / 1024) Sheets(1).Cells(rRow, 3) = objDir.DateCreated Sheets(1).Cells(rRow, 4) = objDir.DateLastAccessed Sheets(1).Cells(rRow, 5) = objDir.DatelastModified 'Call GetSubDir(objDir.Path, rRow) '←サブフォルダを見に行きます End If Next Set objFs = Nothing Set objDir = Nothing MsgBox "終了しました。", vbOKOnly + vbInformation End Function Sub chkDir() Call GetSubDir("\\共有サーバ名\任意フォルダ") End Sub ============================================================== この call GetSubDir以下のサーバ名をセル参照にしたいのですが お知恵を頂ければ幸いです。 よろしくお願いいたします。

  • VBAでのフォルダ指定方法について

    EXCELファイルが保存されているディレクトリ配下のフォルダーを指定できるようにしたくていろいろ試してみたのですが、うまくいきません。 どなたか、お知恵をお貸しください。 以下ソースです。 Private Sub CommandButton1_Click() Dim ShellApp As Object Dim oFolder As Object Dim MyPath As String MyPath = ActiveWorkbook.Path Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "処理ファイルの格納フォルダ選択", 1, MyPath) If Not oFolder Is Nothing Then TextBox1.Value = oFolder.Items.Item.Path End If Set ShellApp = Nothing Set oFolder = Nothing End Sub

  • EXCEL2000 フォルダ内のファイルを検索

    EXCEL2000 フォルダ内のファイルを検索 お分かりになる方がいましたらお力添えの程よろしくお願いします。 任意のフォルダ内で任意のファイルサーチが出来るマクロを実行したいのですが、ファイルサーチの値を全角、半角、大文字、小文字区別なく行いたいのです。 例えば,セル2,2に、topと入力したら、topもtopもTOPもTOPも検索対象に引っかかり、セルに書き出して欲しいのです。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Sub ファイル一覧2() Dim vntF As Variant Dim objFS As FileSearch Dim objFSO As FileSystemObject Dim GYO As Long Dim cntFound As Long Set objFS = Application.FileSearch ' FileSearch Set objFSO = New FileSystemObject ' FSO Rows("5:65536").ClearContents Application.ScreenUpdating = False GYO = 4 With objFS .NewSearch .LookIn = Trim(Cells(1, 2).Value) ' Search開始フォルダ .Filename = Trim(Cells(2, 2).Value) ' 探索ファイル式 .SearchSubFolders = True ' サブフォルダも探索 ' 処理開始 If .Execute() <> 0 Then For Each vntF In .FoundFiles With objFSO.GetFile(vntF) GYO = GYO + 1 Cells(GYO, 1).Value = .Name Cells(GYO, 2).Value = .DateLastModified Cells(GYO, 3).Value = _ Left(.Path, Len(.Path) - Len(.Name) - 1) cntFound = cntFound + 1 End With Next vntF End If End With Set objFS = Nothing Set objFSO = Nothing ' 処理結果の表示 If cntFound = 0 Then MsgBox "見つかりません" Else MsgBox cntFound & "個見つかりました" End If End Sub

  • エクセルの簡単なマクロ機能を追加したいのです

    既存のエクセルマクロ(Sub チェック()以下です)に下記の内容のマクロを付け足したいです。 教えていただけないでしょうか。 付け足したい条件です:  Sheet2のC列に 0  があれば  Sheet1のB列に 愛 と([太字]でセルの背景色を[灰色25%]にして)入れたいです 恐れ入りますがご存じの方がいらっしゃりましたら教えていただきたく何卒よろしくお願いいたします。 ----------------------------------------------- Sub チェック() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim myRange1 As Range Dim myRange2 As Range Dim c1 As Range Dim c2 As Range Dim myCt As Long Set Ws1 = Worksheets("Sheet1") Set Ws2 = Worksheets("Sheet2") Set myRange1 = Ws1.Range("A1", Ws1.Cells(Rows.Count, "A").End(xlUp)) Set myRange2 = Ws2.Range("A1", Ws2.Cells(Rows.Count, "A").End(xlUp)) For Each c1 In myRange1 myCt = 0 For Each c2 In myRange2 If c2.Value = c1.Value Then If c2.Offset(, 1).Value = "" Then c1.Offset(, 1).Interior.ColorIndex = 3 Else c1.Offset(, 1).Value = c2.Offset(, 1).Value End If myCt = myCt + 1 End If Next c2 If myCt > 1 Then c1.Offset(, 1).Interior.ColorIndex = 10 Next c1 Set Ws1 = Nothing Set Ws2 = Nothing Set myRange1 = Nothing Set myRange2 = Nothing End Sub

  • VBAで新しいフォルダを作成するには

    エクセル2010です。 新しいフォルダを作成するにはMkDir関数というのはわかりますが、フォルダがなければ作る、あれば作らないようにしたいのです。 そのやりかたをお教えいただけませんでしょうか? やりたいことは以下のようなことです。 まず、対象フォルダを指定します。 その中に多数のエクセルのBOOKがあります。 このマクロがあるBOOKのSheet1のA列に「名前リスト」があります。 名前が一致するものを、ファイルコピーして、「名前リスト」の右隣B列のセルにある「区分リスト」と同じ名前のサブフォルダ(このマクロがあるBOOKのフォルダのすぐ下です。)に貼り付ける。 ここまでは、以下のコードで少量のデータでのテストはうまくいきました。 しかし、実際には対象が1,000件近くあり、事前に作っておかなければいけないサブフォルダも何十かになります。 そこで、あらかじめサブフォルダを用意するのではなく、このマクロを作動させると自動的にサブフォルダまで作るようにできないかと欲張った質問です。 Sub TEST01()   Dim myPth(1) As String   Dim myCl As Range   Dim wb As Workbook      Set wb = ThisWorkbook   myPth(0) = wb.Path      With Application.FileDialog(msoFileDialogFolderPicker)     If .Show = True Then       myPth(1) = .SelectedItems(1) '対象フォルダ指定     Else       MsgBox "キャンセル"       Exit Sub     End If   End With      With wb.Sheets("Sheet1")     For Each myCl In .Range("A2:A11")       FileCopy myPth(1) & "\" & CStr(myCl.Value) & ".xlsx", myPth(0) & "\" & myCl.Offset(, 1).Value & "\" & CStr(myCl.Value) & ".xlsx"       myCl.Offset(, 2).Value = "完了"     Next myCl   End With End Sub

  • もしフォルダがなかったら作成するというコード

    エクセルvbaで、 フォルダA(FileA)の中のPDFファイル全部を、フォルダB(FileB)へコピーする というコードを作成しました。 が、パスが見つかりませんとエラーが出ます。 その理由は、移動先にフォルダがないからです。 フォルダがない場合は、フォルダを作成するというコードを入れたいのですが、 もしご存知の方いらっしゃいましたら、どうか教えてください。 エクセル2010dを使用しています。 vba初心者で、ここまでネット検索などで作りましたので、いびつかもしれません。 どうぞよろしくお願いいたします。 ---------------------------------- Sub CopyPDFwithFile() 'フォルダ内のPDFを全てAをBへコピー Dim objFileSys As Object Dim strScriptPath As String Dim strCopyFrom As String Dim strCopyTo As String Dim MaxRow As Integer Dim i As Long Dim k As Long Dim FileA, FileB As String n = Range("V6").Value MaxRow = ThisWorkbook.Sheets(n).Cells(11, 22).End(xlDown).Row For i = 1 To MaxRow - 10 FileA = Range("V" & i + 10).Value FileB = Range("W" & i + 10).Value Debug.Print FileA Debug.Print FileB Set objFileSys = CreateObject("Scripting.FileSystemObject") strScriptPath = ThisWorkbook.Path Debug.Print strScriptPath strCopyFrom = objFileSys.BuildPath(FileA, ".pdf") strCopyTo = objFileSys.BuildPath(FileB, "new\.pdf") objFileSys.CopyFile FileA & "\*.pdf", FileB  '←ここでエラー、ストップします Set objFileSys = Nothing                                Next i End Sub ---------------------------------------------

専門家に質問してみよう