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

あるフォルダにjpgファイルが入っています。
jpgファイルのファイル名は数字であり、この数字は1からはじまるとは限りません。
行いたいこと→このファイルの中で一番若い数字をCells(5,1)に書き出したいです。
そこで、欲しいのはフォルダを開いたときに一番上に来る(=一番小さい数字)ファイル名だったため、以下のマクロを組みました。

'jpgファイル名を取り込む
Buf = Dir(FolderPath & "*.jpg")
'jpgファイルの一番最初のファイル名をCells(5, 1)に出力
Do While cnt <= 1
Cells(5, 1).Value = Buf
Exit Do
Loop
Cells(5, 1).Value = Replace(Cells(5, 1).Value, ".jpg", "") 'ファイル名から.jpgを削除

ですが、これを実行すると、仮にファイル名最小が20だったとしても、100などの1から始まる数字が入ってしまいます。
どのようにすればこれを改善できるでしょうか?

説明下手で申し訳ありません。補足もしますので、どなたか知恵をお貸しください。

A 回答 (2件)

以下のようにしてください。


FolderPath はあなたの環境に書き換えてください。
数字に変換できないファイル名の場合、そのファイルは無視されます。
A001.jpg 等はむしされます。

Public Sub 試験()
Dim FolderPath As String
FolderPath = "d:\goo\data\"
Dim Buf As String
Dim name As String
Dim temp As String
Buf = dir(FolderPath & "*.jpg")
name = ""
Do While Buf <> ""
temp = Left(Buf, Len(Buf) - 4)
If IsNumeric(temp) = True Then
If name = "" Then
name = temp
End If
If CLng(temp) < CLng(name) Then
name = temp
End If
End If
Buf = dir()
Loop
Cells(5, 1).Value = name
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
思っていた動作になりました!!

お礼日時:2021/01/15 12:26

けっこう面倒くさい。



ファイル名をセルに書き出す
ファイル名から数字部分を取り出して、ファイ名の隣の列に書き出す
ファイルがなくなるまでループ
終わったら、エクセルのソートを数値列で。
一番上に来たファイル名を取得する。

まずdir関数は順不同。
数字は数値に変えないとソートできない。

分からないなら、優しい人を待ってください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ソートする方法が一番確実な気がするので考えてみようと思います。

お礼日時:2021/01/15 12:27

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