
お世話になります。
指定フォルダ内に何種類か(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.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
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
お探しの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)
-
VBAで複数のフォルダから最新のファイルを検索してコピーするには?
Excel(エクセル)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
6
VBSでフォルダ内の最新VBAファイルを開き実行したい
Visual Basic(VBA)
-
7
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
10
Dir関数で読み取り順を操作できる?
Visual Basic(VBA)
-
11
DATE型変数を初期化する方法
Visual Basic(VBA)
-
12
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
13
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
14
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
15
「#エラー」の回避
Access(アクセス)
-
16
【Excel VBA】ファイル名が一定でないファイルの指定方法
Excel(エクセル)
-
17
Excelのマクロで実行時エラー”1004”を解決するには?
その他(データベース)
-
18
エクセルVBAでパスの¥マークについて
Access(アクセス)
-
19
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
20
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
COM
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
コマンドプロンプトのコピー関...
-
実行ファイルのパスを取得したい
-
ShellExecuteでエクセルファイ...
-
xcopyコマンドの進行状況を表示...
-
VBAでパワーシェルを実行したい...
-
【Excel VBA】Power Qurry でCS...
-
VBA★PDFをPDFアプリで印刷し...
-
C#でのProcess.Startと変数path
-
初心者powershellのPS1ファイル...
-
エクセルVBAで一つ上の階層...
-
FolderBrowserDialogについて-2
-
【VBA】ExcelマクロでCSVファイ...
-
VB2005 でパス名が誤っていない...
-
エクセルのマクロで特定フォル...
-
SDIアプリ D&Dで複数のファイ...
-
VS2012での\\(円マーク)とバッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
xcopyコマンドの進行状況を表示...
-
Excel 相対パス
-
実行ファイルのパスを取得したい
-
コマンドプロンプトのコピー関...
-
【VB.NET】App.configにファイ...
-
エクセルのマクロで特定フォル...
-
VBA★PDFをPDFアプリで印刷し...
-
ExcelVBAの使い方 ¥の使い方...
-
fopenでのパス指定
-
ExcelのVBAで上書き保存を確...
-
EXCEL(VBA)で指定フォルダ内の...
-
C#でのProcess.Startと変数path
-
【VBA】ExcelマクロでCSVファイ...
-
VBAでパワーシェルを実行したい...
-
A列に記載されているフォルダ...
-
初心者powershellのPS1ファイル...
-
Eclipse
-
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の値が入ってしまいましたが、ここまで教えて頂いたのであとはなんとかやってみます。有難うございました!