[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オープンしたいファイル名をあいまいにしたい』(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.