• ベストアンサー

ファイル名の取得(エクセルVBA)

 エクセル97を使用しています。 過去ログを見て、ファイル名の取得にDir関数が使えることは、判ったのですが、不特定数のファイル名に対応する方法が思いつきません。  特定のフォルダ内の、数が可変するファイルのファイル名を、検索した時点で、全部セル(または変数でも可)上に取得する方法って、ありますでしょうか?  よろしくお願いします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 基本的には、Dirをループでまわします。 プロシージャ化するとこんな感じ。 'FolderName内の全ファイル名(フルパス)をallFile()に格納して、ファイル数を返す Public Function FileArray(FolderName As String, allFile() As String) As Long   Dim setPath As String '現在のパス   Dim checkName As String '調べるファイル(フォルダ)   Dim checkFlag As Boolean '繰り返しの終了判定   Dim pathCount As Long '処理するパスの個数   Dim pathList() As String 'パス名のリスト   Dim fc As Long 'ファイル数   If Right(FolderName, 1) <> "\" Then     FolderName = FolderName & "\"   End If   fc = 0   pathCount = 0   setPath = FolderName   checkFlag = True   Do While checkFlag = True     checkName = Dir(setPath & "*.*", vbDirectory)     Do While checkName <> ""       DoEvents       If checkName <> "." And checkName <> ".." Then         If (GetAttr(setPath & checkName) And vbDirectory) <> 0 Then           pathCount = pathCount + 1           ReDim Preserve pathList(pathCount)           pathList(pathCount) = setPath & checkName         Else           ReDim Preserve allFile(fc)           allFile(fc) = setPath & checkName           fc = fc + 1         End If       End If       checkName = Dir()     Loop     If pathCount = 0 Then       checkFlag = False     Else       setPath = pathList(pathCount) & "\"       pathCount = pathCount - 1     End If   Loop   FileArray = fc End Function あとは、取得したファイル名をセルに表示するだけ。

TK1961
質問者

お礼

 返答が遅くなってすみませんでした。 早速の回答、ありがとうございました。 おかげさまで、解決しました。  どれが正解と言うわけではないでしょうが、2名様までにしか、ポイントを割り振れない上に、順列をつけなければならない決まりですので、申し訳ありませんが、勝手ながら先着順にさせていただきます。  今後とも、よろしくお願いいたします。 

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

Sub test03() Dim f, n As String j = 1 t = "c:\my documents\tt1\" 'フォルダを指定 '-------- f = Dir(t) Cells(j, "A") = f j = j + 1 '------- For i = 1 To 100 'ファイル数を多めに見積もる f = Dir() If f = "" Then Exit For Cells(j, "A") = f j = j + 1 Next End Sub

TK1961
質問者

お礼

 ありがとうございました。 また、何かありましたら、ご指導願います。

すると、全ての回答が全文表示されます。
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

> 全部セル(または変数でも可)上に取得する方法って、ありますでしょうか? シート上に表示する訳ですよね。 実情に合わせ、7~9行目の内容適宜指定してください。。 これを実行するとシートの指定した位置に、指定したフォルダ内のファイル一覧が 表示されます。 属性が「標準ファイル」のものだけを全部表示します。 (読み取り専用、隠しファイル、システムファイルは、表示しません。) Sub FileList() Dim Mypath As String Dim FName As String Dim Rw As Integer Dim Col As String '-------------------------------------------- Mypath = "c:\test\" ' <---- フォルダ名指定 Col = "A" '   <----------- ファイル名表示列指定 Rw = 1 '    <-----------   〃  表示開始行指定 '-------------------------------------------- FName = Dir(Mypath, vbNormal) Do While FName <> ""   If FName <> "." And FName <> ".." Then     If (GetAttr(Mypath & FName) And vbNormal) = _       vbNormal Then       Range(Col & Rw).Value = FName       Rw = Rw + 1     End If   End If   FName = Dir Loop End Sub

TK1961
質問者

お礼

 ありがとうございました。また、よろしくお願いします。  maruru01さんの所にも書きましたが、こういうことにさせていただきました。

すると、全ての回答が全文表示されます。
  • TTak
  • ベストアンサー率52% (206/389)
回答No.2

質問内容に合っているか判りませんが、次の例は、指定したフォルダ内のエクセルファイル名とパスを、セルに順番に書き出します。当方、バージョンが違いますが、excel2000で確認しました。参考までに。 Sub SAMPLE() Dim serchPass As String '検索するフォルダ serchPass = "C:\My Documents" With Application.FileSearch  .NewSearch  .LookIn = serchPass  .FileType = msoFileTypeExcelWorkbooks  If .Execute() > 0 Then   For i = 1 To .FoundFiles.Count    Cells(i, 1).Value = .FoundFiles(i)   Next i  End If End With End Sub

TK1961
質問者

お礼

 助かりました。 また、よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A