- ベストアンサー
VBAでフォルダ内のファイル名を取得する方法
- VBAを使用して、指定したパス内のExcelファイルのファイル名を取得する方法について教えてください。
- 初心者のため、Excel 2010でVBA(マクロ)を使用して、指定したパス内のExcelファイルのファイル名を取得する方法についてご教示ください。
- ディレクトリ内のExcelファイルのファイル名をVBAで取得する方法についてのコードの修正方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
csvファイルもExcelファイルの一種だと考えてファイル名も取得する一方で、textファイルやpdfファイルは取得しない様にした方が宜しいのでしょうか? もしそれで宜しければ次の様なVBA(マクロ)になります。 Sub Sample() FolderPath = Cells(2, 12).Value buf = Dir(FolderPath & "\*.*") cnt = 7 Do While buf <> "" If buf Like "*.xls?" Or buf Like "*.csv" Then cnt = cnt + 1 Cells(cnt, 11) = buf End If buf = Dir() Loop End Sub
その他の回答 (4)
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答No.1、2です。 もし質問者様の仰る「実行ファイル」が、回答No.4様が仰っておられる様に >このマクロを実行している 自分自身のこと 即ち、「本件のマクロを実行しているファイル」の事だとしますと、「本件のマクロを実行しているファイル」がL2に入力されているパスのフォルダー内に保存されている場合には、 And buf <> ThisWorkbook.Name で除外する事が出来ます。 しかし、もし「本件のマクロを実行しているファイル」がL2に入力されているパスのフォルダー以外の場所に保存されている場合で、尚且つ、L2に入力されているパスのフォルダー内に偶々「『本件のマクロを実行しているファイル』と同名のファイル」が存在していた場合には、ファイル名だけで判定したのでは「『本件のマクロを実行しているファイル』と同名のファイル」のファイル名は取得する事が出来ませんので、もしそのフォルダー内にある「『本件のマクロを実行しているファイル』と同名のファイル」のファイル名は取得する必要がある場合には、もう一工夫する必要があります。 Sub Sample() Dim buf As String, cnt As Long, FolderPath As String FolderPath = Cells(2, 12).Value buf = Dir(FolderPath & "\*.*") cnt = 7 Do While buf <> "" If buf Like "*.xls?" Or buf Like "*.csv" And _ FolderPath & "\" & buf <> ThisWorkbook.Path & "\" & ThisWorkbook.Name Then cnt = cnt + 1 Cells(cnt, 11) = buf End If buf = Dir() Loop End Sub
お礼
なるほど。その通りですね。 まだまだ発想が追い付いておらず、すみません。 既に最初に頂いたご回答をベストアンサーとしてしまったため、 「ありがとう」しかできませんが・・・ 丁寧なご教示、感謝致します。ありがとうございました!
- superside0
- ベストアンサー率64% (463/719)
よこから失礼しました。 > 実行ファイルも同じパスにあるため、リストアップされてしまいます。 と言われている "実行ファイル" というのは *.exeファイルのことではなくて このマクロを実行している 自分自身のことでは ないかと 推測しました。
お礼
ありがとうございます!その通りです。 こちらの表現が悪かったようで・・・ 推測していただいて助かりました!!
- superside0
- ベストアンサー率64% (463/719)
自分自身のファイル名は、 ThisWorkbook.Name です なので、#1のご回答の If buf Like "*.xls?" Or buf Like "*.csv" Then を If (buf Like "*.xls?" Or buf Like "*.csv") And buf <> ThisWorkbook.Name Then にすれば、自分自身を除外することになります。
- kagakusuki
- ベストアンサー率51% (2610/5101)
>ご教示いただいたコードでは、実行ファイルも同じパスにあるため、リストアップされてしまいます。 実行ファイルとはexeファイルやcomファイル、binファイル等の 「コンピュータの外部記憶装置などに記録されるファイルで、メモリに読み込んで実行できる形式のプログラムファイル」 で、要するに 「そのファイルを開くだけで中のプログラムを実行出来るファイル」 の事ですよね? 【参考URL】 実行ファイルとは|実行形式|実行可能ファイル|ロードモジュール|実行可能プログラム - 意味 / 定義 / 解説 / 説明 : IT用語辞典 http://e-words.jp/w/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.html コトバンク > ASCII.jpデジタル用語辞典 > 実行ファイルとは > パソコンで困ったときに開く本の解説 https://kotobank.jp/word/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB-4248#E3.83.91.E3.82.BD.E3.82.B3.E3.83.B3.E3.81.A7.E5.9B.B0.E3.81.A3.E3.81.9F.E3.81.A8.E3.81.8D.E3.81.AB.E9.96.8B.E3.81.8F.E6.9C.AC こちらでもダミーのフォルダーを作成し、その中にxlsファイル、xlsxファイル、xlsmファイル、cvsファイル、exeファイル、txtファイル等を保存してから、お伝えしたマクロを実行してみましたが、exeファイル等の実行ファイルはリストアップされませんでした。 つまり、 >ご教示いただいたコードでは、実行ファイルも同じパスにあるため、リストアップされてしまいます。 という事が起きる原因は、質問者様が仰る「実行ファイル」が特殊なもので、拡張子が一般的な実行ファイルとは異なる拡張子が使われているものとなっている事によるものだと思われます。 ですので、その様な特殊な実行ファイルがリストアップされない様にするためには、その拡張子を持つファイルのみを除外する様にしなければなりません。 そのためには、その特殊な実行ファイルに付けられている拡張子が、どの様な拡張子であるのかを知る必要がありますので、そのリストアップされたという実行ファイルに付けられている拡張子がどの様な拡張子であるのかを御教え願います。
お礼
表現が誤っていただけでしたが、 親切・丁寧にご説明いただき、ありがとうございます! ご面倒おかけしました。
補足
こちらの表現がつたないばかりに、勘違いされてしまったようで すみません。 「実行ファイル」とは、 exeファイルのような事実上の「実行ファイル」のことではなく、 ご教示いただいたマクロを実行させるエクセルファイルのことです。 お騒がせしてしまい、申し訳ありませんでした。
補足
ありがとうございます。 試してみたところ、ご教示いただいたコードでは、 実行ファイルも同じパスにあるため、リストアップされてしまいます。 「実行ファイル以外」という条件を付けたいのですが・・・ いかがでしょうか? お手数おかけしますが、ご指導のほど よろしくお願い致します。