以前類似の質問をし、回答でVBスクリプトのコードを書いていただきました。
http://q.hatena.ne.jp/1526039092
コードを流用できそうですが私は知識が無くうまくいきませんでした。
今回実現したいことは
フォルダAの下に多数のフォルダA-1,A-2,A-3等を作り、それらの中に複数枚(0~30枚)の画像ファイルを入れます。
このフォルダ群の中で11枚以上の画像ファイルが入っているフォルダを
フォルダBの下にコピーしたいです。
ただし番号の若いファイル10枚目まではコピーせずに11枚目以降のみをコピーします。
例えば
フォルダAの下のフォルダA-1には画像ファイルが8枚,A-2には10枚,A-3には13枚の場合には
フォルダBにフォルダA-3のフォルダのみをコピーし、そのフォルダの中にはA-3の中に入っていた画像ファイルのうち若いファイル名から数えて
11枚目~13枚目の3枚のみをコピーする。
というものです。
具体的なコードを記載いただけると大変助かります。
どうぞよろしくお願いいたします。
なおOSはwindows10です。
お試し下さい。
Option Explicit Dim objRecSet Dim objFileSys Dim objFolder Dim objSubFolder Dim objSubFolders Dim strPath Dim intCnt Dim intNFiles Dim strFileName Dim strFNSorted Const INT_N_FILES = 10 ' スキップするファイル数 Const STR_PATH_SRC = "C:\XXXXX" ' コピー元 親フォルダ Const STR_PATH_DST = "C:\YYYYY" ' コピー先 親フォルダ Const AD_VAR_CHAR = 200 ' adVarChar, ADO DataTypeEnum Set objFileSys = CreateObject("Scripting.FileSystemObject") Set objFolder = objFileSys.GetFolder(STR_PATH_SRC) Set objSubFolders = objFolder.SubFolders For Each objSubFolder In objSubFolders intNFiles = objSubFolder.Files.Count If objSubFolder.Files.Count > INT_N_FILES Then strPath = STR_PATH_DST & "\" & objSubFolder.Name If Not objFileSys.FolderExists(strPath) Then objFileSys.CreateFolder(strPath) End If Set objRecSet = CreateObject("ADODB.Recordset") Call objRecSet.Fields.Append("FileName", AD_VAR_CHAR, 255) Call objRecSet.Open() For Each strFileName In objSubFolder.Files Call objRecSet.AddNew() objRecSet.Fields("FileName").Value = strFileName.Name Next Call objRecSet.Update() objRecSet.Sort = "FileName ASC" strFNSorted = objRecSet.GetRows() Call objRecSet.Close() Set objRecSet = Nothing For intCnt = INT_N_FILES To intNFiles - 1 Call objFileSys.CopyFile(objSubFolder & "\" & strFNSorted(0, intCnt), strPath & "\" & strFNSorted(0, intCnt), True) Next End If Next MsgBox "処理を終了しました。", vbOkOnly + vbInformation, "終了"
ただいま動かしてみました。希望通りの動きをすることを確認しました。
2019/09/13 16:27:12いつもありがとうございます。
m(_ _)m