
勤怠処理を行っています。
記録の方法は、各課や係別にフォルダーがあって、その中に社員が月毎に勤務時間をエクセルファイルで記録しています。
¥**¥A部¥B課¥C係¥社員A¥12月.xls
と言うような感じで構成されています。A部より下層はフォルダーが複数存在します。
この状態で、A部のフォルダーをユーザーが指定すると、下層のフォルダーを全て検索し、最下層の最新更新日の.xlsのフルパスとファイル名を取得して、それをシート上に表示したいのです。
フォルダー内全てのファイルの最終更新日を取得する方法は検索すると見つかります。それをいじって日付を比較して最新日を抜き出せばいいのでしょうが、コマンドの意味が判っていないので上手く行きません。
完全に「教えて君」で申し訳有りませんが、宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
Private dt As Date
Private fname As String
Sub test()
Const Ps As String = "c:¥**¥A部"
dt = 0
Call FFS(Ps)
Cells(1, 1) = fname
End Sub
Private Sub FFS(ByVal Ps As String)
Dim f
With CreateObject("Scripting.FileSystemObject")
For Each f In .Getfolder(Ps).Files
If f.DateLastModified > dt Then
dt = f.DateLastModified
fname = f.Path
End If
Next
For Each f In .Getfolder(Ps).SubFolders
Call FFS(f.Path)
Next
End With
End Sub
最新だけのファイルのフルパスがA1に表示されるようにしました。
「再帰呼び出し」が理解しづらいと思って「そこそこ難しいロジック」と書いたのですが。
最新日を探す(最大値を探す、最小値を探す同じロジックです)
要するに最初にdt=0として
dtより大きい日付がきたらの値をdtにセットしてそのときのファイル名をFnameに入れる。
全てのファイルの処理が終わるとdtに最新日、fnameのその名前が残る。
実際の所コードの意味が分からないところもありますが、パス名を変数で変えていく事により全員の最新ファイルを検索できそうです。
本当にありがとうございました。
No.1
- 回答日時:
>フォルダー内全てのファイルの最終更新日を取得する方法は検索すると見つかります
それが簡単にできるならそれを提示してもらえばそこから回答へはすぐだと思います。
私にはVBAでの回答で、かつそこそこ難しいロジックしか思いつきません。
それでよければコードを書いてもいいのですが
この回答への補足
幾つか見つけたのですが、簡潔なのはこれです。
掲示板から拾ったものですが、質問内容から実行できるの思うのですが、どちらもエラーで停止します。
ファイル名の取得ではConst Ps String = "c:\tmp"
時間取得の方は階層Box.Value
の箇所です。
時間取得の方はIF Thenを削除すれば動作しますが、ファイル名の方は私には全く分かりません。
これでどうでしょうか?
’ファイル名を取得する方法
Private n As Long
Sub test()
Dim tbl()
Dim i As Long
Const Ps String = "c:\tmp"
n = 0
Call FFS(Ps, tbl())
For i = 1 To UBound(tbl)
MsgBox tbl(i)
Next
End Sub
Private Sub FFS(ByVal Ps As String, ByRef tbl())
Dim f
With CreateObject("Scripting.FileSystemObject")
For Each f In .GetFolder(Ps).Files
n = n + 1
ReDim Preserve tbl(1 To n)
tbl(n) = f.Path '--> f.Name
Next
For Each f In .GetFolder(Ps).SubFolders
Call FFS(f.Path, tbl())
Next
End With
End Sub
’時間を取得する方法
Function get_folder_path(mes, Optional ByVal opt As Variant = 1)
Dim fld As Object
Set fld = CreateObject("Shell.Application").BrowseForFolder(0, mes, opt, 0)
On Error Resume Next
If Not fld Is Nothing Then
get_folder_path = fld.items.Item.Path
If Err.Number <> 0 Then
get_folder_path = False
End If
Else
get_folder_path = False
End If
End Function
Sub test()
Dim ファイルパス As Variant
Dim tbl() As Variant, i As Long, f As Object
ファイルパス = get_folder_path("保存先フォルダを選択して下さい")
If TypeName(ファイルパス) <> "Boolean" Then
階層Box.Value = ファイルパス
End If
With CreateObject("Scripting.FileSystemObject").Getfolder(ファイルパス)
ReDim tbl(1 To .Files.Count, 1 To 4) '2と3は他のフィールドで使用の為4に年月日
For Each f In .Files
i = i + 1
tbl(i, 1) = f.Name
tbl(i, 4) = Format(f.DateLastModified, "yyyy-mm-dd") '時間まで入っるので、時間を削除
Next f
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- 画像編集・動画編集・音楽編集 mp3の音楽ファイルの「アルバム」名を一括入力する方法 6 2023/05/08 14:58
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- その他(Microsoft Office) 会社PCのメールが更新されない 6 2023/07/17 23:19
- Windows 10 引き続き 別のwin10から更新(アップデート)する方法 2 2022/06/04 01:19
- その他(プログラミング・Web制作) 新しいフォルダを作るbatファイルを作りたいです。 1 2022/10/15 00:41
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
- Windows 10 フォルダの新規作成を必ず「ドキュメント」にする方法 1 2023/06/24 09:08
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのファイルサイズ
-
タイムスタンプの更新の方法2
-
エクセルVBAでの呼出操作を...
-
Visual C++ 2008 (Win32)を使っ...
-
AccessからExcelファイルのシー...
-
マクロのアラームサウンドについて
-
VB2005でエクセルファイル内...
-
VBSのFor文
-
EXCEL VBAにおけるサンプルコ...
-
フォルダー内の最新更新エクセ...
-
VBA ディレクトリ名をワイルド...
-
大量にあるHTMLファイルのソー...
-
ファイルのアップロードと表示
-
VB2008 Expressで、Excelファイ...
-
エクセルvbaでdocuworksprinter...
-
リストボックスに関連してファ...
-
エクセルのプロパティーでセキ...
-
frxファイルの役目
-
【VBA】テキストファイルを指定...
-
エクセルのショートカットキー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動かなくなってしまった古いVBA...
-
「エクセルファイルが開いてい...
-
FileDialog オブジェクトでファ...
-
VBAでフォルダ内のhtmlファイル...
-
VB6でUTF-8ファイルの読取りを
-
vbaサブフォルダーをワイルドカ...
-
webブラウザからローカルファイ...
-
ffftpでファイル取得が0バイト...
-
サブフォルダ含むフォルダ内の...
-
ファイルを複数選択した時のフ...
-
VBAでCSVファイルを読み込もう...
-
複数のワークブックのVBAを変更...
-
excel マクロ PDF化の際のエラ...
-
Wordのプロパティ・総ページ数...
-
フォルダ階層・ファイル名・ペ...
-
フォルダ内のファイル存在監視...
-
AccessからOLEオブジェクト型の...
-
VB.net XMLの作成方法 Iniの代替
-
【ACCESS VBA】アクセスからデ...
-
vbs ブック共有を解除
おすすめ情報