dポイントプレゼントキャンペーン実施中!

プログラミング初心者です。どなたかご教授頂けないでしょうか。
VBAで、ファイル名をチェックする方法が知りたいです。

◆前提条件
・フォルダ構成
C:\Documents and Settings\デスクトップ\フォルダ1\ファイル1.xls
|_フォルダ2\ファイル2.xls
|_フォルダ3\ファイル3.xls


◆マクロで実現させたいこと
・ファイル1~ファイル3全てのファイル名チェックを行いたい。
・正しいファイル名【ファイル1_XXについて.xls】
・ファイル1、2、3・・・と続く
・_アンダーバーが必ず入っていること
・”XXについて”の箇所はチェックをしない
・.xlsが必ずついていること

申し訳ありませんがお願いいたします。

A 回答 (3件)

これも初心者を理由の丸投げの質問だ。


ファイルの名前が判ったとして、名前のチェックのコードぐらい自分で書いてみるべきだ。
在るフォルダのファイルで、エクセルファイル(拡張子.xls)を全て調べ(3つしかないのは確実か?)
そのファイル名について、質問のようなチェックをする。
チェックの部分は質問者でも判るだろう。正規表現やワイルドカードがどうとか言うレベルでないなら、
>正しいファイル名【ファイル1_XXについて.xls】
は3つのファイルのどれかであるか。見つからないか。余分なXLSがあるか。
をIF文でチェックする。とりあえずブック名文字列を配列にでも入れて、入れ終わったら
ファイル1.xlsはその中にあるかファイル2.xlsはあるか、1ツづつIF文で聞いていけば良い。
>_アンダーバーが必ず入っていること
Instr関数を使うことーー>WEB照会
.xlsが付いていることにも使える。
>.xlsが必ずついていること
フォルダの中から、.xlsが付いているファイルのみチェックの対象にする、方が良いのかな。
フォルダの全ファイルに質問のようなチェックを掛けるよりも。
ーーー
フォルダの中のファイル名を捉えるのは
Googleで「VBA フォルダ ファイル名」で照会
ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html など
Dir関数を使う、FSOを使う、の2方法のどちらかが多い。
.xlsは文字列の末尾4文字が.xlsかチェック。LEFT関数などーー>WEB照会。
    • good
    • 0

先ずファイルを検索する方法は以下の通り


Dim F, D, E, X, N
Set F = CreateObject("Scripting.FileSystemObject")
Set D = F.GetFolder("C:\Documents and Settings\デスクトップ")
For Each E In D.SubFolders
    ChDir E.Path
    N = E.Name '★フォルダ名
    X = Dir("*.xls")
    Do Until X = ""
        ファイル名チェック
        X = Dir
    Loop
Next

次にファイル名の正当性ですが、これが少し不明です。
可変部分についてどのような規則なのかハッキリしないのですが、
以下のルールを考えてみました。
(1)先頭の4文字は「ファイル」である。
(2)その直後は半角の数字が複数ある。
(3)数字の後ろには「_」(下線)がある。
(4)「_」(下線)より拡張子までは任意である。
(5)拡張子は「.xls」に限る。
上記の(5)は最初のDir関数が識別するので特に考えなくて
よいでしょう。それ以外は正規表現を使います。

Dim R
Set R = CreateObject("VBScript.RegExp")
R.Pattern = "^ファイル\d+_.*\.xls"
If Not R.Test(文字列) Then
    パターンに一致していない場合の処理
End If
    • good
    • 0

 0085 さんのなさりたいことは、


-------------------------------------------------
「C:\Documents and Settings\デスクトップ\」配下の全ての フォルダ から
・ファイル名 に「ファイル1」・「_」・「.xls」を含む
・ファイル名 に「ファイル2」・「_」・「.xls」を含む
・ファイル名 に「ファイル3」・「_」・「.xls」を含む
のいずれかの条件を満たす ファイル を リストアップ する
-------------------------------------------------
ということでしょうか?

 だとして、下記のようなことで可能かと。。。

1)VBE(Visual Basic Editor)の コードウィンドウ に「filesearch」と入力し [F1] キー を押下します。
2)[Offile] - [FileSearch オブジェクト] を選択し [ヘルプ(H)] を クリック します。
3)[FileSearch オブジェクト] の ヘルプ の説明文中の「NewSearch メソッド」を クリック します。
4)[NewSearch メソッド] の ヘルプ の [使用例] に書かれた コード を VBE の コードウィンドウ にコピペし、不明な プロパティ などに マウス を合わせて [F1] キー を押下し、それぞれの意味を調べます。
5)いろいろと弄くって、下記のような コード に変更します。


Sub test()
 Dim strFileNames As Variant
 Dim i As Long
 Dim j As Long
 strFileNames = Array("ファイル1", "ファイル2", "ファイル3")
 With Application.FileSearch
  .NewSearch
  .LookIn = "C:\Documents and Settings\デスクトップ\"
  .SearchSubFolders = True
  .Filename = "*_*.xls"
  .FileType = msoFileTypeExcelWorkbooks
  If .Execute() > 0 Then
   For i = 1 To .FoundFiles.Count
    For j = 0 To UBound(strFileNames)
     If InStr(.FoundFiles(i), strFileNames(j)) > 0 Then
      Debug.Print .FoundFiles(i)
     End If
    Next j
   Next i
  Else
   Debug.Print "検索条件を満たすファイルはありません。"
  End If
 End With
End Sub
    • good
    • 0

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