プロが教える店舗&オフィスのセキュリティ対策術

タイトルの作業をVBAで行いたいです。

ファイル名は「日付_タイトル_管理番号」となっていて、例えば

20151202_販売管理_01
20151202_販売管理_02
20151202_販売管理_03

このように同日に似たようなファイル名で複数ファイルが出力されます。また出力されるファイル数は日によって違い、一定ではありません。

この中で管理番号の一番大きいファイルのみ開きたいのですが良いアイデアはないでしょうか?

A 回答 (1件)

ゴリ押しで良ければ。


指定フォルダのファイルから番号を抜き出し、それぞれ比較をして、最終的にMaxNoのファイルを開くマクロです

※ファイルが複数のフォルダにばらけている場合は、更にコードを編集する必要があります
※数カ所、ご自身の環境に合わせて修正が必要な箇所があります
※何の種類のファイルを開きたいのか分からなかったので、とりあえずエクセルファイルとしています

Sub sample()

Dim KanriNo, MaxNo, myBook

myBook = Dir("C:\*.xls") 'Cフォルダに各ファイルが保存されている場合です。環境に合わせてパスや拡張子を変更してください

'それぞれのファイルから番号を抜き出し、最大値をMaxNoに保管します
Do Until myBook = ""
KanriNo = TrimNo(myBook)
If KanriNo >= MaxNo Then MaxNo = KanriNo
myBook = Dir()
Loop

'MaxNoの桁数を、開くファイルに揃えるために先頭にゼロを補完します
'数字の桁数は環境に合わせて、0の数を変更してください
'このサンプルでは3桁の数字に揃えています
Select Case Len(MaxNo)
Case 2 'MaxNoが2桁だった場合、先頭に0を1つ足して3桁(00*)の形式にします
MaxNo = "0" & MaxNo
Case 1 'MaxNoが1桁だった場合、先頭に0を2つ足して3桁(00*)の形式にします
MaxNo = "00" & MaxNo
End Select

'ファイルを開きます。日付はDate関数で得られるYYYY/MM/DD形式からReplaceを用いて8桁表示にしています
'拡張子がxlsでない場合は、環境に合わせて変更してください
Workbooks.Open "c:\" & Replace(Date, "/", "") & "_販売管理_" & MaxNo & ".xls"

End Sub

'ファイル名から番号を抜き出すユーザー関数です
Function TrimNo(strings)
If strings <> "" Then _
TrimNo = CInt(Replace(Mid(strings, InStrRev(strings, "_") + 1, Len(strings) - InStrRev(strings, "_")), ".xls", ""))
End Function
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

希望していた通りに動作しました。

パスや拡張子にも気を使って頂き、本当にありがとうございました。

お礼日時:2015/12/03 20:34

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