質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

3回答

10929閲覧

フォルダ内にある最後のファイル名を取得

mii

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2015/05/11 12:08

フォルダ内にある最後のファイル名を取得し、その一部をワークシートの名前にするため以下のコードをどこからかコピペして加工して使ってます。

フォルダ内のファイル名にせよ、最終更新日時にせよ、フォルダ内の一番最後に表記されてあるファイルを取得するつもりなのですが、失敗したり成功したりとよくメカニズムがわかっていません。

下記コードでは何が問題なのでしょうか。

また、①ファイル名の昇順降順、②最新更新日順

で一番最後のファイル名を取得したい場合どのようなコードになるでしょうか。

独学でVBAを学んでいますが、早くも行き詰ってます。

Sub フォルダ内にある最後のファイル名を取得()
Dim objFile As Object, strFolder As String, strFilePath As String, Spybook As String

'// FSOオブジェクト生成 Set objFile = CreateObject("Scripting.FileSystemObject") '// 対象ブック格納ディレクトリ設定 strFolder = "" '// 対象フォルダ上のファイルを1つずつ取り出す For Each objFile In objFile.GetFolder(strFolder).Files With objFile '// ファイル名「~.xls」の場合、変数にパスを格納 '// 尚、日付で特定する場合、本If文に条件を追加してけば良い If .Name Like "*.xlsx" Then strFilePath = objFile.Path End With Next '// 変数にパスが格納されていれば、ブックを開く '// このとき、変数の値は最後に取得したファイルパス If strFilePath <> "" Then Workbooks.Open Filename:=strFilePath End If Range(Cells(1, 1), Cells(Rows.Count, 2).End(xlUp)).Copy Workbooks("").Activate Worksheets(8).Cells(1, 1).PasteSpecial Paste:=xlPasteValues Worksheets(8).Name = Mid(strFilePath, InStr(strFilePath, "") + , ) & "" Cells(1, 2).Value = ActiveSheet.Name Application.CutCopyMode = False

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

こんにちは
直接、最後のファイルを取り出す方法はわかりませんが、

'表示回数を降順に並び替え(ワークシートの1番目、対象C列、3行目からデータ部)
ActiveWorkbook.Worksheets(1).Sort.SortFields.Add _
Key:=Range("c3"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(1).Sort
.SetRange Range("A2:U3000") ←対象範囲
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

という感じなので、ファイル名がどのようにネーミングされているのにもよりますが
一度、ワークシート上に全ファイル名を抽出し、ソートして、1番上または下、
または日付が最新のファイルを取り出す・・などすればいかがでしょうか。

投稿2015/07/16 04:32

GTN

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Filesプロパティで得られるファイル名群は、並び順についてなんの法則性もないと想定した方がよろしいかと存じます。

1)については、
ファイル名を一時保存する変数を用意して指定フォルダ内のファイル名を大小比較していけば、特定できそうです。

2)については、
ファイルオブジェクトのDateLastModifiedプロパティが最終更新日時なので、ファイル名とこのデータを一時保存して、フォルダ内のファイルすべてを検査して最も新しい日時のファイル名を特定することができそうです。

投稿2015/06/25 09:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ご質問の「失敗」「成功」の定義があいまいなので、意図した最後のファイルが取得できたかどうかと解釈して書きます。
Filesオブジェクトに格納されているファイルオブジェクトの順番は整列されたものではありません。
別に用意した配列などの格納領域にすべてのファイルオブジェクトを一旦格納して、ソート対象の値でソートしてから意図する位置のファイルオブジェクトを取り出すようにする必要があります。

投稿2015/05/12 04:24

編集2015/05/12 04:26
KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問