• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:難題:検索マクロの作成について)

難題:検索マクロの作成について

このQ&Aのポイント
  • VBA初心者がテキストボックスにキーワードを入力し、一致するファイルを開く検索マクロの作成方法について困っています。
  • 特定のフォルダ内にあるキーワードと日付付きの複数のファイルの中から、キーワードに一致するファイルを開くVBAの作成方法について教えてください。
  • VBAを始めたばかりで、テキストボックスに入力されたキーワードと一致するファイルを特定のフォルダから探して開く方法についての質問です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

とりあえず、変数 srcFileName にこんな感じのパスが入っているとして、 Dim srcFileName As String srcFileName = "D:\hoge\課題_20090411.xls" ・ ファイル名から親パスまでの文字列や拡張子を取り除く方法 FileSystemObject を使います。 Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim baseName As String baseName = fso.GetBaseName(srcFileName) これで baseName には "課題_20090411" が入ります。 ・ 日付部分が何文字目から開始されているか調べる方法 "_" の後ろから日付が始まると仮定しました。 Dim startPos As Long startPos = InStr(baseName, "_") + 1 これで startPos には 4 が入ります。 ・ 日付部分を抜き出す方法(とりあえず文字列として取り出す) 数字の部分を取り出します。 Dim datePart As String datePart = Mid(baseName, startPos) これで datePart には "20090411" が入ります。 ・ 日付文字列を日付に変換する方法 上記の日付文字列を日付型に変換し、比較しやすくします。 yyyymmdd (8文字) と yymmdd (6文字) の両方に対応。 Dim fileDate As Date If Len(datePart) = 8 Then (datePart, 1, 4) & "/" & Mid(datePart, 5, 2) & "/" & Mid(datePart, 7, 2) ElseIf Len(datePart) = 6 Then fileDate = Mid(datePart, 1, 2) & "/" & Mid(datePart, 3, 2) & "/" & Mid(datePart, 5, 2) End If ファイル名から日付部分を日付型のデーターとして取り出す方法を順を追って書きました。 あとはその他のロジックと組み合わせて適当に簡略化してください。 検索にヒットした複数のファイルについて、この方法で日付部分を比較して、ご自分のルールに従った絞込みをすればよいと思います。 ・ ファイルを開く方法 対象ファイルの拡張子にあわせ、Windows がプログラムを判断して開く方法を採用。 変数 srcFileName にファイルのフルパスが入っているとして、 最初にファイルのパスを 「短い形式」 に変換する。(いわゆる 8.3 形式) これも FileSystemObject を使用する。 Dim shortPathName As String shortPathName = fso.GetFile(srcFileName).ShortPath 次に Shell の Run メソッドでファイルを開く。 Dim wShellObje As Object Set wShellObje = CreateObject("WScript.Shell") wShellObj.Run shortPathname, vbNormalFocus, False 健闘を祈ります。

komate
質問者

お礼

お礼が遅くなりまして申し訳ございません。 詳しいやり方ありがとうございます。 おかげさまで目的VBAが作成できました。 まことにありがとうございました。

その他の回答 (1)

回答No.1

検索ルールをはっきりと整理しましょう。 入力したキーワードから始まるファイル名ですか? 入力したキーワードを含むファイル名ですか? 入力したキーワードで終わるファイル名ですか? → これは無いと思いますが。 "課題" を含むファイル名は "課題_20090423.xls" と "課題_090511.xls" がありますが、なぜ両方ではなく "課題_090511.xls" なのですか? 複数ヒットした場合の特殊なルールがあるのですか? Word のファイルも提示されていますが、これも開くのですか?(当然 Word ファイルなら Word で)

komate
質問者

補足

補足足らずで申し訳ございません。 テキストBOXに入力したキーワードを含み、尚且つ日付けが新しいファイル名を開けるVBAになります。 その際、日付け部分が"xxx_20090901"や"xxx_090501"とまちまちなので検索時にそのバラバラな日付けを比較して日付けが新しいファイルを開きたいのです。 ※現状はテキストBOXを作成しキーワードを含むVBAまでは作成いたしました。しかし、"xxx_20090901"や"xxx_090501"といったバラバラな日付けを比較して新しいファイルを開くというVBAが作成できなくて困っています。 フォルダ内にはwordも存在し、wordファイルも同条件となります。 どうかご教授お願い致します。

関連するQ&A