Excel X for Macでワイルドカードを使いたい

このQ&Aのポイント
  • Excel X for Macでのマクロにおいて、ワイルドカードを使用したファイルの存在チェック方法を教えてください。
  • WindowsのExcel2003では、変数Pathのフォルダに[Bookで始まるxlsファイル]が存在すれば「存在する」と表示されますが、Excel X for Macではワイルドカードが使えないため、ファイルの存在を検索する方法を教えてください。
  • Excel X for Macでも、特定のフォルダ内から[Bookで始まるxlsファイル]の存在を調べるために、ファイル名が明確にわからない場合にどのようなコードを作成すればいいですか?
回答を見る
  • ベストアンサー

Excel X for Macのマクロでワイルドカードを使いたい

Excel X for Macでのマクロについての質問です。 特定のフォルダにあるファイルの存在を調べたいです。 変数Pathには検索対象のフォルダのフルパスが入っているとします。 zzz = Dir(Path & "Book*.xls") if zzz = "" then   MsgBox "存在しない" else   MsgBox "存在する" End if WindowsのExcel2003の場合、 上記で、変数Pathのフォルダに[Bookで始まるxlsファイル]が存在すれば、 「存在する」と表示されます。 Excel X for Macの場合、 上記コードでは仮に[Bookで始まるxlsファイル]が存在していても検索に引っかかりません。 どうやらワイルドカード[*]が使えないようなのですが、 Mac上のワイルドカードは * ではないのでしょうか。 ワイルドカードが使えない場合、 指定したフォルダの中から[Bookで始まるxlsファイル](=ファイル名が明確にはわかっていない)の存在を調べるようなコードを作るにはどうしたらよいでしょうか。 Excel X for Macでも、冒頭を、  zzz = Dir(Path & "Book1.xls") と書き換えて実行した場合、 Book1.xlsがあれば「存在する」と表示されるので、検索のコード自体は間違っていないと思います。

  • Mac
  • 回答数2
  • ありがとう数12

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

  • ベストアンサー
  • sevenless
  • ベストアンサー率66% (374/561)
回答No.2

ちなみに Mac でも Like 関数による文字列比較ではワイルドカードが使えます。 そこで例えば MyFileName = Dir(Path) Do While MyFileName <> "" zzz = MyFileName Like "Book*.xls" If zzz = True Then MsgBox "存在する" Exit Do End If MyFileName = Dir() Loop If MyFileName = "" Then MsgBox "存在しない" End If といったマクロを使えば、特定のフォルダの Book*.xls ファイルの有無を調べることができます。

tktk1228
質問者

お礼

回答ありがとうございます。 挙げていただいたLike関数でなんとかなりそうです。 MyFileName = Dir(Path)だとフォルダ内のファイル全て検索する必要がでてきますけど、 問題無いレベルです。 ありがとうございました。

その他の回答 (1)

  • sevenless
  • ベストアンサー率66% (374/561)
回答No.1

Excel 2004 の Visual Basic ヘルプ内、Dir 関数の記述です。 > Windows の場合、複数のファイルを指定するための "*" (アスタリスク) および "?" (疑問符) のワイルドカード文字を使用できます。Macintosh の場合、これらの文字は有効なファイル名 の文字として扱われるため、このワイルドカード文字を使用して複数ファイルを指定すること はできません。 ということで、仕様のようです。

関連するQ&A

  • Excel for mac 2011でDir関数?

    Excel for mac 2011でDir関数を使用したファイルサーチが出来ません。なぜなのでしょうか? 使用環境は、Excel for mac 2011 ver. 14.1.0, MacOS X 10.6.7, MacBook Airです。 働いている研究室がMac onlyのため、Mac版のExcelにvbaを移植しようと考えているのですが、以下のプログラムが上手く動きません。 ------------------vbaプログラム Private Sub CommandButton1_Click() Dim strPATHNAME As String ' 指定フォルダ名 Dim strFILENAME As String ' 検出したファイル名 Dim ExistFILE As Boolean ' "*.TXT"ファイルの判定 ' 「フォルダの参照」よりフォルダ名の取得 strPATHNAME = MacScript("choose folder") strPATHNAME = Mid(strPATHNAME, 7) 'aliasを削る If strPATHNAME = "" Then Exit Sub ' 指定フォルダ内のTEXTのファイル名を参照する strFILENAME = Dir(strPATHNAME, vbNormal) '<------ここでファイルを検出しない。 ExistFILE = strFILENAME Like "*.TXT" If strFILENAME = "" Then MsgBox "このフォルダにはTXTファイルは存在しません。" Exit Sub End If End Sub ------------------ 上記プログラムは、コマンドボタンを押すとフォルダを指定して、その中の”.TXT”という拡張子のついたファイルを見つけるプログラムです。(実際には何もしないダミープログラムですが) しかしこれを実行すると、Dir関数の所で何も検出してくれません。 ローカル変数を追って、フォルダまでのパスにカタカナが入ったらダメだとか、”alias”が邪魔だとかは解決したのですが、肝心のDir関数が上手く動いていないことに気づきました。 どなたか詳しい方にお願い致します。 どうすれば、指定したフォルダ中の拡張子”.TXT”がついたファイルを見つけることが出来るのか?教えて頂ければ幸いです。

  • エクセル マクロについて

    エクセルのマクロについて教えてください。 下記のようなマクロを実行した場合 どのような条件でフォルダ内のファイルを オープンしていくのでしょうか。 ファイルの名前や更新時間などでしょうか? また、名前や更新時間順でファイルを開いていくように するにはどうしたらよろしいでしょうか。 ご回答よろしくお願い致します。 以下マクロ 'オブジェクトを設定する Set ファイルシステム = CreateObject("Scripting.FileSystemObject") '読み込むファイルを1個指定する あるブック = Application.GetOpenFilename("Excelファイル(*.xls),*.xls") '親フォルダーを取得する Set 親フォルダー = ファイルシステム.GetFile(あるブック).ParentFolder '親フォルダー内の全ファイルに以下の操作をする For Each ファイル In 親フォルダー.Files 'ファイルを開く Workbooks.Open ファイル.Path 'ブック名を記憶する ブック名 = ActiveWorkbook.Name '開いたファイルの伝票(NO)のシートを「全データ」シートの後ろにコピーする ActiveWorkbook.Worksheets("伝票(NO)").Copy After:=ThisWorkbook.Worksheets("全データ") '開いたファイルを閉じる Workbooks(ブック名).Close Next                                                 以上

  • Excelマクロのエラー

    お世話になります。 マクロは、超初心者で只今、本やネットで勉強中なのですが、本の通りに作成しましたが、 エラーが出てしまいます。 急いでおりまして、大変お手数ですがご教示お願いできますでしょうか? Excel2007でマクロを作成中(実際に業務で使用する環境は2003です)。 2点あります。 (1)サブフォルダ内の全ブックを開く  ファイルは開くのですが、下記のエラーが出てしまいます。  C:¥...... "\web保存\"が見つかりません。ファイル名およびファイルの保存場所が  正しいかどうかを確認してください。 (2)開いたファイルをhtm保存する。  htm保存できるのですが、ファイル名が「●●●.xls.htm」  となってしまい、元のファイル名の.xlsの拡張子が付いたままです。  ファイル名を変えず、「●●●.htm」となるようにしたいです。 どうぞ宜しくお願い致します。 (1)サブフォルダ内の全ブックを開く Sub 全ブックを開く() Dim パス名 As String Dim ファイル名 As String パス名 = ThisWorkbook.Path & "\web保存\" ファイル名 = Dir(パス名 & "*.xls*") Do While ファイル名 <> " " Workbooks.Open パス名 & ファイル名 ファイル名 = Dir() Loop End Sub (2)開いたファイルをhtm保存する Sub htm保存() Dim wb As Workbook Dim wbname As String For Each wb In Workbooks wb.Activate If wb.Name <> ThisWorkbook.Name Then wb.SaveAs FileName:=ThisWorkbook.Path & "\" & wb.Name & ".htm", FileFormat:=xlHtml, CreateBackup:=False wb.Close savechanges:=False End If Next End Sub

  • excel マクロ PDF化の際のエラーについて

    エクセルブックを一括で名前をつけてpdfに変換するようなマクロを作ろうとして作ってみました。 基本は、マクロで印刷を一気に行う要領でpdfをアクティブプリンタに設定したのですが、見かけ上pdfファイルが作成されるものの、開くと破損していますとなってしまい、きちんとpdf化が出来ていないようです。 システムフォントを利用~のエラーは回避できたのですが、無理やりファイル名を指定しているせいでこのようになっているのでしょうか。 お手数ですがアドバイスをお願いします。 マクロの記録ではアクティブプリンタを指定して、プリントアウトというものしか記録されないので、プリントアウトのところが何か間違っているとは思うのですが・・・ 以下コードです。 Sub PrtPDF() Dim MyFile As String, MyPath As String Dim wb As Object Dim fn As String If vbNo = MsgBox("フォルダ内のブックの一括印刷を行いますか?", vbYesNo) Then GoTo CloseFile Dim bookname1 As String bookname1 = "Conv.xls" MyPath = ThisWorkbook.Path & "\" '自分のパスを取得 MyFile = Dir(MyPath & "*.xls", vbNormal) 'パス内のxlsファイル If LCase(MyFile) = LCase(bookname1) Then MyFile = Dir 'MyFileとbookname1が同じファイルの場合スキップする Do Until MyFile = "" '対象ファイルがなくなるまで Set wb = Workbooks.Open(MyPath & "\" & MyFile) '選択したファイルを開く fn = MyPath & "PDF\" & Range("J4").Value & ".pdf" 'アクティブシートを印刷する。 Application.ActivePrinter = "Adobe PDF on Ne07:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, PrtoFileName:=fn 'アクティブブックを閉じる。 ActiveWorkbook.Close MyFile = Dir '次のファイルを検索 If LCase(MyFile) = LCase(bookname1) Then MyFile = Dir 'MyFileとbookname1が同じファイルの場合スキップする Set wb = Nothing Loop '繰り返し GoTo ProcessEnd CloseFile: ActiveWorkbook.Close MsgBox "処理を中止しました。" Exit Sub ProcessEnd: MsgBox "処理が終了しました" End Sub

  • EXCEL VBA 親ディレクトリの参照方法

    教えてください。 下記のフォルダとファイルがあります。 C:\........\main\DIR\excel1.xls c:\........\main\dir2\excel2.CSV \mainの下にDIR,DIR2がありますが、常に\mainの場所は不定です。 DIRの下にあるEXCEL1.xlsにあるブックにマクロ記述をして、 EXCEL2.CSVを書き出すマクロを書きたいのですが・・・ ActiveWorkbook.pathにてディレクトリは参照できるのですが、 簡単にこの親のディレクトリを参照できる方法はないでしょうか?

  • Excelマクロについて教えてください。

    Excelマクロについて教えてください。 フォルダ内にある全てのファイルのA列にAを追加したいのですが、 下記だとA1にAを上書きしてしまいます。 book.Sheets(1).Range("A1") = "A" '最初のシートのA1に"A"を フォルダ内のファイルのA列に値がある場合、Aを追加する場合のマクロを教えてください。 例) test.xls A列 →A列 12345 →A12345 55555 →A55555 Sub sample() Dim dataFolder As String Dim file As String Dim book As Workbook Dim fileName As String Dim fileExt As String dataFolder = "C:\test\" 'excelがあるフォルダ file = Dir(dataFolder & "*.xls") '最初のexcelファイル名 Do While file <> "" 'ファイル名がある間 '内容変更 Set book = Workbooks.Open(dataFolder & file) 'ブックを開く book.Sheets(1).Range("A1") = "A" '最初のシートのA1に"A"を book.Close True '上書きして閉じる file = Dir '次のファイル名 Loop '繰り返す End Sub 教えてください。

  • VBAでエクセルからエクセルのファイルを開くには?

    D:\に db1.mdb Book1.xls があります。 db1.mdbのフォームのコマンドボタンをクリックして Book1.xlsを開きたいのですが VBAコードをご教授いただけますか? (マクロではなくVBAコードが知りたいです) エクセルからエクセルのファイルを開くなら Workbooks.Open ファイルのフルパス で出来ました。 ご回答よろしくお願いします。

  • エクセルのマクロでファイルを開く

    エクセルの「ファイルを開く」ダイアログボックスを使用してファイルを開き、その開いたファイルに対してとあるマクロを実行させたいと思っています。 エクセルの「ファイルを開く」ダイアログボックスでパス取得までは理解出来たのですが、その先の処理が分かりません。 「ファイルを開く」と言うのは、「現在アクティブになっているシートにデータを貼り付けて」の処理でも構いません。 Dim Ret As Variant Ret = Application.GetOpenFilename("Excel ブック (*.xls), *.xls, テキストファイル(*.txt),*.txt") If Ret = False Then MsgBox "キャンセルが選択されました。" Exit Sub Else       'ここにRetで取得しているパスのファイルを開いて、sub_WAITのマクロを実行させたいです。 sub_WAIT.Show End If End Sub

  • VBAでフォルダにあるエクセルファイルを開く

    こんにちは このコードがうまく動かないのですが、 どこがいけないのかわからなく助けてください。 なおフォルダの中には******データ.xlsと言うファイルがあり、アスタリスク部分は日付が不規則に変化して上書きされるのです。 このファイルを開くマクロを作りたいのですが。 うまく行きません。 よろしくおねがいします。 Sub excelopen() ' ' Dim エクセル As String 'エクセル = Dir(ActiveWorkbook.Path & "\*データ.XLS") If エクセル = "" Then Exit Sub エクセル = ActiveWorkbook.Path & "\" & エクセル Workbooks.Open Filename:=エクセル End Sub

  • エクセルのマクロについて教えてください。

    エクセルのマクロについて教えてください。 Dドライブのaaaというフォルダにある、何百個あるXLSファイルを開いて、カンマを取った後、CSVに保存したいです。 保存の名前はそのままで、拡張子だけをcsvに変えたいです。 エクセルは初級者レベルなのでプログラムも判らないのですが、自分で作ってみました。 Sub Macro20() ' ' Macro20 Macro ' マクロ記録日 : 2010/4/29 ユーザー名 : ' ' Keyboard Shortcut: Ctrl+e ' Application.ScreenUpdating = False '画面更新を一時停止 CChDir ("D:/aaa") 'フォルダー名取得 Filename = Dir(ThisWorkbook.Path & "\*.xls") 'フォルダ内のXLSファイルを検索 Do Until fname = Empty '全て検索 Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのファイルを開きwbとする。 n = n + 1 'カウントしnとする Workbooks.Open Filename:= _ "C:\Documents and Settings\Owner\My Documents\aaa\1.xls" Cells.Select Selection.NumberFormatLocal = "G/標準" ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\Owner\My Documents\aaa\*.csv", FileFormat:=xlCSV, _ CreateBackup:=False fname = Dir 'フォルダ内の次のCSVファイルを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox n & "件を処理しましました。" End Sub ↓ 駄目でした>< アドバイスどうかお願い致します。