アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel VBAでフォルダが何層にもなっていて最下層の中にCSVファイルがあり最上層のファイルを指定したら最下層の最新(更新日が1番新しい)のCSVを指定したいのですがご教授願います。

A 回答 (4件)

#3続き


Option Explicit
Private FSO As Object
Private arrPath() As Variant
Private n As Integer
Sub sample()
Dim i As Integer
Dim strV As String
Dim base_path As String
' base_path= ???
n = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Call recursion(FSO.GetFolder(base_path))
strV = ""
For i = 0 To UBound(arrPath)
If UBound(Split(arrPath(i), "\")) > UBound(Split(strV, "\")) Then
strV = arrPath(i)
End If
Next
Dim strFile As String, newModified As String
Dim f As Object, d As Date
strFile = Dir(strV & "\*.csv")
Do Until strFile = ""
Set f = FSO.GetFile(strV & "\" & strFile)
If d <= f.DateLastModified Then
d = f.DateLastModified
newModified = f.Name
End If
strFile = Dir
Loop
If Not f Is Nothing Then Debug.Print (strV & "\" & newModified)
Set FSO = Nothing
End Sub
Private Sub recursion(ByVal parent_path As Object)
Dim recursion_path As Object
For Each recursion_path In parent_path.SubFolders
Call recursion(recursion_path)
Next
If parent_path.SubFolders.Count = 0 Then
ReDim Preserve arrPath(0 To n)
arrPath(n) = parent_path.Path
n = n + 1
End If
End Sub
    • good
    • 0

こんばんは


最下層のフォルダーは1つですか?
VBAでやると比較的分かり難いコードになると思いますが、自身で改修してくださいね。
>最上層のファイルを指定したら
ここがアバウトなので base_path としてサンプルを書いときます。
再帰処理はよく見かけるFileSystemObjectで 最下層フォルダは¥の数を目安にしていますが、
同数の場合フォルダ内の表示順位の若い方が取得されます。
(構造がアバウトですしサンプルなので良しとしてください)

base_pathに最上層のファイルパスを代入し実行するとイミディエイトウィンドウに最下層にある最更新csvファイルフルパスが出力されるはずです
見つからない場合は出力されません
ステップ実行などで確認してください

実行プロシージャは sample です
デバッグ改修の時は適所にDebug.Printなどで列挙すれば良いと思います
(デバッグ確認3回だけ・・サンプルですのでエラーなどがある場合、処理を追加してください)
コードは次の回答欄に
    • good
    • 0

こんばんは



ファイル名はどうでも良くて、CSVファイルの最新のものという意味で良いのでしょうか?

以前は、FileSearchという便利なメソッドがあって、サブフォルダ迄まとめて検索できたようですが、現在は使えなくなってしまったので、順に検索していくしかなさそうです。

「VBA サブフォルダ ファイル一覧」あたりで検索してみれば、再帰でファイル一覧を取得するようなサンプルがたくさん見つかることと思います。
一覧を作成する代わりに、CSVファイルの最新のもの(作成日なのか更新日なのか不明ですが・・)を選ぶようにすれば、比較的簡単にご質問の内容のものを作成できると思います。

ちなみに、更新日等はファイルオブジェクトのプロパティから
 DateLastModified --最終更新日
 DateCreated ----作成日
などで比較をすれば宜しいでしょう。


VBAではありませんけれど、手操作でも比較的簡単にできる方法をご参考までに。
エクスプローラで対象のフォルダを開いて、検索窓に「.csv」を入力して検索すると、フォルダ内のCSVファイルの一覧が表示できます。
詳細表示などにしておいて、「更新日時」の見出しをクリックすれば、昇順/降順に並び替えることができますので簡単に検索することが可能です。
    • good
    • 0

手動で選択するのは無し?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!