• ベストアンサー

ワイルドカードの記述が、原因でしょうか?

下記コードが、ついこの前までは、きちんと "A?07??????.CSV" を読み込んでたんですが、 今は、 "検索条件を満たすファイルはありません。"  となってしまいます。 1、ワイルドカードの記述が、おかしいでしょうか? 2、フォルダ名は、漢字等はやめて、半角英数字にしたほうがよいのでしょうか? 3、このような、現象は、よくあることでしょうか? 以上 原因がわかりませんので、何卒ご教示くださいませ。 ----------------- Private Sub TEST() Dim myFS As FileSearch Dim i As Long ChDir "C:\Documents and Settings\Owner\デスクトップ\ああ" Set myFS = Application.FileSearch With myFS .LookIn = "C:\Documents and Settings\Owner\デスクトップ\ああ" .Filename = "A?07??????.CSV" If .Execute > 0 Then For i = 1 To .FoundFiles.Count '見つかったファイルを一つずつ開く Workbooks.OpenText Filename:=.FoundFiles(i), _ StartRow:=1, _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Comma:=True 'ああ.xlsブックに移動 Sheets(1).Move after:=Workbooks("ああ.xls").Worksheets(Workbooks("ああ.xls").Sheets.Count) Next i Else MsgBox "検索条件を満たすファイルはありません。" End If End With End Sub

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんばんは。 やっぱり、FileSearchは壊れています。 私も一度壊したことがあります。掲示板の質問でも、壊れた人の対応はしたことがあるのですが、直りませんでした。壊れているのは、C言語のツールの'Dependency Walker' でみると、どこかの Dll ファイルが赤い色になって出てくるので、分かるのですが、OS自体に関わってきて、直接、Office などを再インストールしても直らないのです。ファイルとファイルの依存性の問題なので、レジストリに関係しているのだろうっていうのは分かります。そのファイル名かは忘れましたが、MSサポートには出てきます。私の場合は、ADOのMDACをインストールした時に壊れたような気がします。同系ですからね。 今回の場合は、単に、Dir で、ちょっと変えるだけでよいです。 もともと、当時の壊れた時のコードを思い出して書いたので、移植は簡単です。動的配列で、格納していますが、oshietecho-daiさんでしたら、読めるとは思います。この方法は、他にも応用できます。 それと、Like演算子を使っているので、いろいろ応用することも出来ます。 Sub FileSeachPrcR2()   Dim Dirs() As Variant   Dim FileName As String   Dim i As Long   Const MYFILE As String = "A?07#######.CSV"   Const MYDIR As String = "C:\Documents and Settings\owner\デスクトップ\" '必ず、末尾に'\'を入れてください。   FileName = Dir(MYDIR & "*.csv")   Do While FileName <> ""     ReDim Preserve Dirs(i)     Dirs(i) = FileName     i = i + 1   FileName = Dir()   Loop     If i > 0 Then       For i = 0 To UBound(Dirs())         'Like演算子で、ふるいに掛ける         If StrConv(Dirs(i), vbUpperCase) Like MYFILE Then          Workbooks.OpenText FileName:=MYDIR & Dirs(i), _          StartRow:=1, _          DataType:=xlDelimited, _          TextQualifier:=xlDoubleQuote, _          ConsecutiveDelimiter:=False, _          Comma:=True         'ああ.xlsブックに移動         ActiveWorkbook.Sheets(1).Move _         after:=Workbooks("ああ.xls").Worksheets(Workbooks("ああ.xls").Sheets.Count)         End If       Next i     Else       MsgBox "検索条件を満たすファイルはありません。"     End If End Sub

oshietecho-dai
質問者

お礼

全て、入れ替えました。 誠に有難うございました。

oshietecho-dai
質問者

補足

こんばんわ、 度々と大変恐縮しました。 当ファイルで、間違えて同名のマクロ名を作り閉じてしまいましたら、もお開くことが出来なくなってしまいました。 バックとってたのっで、良かったです。 今から、コードを使ってみます。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 >>デスクトップにあるということですね。 >場所により、コードに何らかの影響があるのでしょうか? 影響の問題ではないのですが、ある程度のレベルにある人は、デスクトップの取り方が、前回で示したように、現在のUser と同じデスクトップを取得するように作るということです。その分、難しくなるのです。ファイルを置くこと自体はかまわないと思いますが、長く置く場所ではありませんね。 では、 >C: とか D: などの直下がよいのでしょうか? それは、どこでもかまわないと思います。ただ、私が作ると、ドライブが、Readyかどうかを調べるというコードを付け足します。 >マクロコードが記述されてる Excelファイルと同じフォルダがよいのでしょうか? そのようなことはありませんが、まず、余計なことが不要なので楽ですね。フォルダのフルネームが必要ありません。 私の場合は、他人の環境に適応させるためのコードは、どうやったらエラーを出さないか考えます。 ただ、これは、私個人の意見なのですが、掲示板で、自分自身のVBAの勉強の参考になるものは少ないと思います。私のものも含めて。私は、私自身のスタイルに持ち込もうとしてしまいます。 しょせん、他人のコードは他人のもの、自分のコードは自分だけのものかもしれません。あまり、掲示板の中で振り回されないようにしたほうが、より上達の目的に近づくような気がします。なくて七癖で、人のコードにはそれなりの癖があるものです。確かに、FileSearch などは、人の意見はためになりますが、特例です。 それと、最後に、ひとつの方法でダメだった場合は、それに深入りしないほうが良いようです。当面の解決だけを目的にして、早めに別な方法に切り替えて、再び、その問題に取り組む時期が来るのを待つことが上達の早道のような気がします。単純に解決しないものは、自分の手には余る複合的な問題が絡んでいることがあります。これは、私の本当にバカな失敗から言えることですが。

oshietecho-dai
質問者

補足

こんばんわ、 お礼の後なのに、誠に申し訳ありません。 最初は、実行できましたが、後に、また、前回の質問時のような現象(エラーにならずに、じりじり音がしてしまい、休止状態)になってしましました。 何度も、試みてますが、同じです。 セキュリティ等、他の原因でしょうか? 私には、よく解りませんが、特定のファイルだけをヒットさせることは、あきらめて、 「 FileSearchをやめて Dir とか FileSystemObject 」   というコードに変更すれば、(ヒット以外のことなら)解決できますでしょうか? 度々、と申し訳ありません。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。Wendy02です。 デスクトップにあるということですね。 基本的に、私の元のコードに対しては、ぜんぜん、内容が違っていますね。 ちょっと、みなさんのアドバイスに逆らって、FileSearch にこだわってみましょうか? そのほうが、理解しやすいと思います。 それと、FileSearch の元のエンジンは、Outlook にあります。ただ、この前から、Outlook 2003 を試してみているのですが、FileSearchが生きているようにはありませんね。 Sub FileSeachPrcR()   Dim myFs As FileSearch      Const MYFILE As String = "A?07#######.CSV"   Const MYDIR As String = "C:\Documents and Settings\owner\デスクトップ\"   Set myFs = Application.FileSearch   With myFs     .NewSearch     .LookIn = MYDIR     .Filename = "CSV"     .MatchTextExactly = False     .FileType = msoFileTypeOfficeFiles     If .Execute > 0 Then       For i = 1 To .FoundFiles.Count         'Like演算子で、ふるいに掛ける         If StrConv(.FoundFiles(i), vbUpperCase) Like "*" & MYFILE Then          Workbooks.OpenText Filename:=.FoundFiles(i), _          StartRow:=1, _          DataType:=xlDelimited, _          TextQualifier:=xlDoubleQuote, _          ConsecutiveDelimiter:=False, _          Comma:=True         'ああ.xlsブックに移動         AcitveWorkbook.Sheets(1).Move _         After:=Workbooks("ああ.xls").Worksheets(Workbooks("ああ.xls").Sheets.Count)         End If       Next i     Else       MsgBox "検索条件を満たすファイルはありません。"     End If   End With   Set myFs = Nothing End Sub 後、アドバイスですが、FileSearch のような外部メソッドやワークシートメソッドは、繰り返して実験を重ね、確信を得なければ、プロパティの省略はしてはいけません。また、人に教えるときは、特に省略型は使えません。今回の方法は、以前、FileSearch が壊れたときに使った書き方です。 それから、 "A?07??????.CSV" 本来、こういう厳密なワイルドカードはあまり関心しません。普段は、A?07*.CSV などでよいと思います。出来る限りは、他の方法を求められるのがよいと思います。今回のワイルドカードは、Like演算子のためのものです。間違わないでください。

oshietecho-dai
質問者

お礼

こんばんわ、 誠に有難うございます。 私ごとですが、未熟な為に、本コードでゆうに12時間以上は要したと思います。 限界でした。座ってた時間が長時間で、腰がおかしくなりました。 皆様のせっかくのご回答意見さえ、十分こなすことが出来ずに。(毎度のことですが) 私が、マクロ等だけにこれほどまでにはまりまくっていることは、今までの人生でも、ございません。 とにかく、有難うございました。 Sheets(1).Move After とするだけで、私の場合は、OKでした。 すみません、一つだけお願い致します。 >デスクトップにあるということですね。 場所により、コードに何らかの影響があるのでしょうか? もしそうでしたならば、今後、場所を変更したいと思っております。 C: とか D: などの直下がよいのでしょうか? また、階層の深い場所ではいけないのでしょうか? マクロコードが記述されてる Excelファイルと同じフォルダがよいのでしょうか?

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

http://oshiete1.goo.ne.jp/qa2728987.html ↑でも述べましたが、Application.FileSearch に良い思い出は有りません。 上記リンクの私の回答をアレンジすれば目的は達成できると思います。 (サブフォルダまで検索しています) さらに、2007では現役引退の様子です。 Hidden なので引っ張り出すことも出来るかもしれませんけど・・・ http://msdn2.microsoft.com/en-us/library/bb242669.aspx

oshietecho-dai
質問者

お礼

ご回答誠に有難うございました。 私に可能かどうか、 なんとか、アレンジに挑戦してみます。

noname#31387
noname#31387
回答No.3

FileSearchをやめて DirとかFileSystemObjectを使用されては如何でしょう。 理由はWendy02さんと同じです。

oshietecho-dai
質問者

お礼

ご回答誠に有難うございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。Wendy02です。 結局、この前のものは解決しないままでしたのですか?私は、どうしても、自分のスタイルに持ち込みたくなってしまいます。ご自身のコードの中で解決したいのですね。分かりました、考え方を変えます。すみませんでした。 ただ、あまり、FileSearch には、深入りしないほうがよいです。その理由は、どこにも、きちんとした仕様も書かれていませんし、不安定だからです。VBAをある程度経験した人たちは、みな同じ意見だと思います。 >1、ワイルドカードの記述が、おかしいでしょうか? FileSearch は、基本的に、ワイルドカードの仕様が、一般的なファイル検索などの仕様と違います。隠れた仕様があります。当然、MS-DOSのワイルドカードの仕様とも違うことがありますし、また、バージョンによって仕様が違うことがあることがあります。 .Filename = "A?07??????.CSV" たとえば、どんなファイル名をヒットさせようとしていますか? 'AB070302aa.csv' とか? もし、ヒットしにくいようでしたら、デスクトップでしたら、数が少ないはずですから、 *.CSV で検索しておいて、 For i = 1 To .FoundFiles.Count この場所で、 If .FoundFiles(i) Like "A?07??????.CSV" Then としてもよいと思います。 >2、フォルダ名は、漢字等はやめて、半角英数字にしたほうがよいのでしょうか? Win XPなら、直接の問題はないはずです。 >3、このような、現象は、よくあることでしょうか? FileSearch は、うまくいかないことのほうが多いのではないかと思います。これは、前に説明したかもしれませんが。

oshietecho-dai
質問者

補足

>たとえば、どんなファイル名をヒットさせようとしていますか? AB070302201.csv AB070302202.csv  ~  AB070302212.csv AG070312301.csv AG070312302.csv  ~  AG070312312.csv AK050344401.csv AK050344402.csv  ~  AK050344412.csv などが 10~40個 あります。 いっそのことコードを変えてしまえば、ヒットするようになると思いまして、 No.4様のご教示して頂いたページです。 http://oshiete1.goo.ne.jp/qa2728987.html Wendy02様のコードに追加編集していますが、挟まれた線の間がうまく出来ません。 .FoundFiles. でエラー 他もおかしいと思いますが、よろしくお願い致します。 --- Sub FileSeachPrc() Dim Fso As Object Dim objFolder As Object Dim buf() As Variant Dim f As Variant Dim i As Long Dim j As Integer Dim flg As Boolean Const MYFILE As String = "A?07??????.CSV" Const MYDRIVE As String = "C:\Documents and Settings\Owner\デスクトップ\ああ" '必ず、末尾に'\'を入れてください。 'ドライブのReady チェック Set Fso = CreateObject("Scripting.FilesystemObject") '以下は変数が利かないので、リテラル値 "A" If Fso.Drives("C:\Documents and Settings\Owner\デスクトップ\ああ").IsReady = False Then MsgBox "ドライブ" & MYDRIVE & "は、準備されていません。", vbInformation Set Fso = Nothing Exit Sub End If Set objFolder = Fso.GetFolder(MYDRIVE) ReDim buf(0) buf(0) = MYDRIVE 'サブフォルダを格納 For Each f In objFolder.SubFolders i = i + 1 ReDim Preserve buf(i) buf(i) = f Next f For Each f In buf If Dir(f & "\" & MYFILE) <> "" Then 'MsgBox "Aドライブの[" & f & "\" & MYFILE & "]をあった", vbInformation 'flg = True 'あまりに、同名ファイルが多すぎるときの保護 'If j > 5 Then Exit For 'j = j + 1 '---------------------------------- For j = 1 To .FoundFiles.Count '見つかったファイルを一つずつ開く Workbooks.OpenText Filename:=.FoundFiles(k), _ StartRow:=1, _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Comma:=True 'ああ.xlsブックに移動 Sheets(1).Move after:=Workbooks("ああ.xls").Worksheets(Workbooks("ああ.xls").Sheets.Count) Next j '----------------------------------- End If Next f If flg = False Then MsgBox "Aドライブに[" & MYFILE & "]を保存してね", vbInformation End If Set Fso = Nothing Set objFolder = Nothing End Sub

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

う~ん単純に考えると A?07??????.CSVの'?'は任意の一文字だから A007000000.CSVはヒットするけど A00700000.CSVはヒットしない。 DOS窓を開いて、プロンプトで > cd C:\Documents and Settings\Owner\デスクトップ\ああ > dir A?07??????.CSV とやってファイルが見つかりますか?

oshietecho-dai
質問者

お礼

ご回答誠に有難うございました。

関連するQ&A

  • 【ファイルサーチ】指定のフォルダーではなく自分で選択したフォルダー内のファイルの総数をカウントしたい

    お世話になります。指定のフォルダーではなく自分で選択したフォルダー内の"csvファイル"の総数をカウントしたいのですがうまくいきません。アドバイスお願いいたします。 With Application.FileSearch .LookIn = Application.GetOpenFilename .Filename = "*.csv" If .Execute > 0 Then MsgBox .FoundFiles.Count & "個" End If For i = 1 To .FoundFiles.Count MsgBox .FoundFiles(i) Next i End With

  • 複数のフォルダに、順次実行したいんですが?

    下記コードで(あるサイトにありました)、"C:\DATA"の中の複数のフォルダ(F1、F2、F3、変動あり、いまのところ3つまでです)へ、順次実行したいのですが、うまく出来ません。 Call を使用すれば、出来ますが、Call を使用しないで実行するにはどのように編集すればよろしいですか? 以上よろしくご教示くださいませ。 中部分は、省略しました。 ---------- Sub CSVtoXLS() Dim myFS As FileSearch Dim mySvWb As Workbook Dim i As Long ChDir "C:\DATA" Set myFS = Application.FileSearch With myFS .LookIn = "C:\DATA" .Filename = "*.csv" If .Execute > 0 Then '保存用ブックを追加 Workbooks.Add Set mySvWb = Workbooks(2) For i = 1 To .FoundFiles.Count '見つかったファイルを一つずつ開く        ・        ・     '保存用ブックを保存して閉じる mySvWb.SaveAs Filename:="CSV_hozon" mySvWb.Close Else '検索結果が0なら MsgBox "検索条件を満たすファイルはありません。" End If End With End Sub

  • Excelでファイルを開くをマクロで行いたい

    マクロ初心者です "ファイルを開く"をマクロの記録で記録させると ChDir "C:\Documents and Settings\○○\△△\※※" Workbooks.Open Filename:= _ "C:\Documents and Settings\○○\△△\※※¥LotLog20070131.csv" Windows("●●●.xls").Activate End Sub と記録されます この中で 開きたいファイルネ-ム(上記ならばLotLog20070131.csv)を "●●●.xls"の どこかのセルを参照に開きたいのですが どうすれば宜しいのでしょうか?

  • VBAで、[.FoundFiles.count]で取得した値の変数Cへの渡し方

    VBAで、[.FoundFiles.count]で取得した値を C=.FoundFiles.count(理想) としたいです。そして以下のコードのFor文の.FoundFiles.countをCとしたいのですが、思うようにいきません。その方法を教えて頂きたいのです。宜しくお願い致します。 With Application.FileSearch .LookIn = largept .Filename = "*.txt" If .Execute > 0 Then   For i = 1 to .FoundFiles.Count     ...     処理     ...   Next i Else End If End With

  • シートを別のブックに移動させたいのですが、

    シートを別のブックに移動させたいのですが、 マクロで作成するとこうなりました。 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\YYYY.xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) が、移動先のブック名が移動させたいシートのセルF1に入力されているので、ブック名YYYYをどのようにすればよいのか教えてください。  Workbooks.Open Filename:= _   "C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select  Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) 試してみた方法 Sheets("2010.4YY").Move Before:=Workbooks("("2010.4YY").Range("F1").Value.xls").Sheets(1)  Sheets("2010.4YY").Move Before:=Workbooks _ ("C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls").Sheets(1) どれもダメでした。 あと、今は、Sheet(1)の前となっていますが、常にブックの先頭に移動させることはできるのでしょうか? シート名は、2010.5YY、2010.6YY というふうに毎月増えていく予定です。 初心者です。よろしくお願いします。

  • Excel2007で、ディレクトリ付きファイル一覧をシート出力するマクロ

    Excel2003で、以下のソースを使い、シート上にディレクトリ付きファイル一覧を作成していたのですが、Excel2007では使えなくなりました。代替方法はありませんか? Sheets("Sheet10").Range("A1:Z6000").Clear With Application.FileSearch .newSearch .LookIn = "C:\works" .filename = "*.html" .SearchSubFolders = True Sheets("Sheet10").Select CSVMAX = .FoundFiles.Count For result = 1 To CSVMAX Sheets("Sheet10").Cells(result, 1) = .FoundFiles(result) Next End With

  • .xlsにワイルドカードを使うには?

    あい20060925.xls  を下記のように記述してはいけないようですが、 ワイルドカードをどのように使用すればよろしいでしょうか? 以上 よろしくお願い致します。 -------------------- Sub tes1() '任意のブックの全シートを1つのブックにまとめる Workbooks("あい*.xls").Activate ActiveWorkbook.Worksheets. _ Copy after:=Workbooks("集計.xls").Sheets(Workbooks("集計.xls").Sheets.Count) End Sub --------------------

  • Visual Basic Editorの実行時エラーのことについて教えてください。 

    Visual Basic超初心者ですがよろしくお願いします。 標準モジュールで入力したものを実行すると、必ず「実行時エラー "53": ファイルが見つかりません。」と表示してしまいます。 入力したものはミスはないと思うのですが、何回やってもエラーが出てしまいます。 わかる方いましたら教えてください。 入力したものを一応載せときます↓ Sub list_file() Dim numfile As Long Dim i As Long With Application.FileSearch .NewSearch .LookIn = Range("b1").Value .Filename = Range("b2").Value .SearchSubFolders = Range("b3").Value If .Execute() > 0 Then file_count = .FoundFiles.Count MsgBox file_count & "files exis" Worksheets.Add after:=Worksheets("sheet1") Range("a1").Value = "filename" Range("b1").Value = "date" Range("c1").Value = "size" For i = 1 To file_count Cells(i + 1, 1).Value = .FoundFiles(i) Cells(i + 1, 2).Value = FileDateTime(.FoundFiles(i)) Cells(i + 1, 3).Value = FileLen(.FoundFiles(i)) Cells(i + 1, 2).Value = Hex(Cells(i + 1, 3).Value) Next Columns("a:c").AutoFit Else MsgBox "no file exists" End If End With End Sub

  • マクロを実行すると、エラーにならずに、じりじり音がしてしまう

    EXCEL2002です。(セキュリティは低です) いままで、問題なく実行できてたんですが、このような現象は始めてです。 他のマクロは問題なく、実行できておりますが、このマクロだけがおかしいんです。 問題内容の経緯 1、 最初の 1回 の実行時、下記の線で挟まれた部分だけが、エラーで反転された。 2、 次に、VBの画面だけを閉じて、再度実行しましたら、今度はエラーにならずに、その後は何度実行しても、「 じりじり音 」 がしてしまうだけで、休止してるような状態です。(フリーズはしません) 3、 休止して動かないが、マウスは動きますので、EXCELを閉じますと、    「 このプログラムに応答はありません 」 の画面表示されますので、「 すぐに終了 」 ボタンで、終了した。 4、 PCを再起動して、何度再実行しましたが、エラーにはならずに「2~3」の繰り返しで、全く変わらない状態です。 自身で気が付くことは、最近、マイドキュメントに、PDFファイル等を100Mぐらい、保存したぐらいですが。 他には、フリーソフト等を試しにインストールし使用しました。 以上 よろしくお願い致します。 For i = 1 To .FoundFiles.Count '見つかった 「 *.csvファイル 」 を一つずつ開く ----------------------- Workbooks.OpenText Filename:=.FoundFiles(i), _ StartRow:=1, _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Comma:=True ------------------------ 'ああ.xlsブックに移動 Sheets(1).Move after:=Workbooks("ああ.xls").Worksheets(Workbooks("ああ.xls").Sheets.Count) Next i

  • VBAのFileSearchでFoundFiles(i)の作成日時を取得したい

    タイトルどおりですが、Fileオブジェクトには DateCreatedプロパティーがあるようですが、 どこでこれを使用していいのかわかりません。 したのはHELPのサンプルですが、どうしたらいい ものでしょうか? With Application.FileSearch If .Execute() > 0 Then MsgBox .FoundFiles.Count & _" 個のファイルが見つかりました。" For i = 1 To .FoundFiles.Count Debug.Print .FoundFiles(i) Next i Else MsgBox "検索条件を満たすファイルはありません。" End If End With

専門家に質問してみよう