みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

フォルダ内にあるファイル名を取得するVBA

エクセル2010を使用しています。
VBA(マクロ)で以下の作業を実行したいと考えていますが、
初心者につき、ご教示いただけますでしょうか。

「マクロ」ファイルにある「実行」Sheetというにある「実行」ボタンで
L2に入力したパス内にあるファイル(.xlsや.xlsmや.xlsbが混在しますが、基本的には全てエクセルファイル)のファイル名を
K8から下へ取得したいのですが・・
参考にしたコードでは うまく動作しませんでした。

以下では、L2のパスを参照するのも組めていないため、コード内に直接パスを書き込んでいますが
実際は、パスを変動させて使いたいので、L2を参照できるようになると助かります。
※パスは、質問用に仮置きで「パス」としています。

Sub Sample()
Dim buf As String, cnt As Long
Const Path As String = "パス"
buf = Dir(Path & "*.*")
Do While buf <> ""
cnt = cnt + 8
Cells(cnt, 11) = buf
buf = Dir()
Loop
End Sub

また、このコードでは
実行ファイル自体のファイル名も取得してしまうようなので、
実行ファイル以外のファイル名を取得したいです。

ご指導のほど、よろしくお願い致します。

投稿日時 - 2016-11-14 11:46:32

QNo.9255496

困ってます

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

 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

投稿日時 - 2016-11-14 12:34:19

補足

ありがとうございます。
試してみたところ、ご教示いただいたコードでは、
実行ファイルも同じパスにあるため、リストアップされてしまいます。
「実行ファイル以外」という条件を付けたいのですが・・・
いかがでしょうか?
お手数おかけしますが、ご指導のほど よろしくお願い致します。

投稿日時 - 2016-11-14 13:24:12

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

 回答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

投稿日時 - 2016-11-14 15:26:18

お礼

なるほど。その通りですね。
まだまだ発想が追い付いておらず、すみません。
既に最初に頂いたご回答をベストアンサーとしてしまったため、
「ありがとう」しかできませんが・・・
丁寧なご教示、感謝致します。ありがとうございました!

投稿日時 - 2016-11-14 15:45:23

ANo.4

よこから失礼しました。

> 実行ファイルも同じパスにあるため、リストアップされてしまいます。

と言われている "実行ファイル" というのは *.exeファイルのことではなくて
このマクロを実行している 自分自身のことでは ないかと 推測しました。

投稿日時 - 2016-11-14 14:41:37

お礼

ありがとうございます!その通りです。
こちらの表現が悪かったようで・・・
推測していただいて助かりました!!

投稿日時 - 2016-11-14 15:25:31

ANo.3

自分自身のファイル名は、 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
にすれば、自分自身を除外することになります。

投稿日時 - 2016-11-14 14:31:13

ANo.2

>ご教示いただいたコードでは、実行ファイルも同じパスにあるため、リストアップされてしまいます。

 実行ファイルとは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ファイル等の実行ファイルはリストアップされませんでした。
 つまり、

>ご教示いただいたコードでは、実行ファイルも同じパスにあるため、リストアップされてしまいます。

という事が起きる原因は、質問者様が仰る「実行ファイル」が特殊なもので、拡張子が一般的な実行ファイルとは異なる拡張子が使われているものとなっている事によるものだと思われます。
 ですので、その様な特殊な実行ファイルがリストアップされない様にするためには、その拡張子を持つファイルのみを除外する様にしなければなりません。
 そのためには、その特殊な実行ファイルに付けられている拡張子が、どの様な拡張子であるのかを知る必要がありますので、そのリストアップされたという実行ファイルに付けられている拡張子がどの様な拡張子であるのかを御教え願います。

投稿日時 - 2016-11-14 14:25:46

補足

こちらの表現がつたないばかりに、勘違いされてしまったようで すみません。
「実行ファイル」とは、
exeファイルのような事実上の「実行ファイル」のことではなく、
ご教示いただいたマクロを実行させるエクセルファイルのことです。
お騒がせしてしまい、申し訳ありませんでした。

投稿日時 - 2016-11-14 15:27:58

お礼

表現が誤っていただけでしたが、
親切・丁寧にご説明いただき、ありがとうございます!
ご面倒おかけしました。

投稿日時 - 2016-11-14 15:29:38

あなたにオススメの質問