• ベストアンサー

ファイル名の取得(エクセル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/17068)
回答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

  • フォルダ内のサブフォルダ名やファイル名の取得

    VB初心者です。 あるフォルダ内のサブフォルダ名や数、ファイル名を取得したいのですが・・・ コントロールのDirListBoxを使用するか、Dir関数を使用したいのですが、上手くできません。 ご存知の方、教えてください

  • VBAのDIR関数でファイル名「0005」などが「5」だけにならない様にするには?

    あるフォルダ内に有るファイル郡の名称をDir関数で取得してExcelのシートのA列に並べるマクロなんですが、0で始まる数字のファイル名の場合、セルには0が省かれて入ってしまいます。 0011なら0011とそのままセルに入れるには(文字列として入れるには?)、マクロはどう書けばいいんでしょうか? 

  • Excel VBAでのファイル名取得方法

    複数のファイルを結合するマクロを組んでいる中で、同一フォルダ内に有るファイルをDIR関数を使って名前を取得しています。DIR関数でファイル名を取得したときのファイルの順番がHDDの書き込み順番で有ることが分かりました。 過去の質問も捜してみましたが、上手く見つけることが出来ませんでした。 ファイルの作成日、もしくは、ファイル名称で順番に取得する手法はないでしょうか?Excelのシートに記載しないでマクロを動作させたいと考えております。 使用しているExcelは2003です。 皆様のお知恵を貸してください。よろしくお願いします。

  • EXCEL VBAのファイルオープンについて

    1列のセルそれぞれに同フォルダのファイル名が入力されていて(ファイル数は変化する)それを、一度に開くか、もしくは1つずつ開いていくかの構文で悩んでいます。ファイル数が特定されていないので、Do Untilでカウンタ変数をたててしているのですが、1つ目のファイルは開くのですが、後のファイルがエラーになってしまいます。 説明がうまくできていないかもしれませんが、もしわかりましたら、是非教えてください。

  • 【VBA】 ファイル名の取得

    23歳OLです。 会社でマクロを組んでいるのですが、 できないところがあったのでご相談させてください。 ▼やりたいこと ================================================ ・フォルダを自分で指定して、選択したファイルの名前をシートに書き込む 1.txt 2.log 3.xls とフォルダに入っていたら 1.txt 2.log 3.xls とシートに名前を書き込んでほしいです。 ・ファイルの種類はいろいろある。(txt.logなど) ================================================ ▼現在書いてみたコード ======================== Sub Sample1() Dim buf As String, cnt As Long Const Path As String = "" buf = Dir(Path & "*.*") Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop End Sub ======================== これだと、初めから指定したフォルダしか取得することができないらしいです。 そもそもConst Path As String = "このぶぶん" このぶぶんにフォルダを指定しても動きませんでした。? どこが原因なのでしょうか? ご教示お願いします。

  • ExcelVBAでサブフォルダ名などを取得したい

     ExcelVBAで、Dドライブ内の特定のフォルダ(D:\My Documents等)の中にある全てのフォルダ名やファイル名を取得したいのですが、方法が分かりません。  Dドライブのすぐ下にあるフォルダはDirで取得できるようなのですが、サブフォルダ名が取得できないのです。  具体的にどのように書いたらよいかお教えいただけるとうれしいです。  よろしくお願いします。

  • ファイル名を降順に取得したい

    strフルファイル名 = Dir("C:\Users\*.*", vbNormal) Do While strフルファイル名 <> "" mystr= strフルファイル名 strフルファイル名 = Dir() Loop このような感じでフォルダの中のファイル名を取得しているのですが 取得する際、名前を降順に取得する方法はありますか? 俗にいうバブルソートと言う方法を勉強する歯科なのでしょうか?

  • VBAを使い、同一フォルダにあるファイルの特定のシートの情報を取得したい

    はじめまして。 書籍や過去の質問等を調べましたが、類似するものを見つけられなかったため質問させていただきます。 Xというエクセルファイルで、Xと同一フォルダ内にある、ファイル名に特定の文字列(例えば「月報」)を含んだ全てのエクセルファイルの、特定の文字列(例えば「○年○月」)を含んだ全シートの、一定のセル範囲をひとつのシートにまとめたいと思っています。 X内のコマンドボタンで動かす予定ですが、複数のボタンになると自分では思っています(ボタンAでファイル名の取得、ボタンBでシートの取得、ボタンCでセルに貼り付け、みたいな感じで。ボタンの数は特に制限はないです) 要点としては a, 定定の文字列を含んだファイル名の取得 b, aで取得したファイル内の特定の文字列を含んだ全てのシート内の一定のセル範囲の取得(シートの数はファイルによる。必ずしも1つというわけではない。) c. bで取得した一定のセル範囲のデータを、1つのシートにまとめる。 あとはこれらのデータをtxtやcsvなどに出力できるようにするつもりです。 私がやってできたのは、同一フォルダ内にあるファイル名に特定の文字列を含むファイルの全てのファイル名を指定したセルに吐き出すことしかできませんでした。 なんか、ややこしい表現かもしれませんが、ご指導お願いします。 環境はxp、エクセル2003です。 よろしくお願いします。

  • 取得したファイル名から拡張子の削除について

    BATにおいて「C:\test」フォルダに格納されているファイルに対してファイル名を取得後、取得したファイル名から拡張子を削除したファイル名を変数にセットしたいと考えていますが、どのようなロジックにしたらいいかご教示頂けますようお願い致します。 実際のファイルの拡張子は削除せず、表示されたファイル名の拡張子を削除したファイル名を変数にセットしたいと考えています。 ------------------------------------------------------------------------------- set FOLDER=C:\test for /f "usebackq" %%i in (`dir %FOLDER% /B *.txt`) do ( echo %%i pause ) ------------------------------------------------------------------------------- -------------------------------------------------------------------------------- C:\testの中身 a.txt bb.txt ccc.txt dd.txt e.txt -------------------------------------------------------------------------------

  • FTPサーバーから受信したファイル一覧からファイル名だけを取得したいです

    こんばんは。いつもお世話になっております。 VB.NET+WinXPなのですが、 FTPサーバーにログインして、 LISTコマンドでファイル一覧を要求すると 「drwxrwxr-x 2 53 53 4096 Feb 28 2006 abc」 などというファイルやフォルダの一覧がかえって来ると思うのですが、 この中からファイル名やフォルダ名だけを取得するには どうしたらよいでしょうか。 TABやコンマが入っていないので、文字列関数で切り取るにも 区切りがわからないと思うのです。 ローカルドライブのDir関数なら、FileAttribute.Nomalや.Directoryの指定でファイル名だけや ディレクトリー名だけを指定して 取得することが出来るのですが、FTPサーバーの場合からの場合はどういった方法があるでしょうか。 参考程度でも構いませんので教えて頂けるとたすかります。m(__)m

専門家に質問してみよう