[[20150501092644]] 『オープンしたいファイル名をあいまいにしたい』(SDA) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オープンしたいファイル名をあいまいにしたい』(SDA)

必要なデータを複数のブックで検索して抽出するマクロを記述しているのですが、データ元のファイル名にはそのファイルを更新した日付が入っています。その日付が変わっても、オープンするにはどうすれば良いでしょうか。拙い文章ですみません。

例えば、"データ表20150501"という風に最後に日付が入っている場合や、"【重要】(20150501)データ表"という風に真ん中に日付が入っている場合もあります。これはワイルドカードを使えば良いのでしょうか…?また、この場合に、一番新しい日付のものをオープンするということは可能でしょうか?
ファイルをオープンせずにできれば一番良いのですが、まだそこまでの技術はありません…。どなたか宜しくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 ファイル名 = DIR(該当のフォルダーパス文字列 & "\*データ表*.xlsx") で 取得できます。
 ただし、対象が複数あれば、ファイル名の若いものになります。

 開かずに・・・というのは、できないことはないですが、開いて処理したほうが何かとやりやすいですよ。
 Application.ScreenUpdationg = False にsて、開いていることを見せなければいいと思います。

 参照する項目が少なければ、開かないで抽出したほうが、それは、早いですけどね。

(β) 2015/05/01(金) 09:47


βさん、有難うございます。

Sub workbook_open()

    Dim fileName As String
        fileName = Dir("\\パス" & "\*データ表*.xlsx")
        Do Until fileName = ""
        ' /// 処理 ///
        fileName = Dir()
    Loop
    Workbooks.Open fileName
End Sub

このように記述したところ、「アプリケーション定義またはオブジェクト定義のエラーです」とエラーが出てしまいました。何故でしょうか……。
(SDA) 2015/05/01(金) 14:14


 まず、エラーになったのは、どのコードですか?
 Workbooks.Open かな? ループさせて、もし複数ファイルがあったとして、最後は空白。
 で、ループを抜けて、そこで 空白 を オープン?

 ところで、回答として申し上げたのは、もし、ファイルがあれば ファイル名 = DIR(該当のフォルダーパス文字列 & "\*データ表*.xlsx") 
 これ一発で取得できますよという意味だったんですが。
 なので、ループさせる必要はありません。

 もちろん、フォルダに、当該文字列のファイルがなければ、空白がかえりますが。

 ファイル名 = DIR(該当のフォルダーパス文字列 & "\*データ表*.xlsx") 
 IF ファイル名 = "" Then 
   MsgBox "なかったよ〜"
   Exit SUb
 End If

 Workbooks.Open パスの文字列 & ファイル名

   以降 必要な処理

 こんな感じ。

 ところで、Workbook_OPen で開くのはわかりますが、開いた後は、マクロ処理ではなく、操作者が手作業で何かをやるということでしょうかね?
(β) 2015/05/01(金) 14:45

βさん、有難うございます。ファイルをオープンすることが出来ました。ループはいらなかったのですね、すみません。
この後の処理は、ファイルをオープンした後、ユーザーフォームを開き、必要なデータを検索しセルに抽出・・・というマクロ処理が続いています。

現在、データ表の置いてあるフォルダ内に"データ表H270420"と"データ表H270427"と"データ表H270501"とあるのですが、一番最新の日付のものを表示させることは可能でしょうか?今は4月や5月だけですが、これから増えていってH271001など、二桁の月が出ても日付の新しいものを開きたいのですが…。
(SDA) 2015/05/01(金) 15:00


 規則として

 ・必ず末尾が日付 ということならできます。
 ・あるいは、重要(270105)いろはにほへと というのがあったとしても、とにかく、ファイル文字列中に
  数字が連続しているところは【1か所】で、それが日付

 ということならできます。

 どちらでやりましょうか?

(β) 2015/05/01(金) 16:14


βさん

必ず末尾が日付のものと、ファイル文字列中に数字が連続しているところはファイル名の真ん中にある日付のみのものと、2種類あります。
(SDA) 2015/05/01(金) 16:22


 それでは以下で。

 Sub Test()
    Dim fPath As String
    Dim fName As String
    Dim reg As Object
    Dim LatestN As Long
    Dim LatestF As String
    Dim x As Long
    Dim mt As Object

    Set reg = CreateObject("VBScript.RegExp")   '正規表現
    reg.Pattern = "\d{6}"                       '連続した6桁の数字

    fPath = "\\・・・・・・・\"  'フォルダパス

    fName = Dir(fPath & "*データ表*.xlsx")

    Do While fName <> ""

        Set mt = reg.Execute(fName)         'ファイル名に連続した6桁の数字があるか?
        If mt.Count > 0 Then
            x = mt(0).Value
            If x > LatestN Then
                LatestN = x
                LatestF = fName
            End If
        End If

        fName = Dir()
    Loop

    If LatestN = 0 Then
        MsgBox "該当のファイルが見つかりません"
    Else
        Workbooks.Open fPath & LatestF
    End If

 End Sub

(β) 2015/05/01(金) 16:41


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.