お世話になります。
指定フォルダ内に何種類か(xls,doc等)のファイルがあり、ファイル名はTitle毎としてあります。
タイトル毎の最新ファイル(TaitleAであれば03のファイル名を、TitleBであれば04)のファイル名を取得したいのですが、どうすれば良いか、詳しい方よろしくお願い致します。
(※当方バージョンは2003です。)
--------------------------------
(フォルダ内)
TitleA01.xls TitleB01.doc
TitleA02.xls TitleB02.doc
TitleA03.xls TitleB03.doc
TitleB04.doc
--------------------------------
No.1ベストアンサー
- 回答日時:
こんにちは。
色々ありますが、この手の処理ではもっともベーシックな手法で、
Dir関数をループするやり方です。
ファイル名が「タイトル」から始まるファイルを、
拡張子は無視して、総当たりで検索して、
ファイル名を文字列値としての大小比較をすることで、簡単に、
一番大きな数字が付いたファイルを判別するように書いています。
簡単な記述であることを重視していますので、
もしも、"TitleA2.xls"とか"TitleA02.xls"とか
不規則な命名のファイルが混じっていると、
"TitleA03.xls"よりも新しい、と判断される
ような書き方を選びましたので、注意してください。
実際の処理の場面でのお求めに対して、もしも不足があるようでしたら、
ご提示のファイル名について、どこまでが具体例なのか
判るような補足を書いてみて下さい。
例示が抽象的過ぎていたりすると、こちらからは、
お役に立てないものしか提示できないのかも知れませんので。
Sub Re8953548G()
Dim sDir As String
Dim sTitleHead As String
Dim sTemp As String
Dim sReturn As String
' ' 「指定フォルダ」へのパスをドライブ名から指定
sDir = "D:\Work"
' ' ファイル名を前方一致で篩に掛ける「タイトル」を指定
sTitleHead = "TitleA"
' ' Dir関数でファイル名を取得
sTemp = Dir(sDir & "\" & sTitleHead & "*")
' ' Dir関数をループ
Do While sTemp <> "" ' Dir関数でファイル名を取得し尽したらループ終了
' ' ファイル名が「タイトル」で始まるものだけ篩に掛ける
If sTemp Like sTitleHead & "*" Then
If sTemp > sReturn Then sReturn = sTemp
End If
sTemp = Dir() ' ' Dir関数で次のファイル名を取得
Loop
MsgBox "フォルダ:" & sDir & vbLf & "タイトル:" & sTitleHead & vbLf & "最新:" & sReturn
End Sub
No.2
- 回答日時:
#1です。
補足コメント拝見しました。拡張子別に「最終のファイル名を取得したい」ということは理解出来ました。
実は#1の時点でも、そういうニーズは想定していて実際に書いていたのですが、
それにしては、複数の結果を出力する方法の指定が無かったので、
拡張子別ではない、と判断したのでした。
とりあえず、出力の仕方が解りませんから、
以下の記述に照らして、3通りの扱い方を説明しますので、
そちらで応用なってください。
1)拡張子毎にループした中で、個々の拡張子の最終ファイル名を取得したい場合
Loop
MsgBox sReturn ' ←ここ(LoopとNextの間)で sReturn 文字列を
Next i
2)一通りループが済んだ後で、配列として最終ファイル名を取得したい場合
Next i
の後に、arrReturn() 文字列配列を
3)区切られた連続した文字列として最終ファイル名を取得したい場合
Next i
の後に、MsgBox Join(arrReturn(), ",") 文字列を (←例はカンマ区切り)
Sub Re8953548Ga()
Dim arrExtension() As String
Dim arrReturn() As String
Dim sDir As String
Dim sTitleHead As String
Dim sTemp As String
Dim sReturn As String
Dim nUB As Long
Dim i As Long
' ' 「指定フォルダ」へのパスをドライブ名から指定
sDir = "L:\Work"
' ' ファイル名を前方一致で篩に掛ける「タイトル」を指定
sTitleHead = "TitleA"
' ' 拡張子をカンマ区切りテキストで指定 "*.拡張子"文字列の配列
arrExtension() = Split("*.xls,*.doc,*.mdb,*.ppt,*.txt", ",")
' ' ■■■■ 以上、要指定 ■■■■
' ' "*.拡張子"文字列の配列のサイズ
nUB = UBound(arrExtension())
' ' 戻り値を格納する配列変数を再定義
ReDim arrReturn(nUB) As String
' ' 拡張子の数だけループ
For i = 0 To nUB
sReturn = ""
' ' Dir関数でファイル名を取得
sTemp = Dir(sDir & "\" & sTitleHead & arrExtension(i))
' ' Dir関数をループ
Do While sTemp <> "" ' Dir関数でファイル名を取得し尽したらループ終了
' ' ファイル名を文字列値としての大小比較 大きい方をsReturnに記録
If sTemp > sReturn Then sReturn = sTemp
sTemp = Dir() ' Dir関数で次のファイル名を取得
Loop
' ' 出力用の配列に「最新ファイル」の名前を格納
arrReturn(i) = sReturn
Next i
MsgBox "フォルダ:" & sDir & vbLf & "タイトル:" & sTitleHead & vbLf _
& "最新:" & vbTab & Join(arrReturn(), vbLf & vbTab)
End Sub
No.3
- 回答日時:
こんにちは。
ご自分で、このようなものを作る時は、コマンドプロンプトなどで、Dir を出してしまい、それをExcelに貼り付けるということもアリだと思います。今回、コマンドプロンプトのDirを使わなかった理由は、私の設定が、一般的な設定ではなかったからです。以下は、Excelで出力も可能ですが、MsgBox にしてあります。拡張子と、日付だけで調べます。
なお、ファイル名に関しては、この版では、考慮していません。あくまでも、拡張子とファイルスタンプの最終更新日に対するものです。
'//
Sub MainMacro()
Dim n As Variant
Dim sPath As String
sPath = "C:\Temp\" '必ず最後は¥をつける
For Each n In Array(".doc", ".xls", ".txt") 'ここに拡張子を入れてください。
GetLastFile n, sPath
Next
End Sub
Sub GetLastFile(Ext As Variant, sPath As Variant)
'拡張子 Ext, 調べるパス sPath
Dim Fso As Object
Dim f As Variant
Dim i As Long, j As Long
Dim r As Variant
Dim Ar() As Variant
Dim buft As Date, bufn As String
Set Fso = CreateObject("Scripting.FileSystemObject")
j = Len(Ext)
buft = 0
bufn = ""
ReDim Ar(1, 1)
With Fso
For Each f In .GetFolder(sPath).Files
If Trim(f.Name) <> "" And _
StrConv(Right(f.Name, j), vbLowerCase) Like Ext Then
If f.DateLastModified > buft Then
buft = f.DateLastModified '最終更新日
bufn = f.Name
End If
End If
Next f
End With
If bufn <> "" Then
MsgBox bufn & " " & buft
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/04/17 13:07
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
VBA 最新のフォルダ取得
Excel(エクセル)
-
指定したフォルダ内の最新ファイルのみをコピー
Visual Basic(VBA)
-
VBSでフォルダ内の最新VBAファイルを開き実行したい
Visual Basic(VBA)
-
-
4
VBAで新しい日付順にファイルを検索するには?
PowerPoint(パワーポイント)
-
5
フォルダ内の更新日時が一番新しいファイルを開きたい
その他(プログラミング・Web制作)
-
6
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
7
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
9
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
10
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
11
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
12
ファイルが見つからない時、スルーしたい。
Visual Basic(VBA)
-
13
DATE型変数を初期化する方法
Visual Basic(VBA)
-
14
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
15
VBAで複数のフォルダから最新のファイルを検索してコピーするには?
Excel(エクセル)
-
16
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
17
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
18
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
19
VBS 指定のフォルダ内の最新のフォルダ名をメモに記載してデスクトップに保存
Excel(エクセル)
-
20
フォルダ内の、最新のタイムスタンプのファイルを1つだけ取り出す(VBscript)
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでパワーシェルを実行したい...
-
【VB.NET】App.configにファイ...
-
初心者powershellのPS1ファイル...
-
SaveAsの保存先について
-
エクセルvbaでdocuworksprinter...
-
【VBA】ExcelマクロでCSVファイ...
-
C#でのProcess.Startと変数path
-
xcopyコマンドの進行状況を表示...
-
パスワード保護されたExcelファ...
-
FolderBrowserDialogについて-2
-
EXCEL(VBA)で指定フォルダ内の...
-
バッチファイル 二つ上のディ...
-
SendKeysステートメント
-
VBAで、VBのapp.pathと同じ機能...
-
エクセルVBAで一つ上の階層...
-
AccessからExcel最小化
-
エディットボックスの数値をテ...
-
開いているファイルを削除し、...
-
DOSのバッチファイルでカレント...
-
Excel 相対パス
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
xcopyコマンドの進行状況を表示...
-
【VBA】ExcelマクロでCSVファイ...
-
EXCEL(VBA)で指定フォルダ内の...
-
エクセルのマクロで特定フォル...
-
パスワード保護されたExcelファ...
-
ExcelVBAの使い方 ¥の使い方...
-
開いているファイルを削除し、...
-
SaveAsの保存先について
-
初心者powershellのPS1ファイル...
-
fopenでのパス指定
-
VBA★PDFをPDFアプリで印刷し...
-
【Excel VBA】Power Qurry のソ...
-
指定したフォルダ内の最新ファ...
-
A列に記載されているフォルダ...
-
ExcelのVBAで上書き保存を確...
おすすめ情報
分かり易い回答有難うございます。
言葉足らずにすみません。実際はTitleAでも何種類(exe,doc)のファイルがあり種類別で最終のファイル名を取得したいと思っています。(同じタイトルがついていてファイルの種類が違うということです)教えて頂いたものを試してみましたが、1つの結果出力だったので、お力をお貸し頂ければ幸いです。よろしくお願い致します。(イメージを下記に書いておきます)
--------------------------------
(フォルダ内)
TitleA01.xls TitleB01.doc
TitleA02.xls TitleB02.doc
TitleA03.xls TitleB03.doc
TitleA01.doc TitleB04.doc
TitleA02.doc TitleB01.xls
--------------------------------
やりたかった方法を教えて頂き感謝いたします。
ただ横配列を縦配列にしようと思いWorksheetFunction.Transpose(arrReturn)にてセルに出力しようとしましたが、#N/Aの値が入ってしまいましたが、ここまで教えて頂いたのであとはなんとかやってみます。有難うございました!