• ベストアンサー

Exelマクロで指定フォルダ内の中身を

Exel VBA 初心者です。 指定したフォルダに入っているフォルダの名前を、Exelマクロで書き出すようにしたいのですが、 どうしたらいいでしょうか。 マイドキュメント\業務ファイル この「業務ファイル」というフォルダの中身を整理するために、 フォルダ名の一覧をExelのシートに書き出したいのです。 以前、指定フォルダ内のファイル名を書き出すマクロを作ったことがあります。 これを改造すればできますか? このマクロでは、B1セルにパスを入れるようにしてあります。 ―――――――――――――――――――――――― Sub ファイル名一覧作成() Dim フォルダ As String Dim ファイル名 As String Dim 行 As Long フォルダ = Cells(1, 2).Value & "\" ファイル名 = Dir(フォルダ & "*.*") Cells(4, 1).Value = ファイル名 行 = 4 Do Until ファイル名 = "" Cells(行, 1).Value = ファイル名 行 = 行 + 1 ファイル名 = Dir() Loop End Sub ―――――――――――――――――――――――― 環境:WindowsXP、Exel2003

  • ume88
  • お礼率100% (8/8)

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

' // Sample1:: 元のコードを生かした場合 Sub フォルダ名一覧作成()   ’// #2 とほとんど同じですね...サブフォルダの列挙なので   ’// 検索のルートとなるフォルダは含めないようにしてます   Dim フォルダ   As String   Dim フォルダ名  As String   Dim 行      As Long   フォルダ = Cells(1, 2).Value & "\"   フォルダ名 = Dir$(フォルダ, vbDirectory)   行 = 4   Do Until Len(フォルダ名) = 0     If フォルダ名 <> "." And フォルダ名 <> ".." Then       If GetAttr(フォルダ & フォルダ名) And vbDirectory Then         Cells(行, 1).Value = フォルダ名         行 = 行 + 1       End If     End If     フォルダ名 = Dir$()   Loop End Sub ' // 以下の方法もあります ' // Sample2:: File System Object を使った例 Sub EnumSubfolders()   Dim fso    As Object   Dim RootFolder As Object   Dim F     As Object   Dim r     As Long      Set RootFolder = CreateObject("Shell.Application"). _            BrowseForFolder(0, "Select Folder", &H1)   If RootFolder Is Nothing Then Exit Sub      Set fso = CreateObject("Scripting.FileSystemObject")   r = 4   For Each F In fso.GetFolder(RootFolder.Self.Path).SubFolders     Cells(r, 1).Value = F.Name     r = r + 1   Next   Set RootFolder = Nothing   Set fso = Nothing End Sub

ume88
質問者

お礼

ありがとうございます! 早速試してみました。 この方法だとルートフォルダは除外されるわけですね。 で、コンマが出てこないということでしょうか。 Sample2ではフォルダの指定ができるのですね! 意図を汲み取って提案してくださってありがとうございます。 初心者の私には一見で理解できるものではありませんが、 じっくり理解していきたいと思います。 VBAの勉強をしていきたいと改めて思いました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 #1の回答者ですが、 >「実行時エラー '53':ファイルが見つかりません。」 その問題は、もともと、フォルダがないのか、それとも、パスの書き方を間違えたか、どちらかです。 「. (コンマ)」しか出てこないなら、そこにフォルダはありません。 Sub フォルダ名一覧作成()   Dim フォルダ As String   Dim フォルダ名 As String   Dim 行 As Long      フォルダ = Cells(1, 2).Value   If Right(フォルダ, 1) <> "\" Then     フォルダ = フォルダ & "\"   End If   フォルダ名 = Dir(フォルダ & "*.*", vbDirectory)   Cells(4, 1).Value = フォルダ名     行 = 4   Do Until Len(フォルダ名) = 0      If GetAttr(フォルダ & フォルダ名) = vbDirectory Then         Cells(行, 1).Value = フォルダ名         行 = 行 + 1      End If     フォルダ名 = Dir()   Loop End Sub

ume88
質問者

お礼

できました! ありがとうございます! フォルダ名も出てくるのですが、コンマも出てきます。 その辺はわからないですが、 やりたいことはできました。 素早い対応に感謝しています。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 >フォルダ名の一覧をExelのシートに書き出したいのです。 あまり、やったことがないけれど、こんなかんじですか? Sub フォルダ名一覧作成()   Dim フォルダ As String   Dim フォルダ名 As String   Dim 行 As Long      フォルダ = Cells(1, 2).Value & "\"   フォルダ名 = Dir(フォルダ & "*.*", vbDirectory)   Cells(4, 1).Value = フォルダ名      行 = 4   Do Until Len(フォルダ名) = 0      If GetAttr(フォルダ名) = vbDirectory Then         Cells(行, 1).Value = フォルダ名         行 = 行 + 1      End If     フォルダ名 = Dir()   Loop End Sub

ume88
質問者

お礼

さっそくのご回答ありがとうございます。 やってみたのですが、   If GetAttr(フォルダ名) = vbDirectory Then の行で止まり、 「実行時エラー '53': ファイルが見つかりません。」 というエラーメッセージが出てしまいます。 どうしたらいいでしょうか? お手数をおかけしますが、またご回答いただけると助かります。

関連するQ&A

  • ExcelVBAでフォルダーからファルイ名を書き出しリンクを貼り、表示名を変える

    下記のようなVBAをつくったのですがうまく行きません。 Option Explicit Dim ドライブ As String Dim フォルダ As String Dim 拡張子 As String Dim 記入シート As String Dim パス As String Dim ファイル名 As String Dim ディスプレイ As String  Dim 貼付行 As Integer Dim ハイパーリンク As String Dim strVal As Variant 'Sub フォルダ中のファイル名をシートに書く() ドライブ = "C" 'ドライブを指定する フォルダ = "M.Co,\My Documents" 拡張子 = "*." & "JPG" 記入シート = "ファイル一覧" End Sub Private Sub 指定フォルダ中の指定拡張子のファイル名をシートに書く() Sheets(記入シート).Activate Cells.Clear 'すべてクリア Range("A1").Select パス = ドライブ & ":\" & フォルダ & "\" 'パスを組む ファイル名 = Dir(パス & 拡張子) strVal = Dir(パス & 拡張子) (1)ディスプレイ = Left(strVal, "SEARCH(""."",strVal)-1") 貼付行 = 0    Do While ファイル名 <> ""    貼付行 = 貼付行 + 1 Cells(貼付行, 1).Value = ファイル名 ActiveSheet.Hyperlinks.Add Anchor:=Cells(貼付行, 1), Address:=ファイル名, TextToDisplay:=ディスプレイ ファイル名 = Dir() '次のファイル名を取り出す Loop End Sub (1)がおかしいです。よろしくお願い致します。

  • Excel マクロ ファイル名取得について

    Excel マクロ ファイル名取得について 特定のフォルダにあるファイルのファイル名を Excelに一覧として作成します。 下記マクロで実現できたのですが、フォルダでファイルを 「詳細」で並べて上から順番にB列に反映することは 可能でしょうか。 ご回答お待ちしております。 Sub fileName() Dim MyF As String Dim myRow As Long 'ファイル名の取得 myRow = 2 MyF = Dir(ThisWorkbook.Path & "\*") If MyF <> "" Then Do Until MyF = "" Cells(myRow, "B").Value = MyF 'ファイル名 MyF = Dir() myRow = myRow + 1 Loop End If End Sub

  • VBAでハイパーリンクをつける

    仕事で画像のファイル名をExcelに書き出し、書き出しものにハイパーリンクで見がうまくいきません。下記のものです。どこが悪いのでしょうか? Option Explicit Dim ドライブ As String Dim フォルダ As String Dim 拡張子 As String Dim 記入シート As String Dim パス As String Dim ファイル名 As String Dim 貼付行 As Integer Sub フォルダ中のファイル名をシートに書く() ドライブ = "C" フォルダ = "分析" 拡張子 = "*." & "JPG" 記入シート = "ファイル一覧" End Sub Private Sub 指定フォルダ中の指定拡張子のファイル名をシートに書く() Sheets(記入シート).Activate Cells.Clear Range("A1").Select パス = ドライブ & ":\" & フォルダ & "\" ファイル名 = Dir(パス & 拡張子) 貼付行 = 0 Do While ファイル名 <> "" 貼付行 = 貼付行 + 1 Cells(貼付行, 1).Value = ファイル名 ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=ファイル名, TextToDisplay:=ファイル名 ファイル名 = Dir() Loop End Sub 実行すると初めの一行だけリンクができ後は一行もできません。よろしくお願い致します。

  • VBA フォルダ内のファイル名一覧

    下のようなコードですが、Dir("C:\見積\*.xls")の部分を このコードを書いてあるブックのあるフォルダの名前をもっと簡単に取得してコードにできないでしょうか。 もうひとつ付け加えたいこともあります。ファイル名一覧にする際、このブックと「XXX.xls」という名前のブック名以外の一覧にしたいのですが、これもお手上げですので、あわせてお願いします。 Sub test() Dim myFile As String Dim fl As Integer myFile = Dir("C:\見積\*.xls") fl = 9 Do While myFile <> "" fl = fl + 1 Cells(fl, 3).Value = myFile myFile = Dir() Loop End sub

  • 指定フォルダ内のファイルオープン→別フォルダに同じファイル名のcsvとして保存 のマクロを作ろうとしています

    エクセルで、指定フォルダ内のファイルオープン→別フォルダに同じファイル名のcsvとして保存 のマクロを作ろうとしています。 現在下記のようなマクロを途中まで作成したのですが、保存の良い方法が分からず困っております。 (ファイルオープンまでは出来ているようですが、その後エラーが出てしまいます) どなたかお知恵を拝借願えませんでしょうか。 どうぞ宜しくお願い致します。 Sub Book_Open() Dim BookName As String Dim PathName As String PathName = "C:\test_htmltocsv\test\" BookName = Dir(PathName & "*.html") Do Until BookName = "" Workbooks.Open PathName & BookName BookName = Dir() ActiveWorkbook.SaveAs "Sample.xls" ←← Loop End Sub

  • エクセルのマクロで複数セル指定は?

    以前(7月22日 質問No.936181)の質問でご回答を頂いたマクロなんですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyData As String Dim i As Integer Dim ImaNanji As String Dim SakkiNanji As String Dim ImaNanpun As String Dim SakkiNanpun As String SakkiNanpun = Cells(2, 3).Value ImaNanji = Cells(1, 3).Value ImaNanpun = Mid(ImaNanji, Len(ImaNanji) - 4, 2) If ImaNanpun <> SakkiNanpun Then Application.EnableEvents = False For i = 10 To 2 Step -1 MyData = Cells(i - 1, 2).Value Cells(i, 2).Value = MyData Next i MyData = Cells(1, 1).Value Cells(1, 2).Value = MyData Cells(2, 3).Value = ImaNanpun Application.EnableEvents = True End If End Sub A1のデータをB1からB10に一分おきにつぎつぎに書き込むというものなんですが、ひとつのセルではなく複数のセル(例えばA1からA30の30個のセル)をいっぺんに書き込むようにしたいのですが可能でしょうか? よろしくお願いします。

  • Excelマクロでフォルダ内のCSVファイルを一括で読み込ませるには?

    Excelファイルと同階層にあるCSVファイルを読み込ませるマクロを作ってみたのですが、正常に動作しません。 アドバイスいただければ幸いです。 Excel2003を使用しています。 Sub 同階層フォルダ内のCSV読込_Click() Dim fname As String 'ファイル名 Dim pathname As String 'パス名 Dim dat(1 To 4) As Variant '読み込んだデータ Dim rr As Long '対象行番号 Dim i As Integer '列のオフセット Dim j As Integer 'ファイル識別番号のオフセット '同階層フォルダ内のCSVファイルを参照 pathname = ".\*.csv" fname = Dir(pathname, vbNormal) 'データを挿入する行番号 rr = 2 '該当するファイルがある間 Do While fname <> "" j = 0 j = j + 1 'ファイルを開く Open fname For Input As #j 'ファイルの終端まで Do Until EOF(j) 'データを取得 Input #j, dat(1), dat(2), dat(3), dat(4) '読み込んだデータをセルに出力 For i = 1 To 4 Cells(rr, i).Value = dat(i) Next '行番号を更新 rr = rr + 1 Loop Close #j 'フォルダ内の次のファイルを検索 fname = Dir() Loop End Sub

  • テキストファイルをエクセルに移すマクロのことで?

    以前、複数のテキストファイルをエクセルに移すマクロを教えてもらったのですが、 以下マクロですと、フォルダのパスを指定しないといけません。 今回教えてもらいたいのは、フォルダのパスを指定しなくてもよい方法です。 どういう事かと言うと、仮にディスクトップにフォルダがあるとします。 そのフォルダの中には、マクロが入っているエクセルシートとテキストが入っているフォルダです。 つまり、そのフォルダ内だけで、処理をしたいと考えています。 また、フォルダ名は、その時によって異なります。 今までは、以下の方法を使っていたのですが、ちょっと使いにくいと感じています。 申し訳ありませんが、どなたか教えていただけないでしょうか? Sub Macro() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim FolderPath As String 'ここのアドレスをファイルが格納されているフォルダのパスに変えてください FolderPath = "C:\Users\・・・" Dim myFile As Object Dim i As Long i = 2 Dim myFolder As Object For Each myFolder In fso.GetFolder(FolderPath).SubFolders For Each myFile In fso.GetFolder(myFolder).Files Cells(i, 4).Value = myFolder Cells(i, 1).Value = myFile.Name Cells(i, 7).Value = fso.OpenTextFile(myFile.Path).ReadAll() i = i + 1 Next Next End Sub Private Sub CommandButton1_Click() End Sub

  • 他のブックを開かずに値を取得したい

    お世話になっております。。。 excel2007です。 アクティブである、ThisWorkbookに 外部ファイルから値のみ取得し、ThisWorkbookのA14セルからA27まで 入力させたい・・・ のですが、上手くいきません。 WEB検索して、ExecuteExcel4Macroでやってみたのですが、 Cells(1, C + 13) = ExecuteExcel4Macro("'strFullPath1'!受注書" & "Cells(2, C + 23)") のところで、「値の更新:strFullPath1」と出てしまいます。 どうしたら良いでしょうか? Private Sub CommandButton1_Click() Const FILE_DIR1 As String = "\\192.168.~" '途中までのパス Const FILE_DIR2 As String = "\\192.168.~~" '途中までのパス Dim strFullPath1 As String Dim strFullPath2 As String Dim strFileName As String Dim フォルダ名 As String Dim C As Integer フォルダ名 = TextBox2.Value & "\" & Range("B4") & "\" strFileName = "*" & Range("B5") & " " & Range("B6") & ".xls" strFullPath1 = FILE_DIR1 & フォルダ名 & strFileName strFullPath2 = FILE_DIR2 & フォルダ名 & strFileName C = 1 If Dir(strFullPath1) <> "" Then For C = 1 To 14 Cells(1, C + 13) = ExecuteExcel4Macro("'strFullPath1'!受注書" & "Cells(2, C + 23)") Next D Else For C = 1 To 14 Cells(1, C + 13).Formula = "[strFullPath2]sheet!cells(1,D+17)" Cells(1, C + 13).Value = Cells(D, 14).Value Next D End If Unload Me End Sub 端折っているので、抜けがあるかもしれません。 お知恵を頂けますでしょうか? 宜しくお願い致します。

  • エクセルマクロ フォルダ内のファイル検索で

    よろしくおねがいします。 下記で、どうも指定フォルダ内のファイル名を検索できていないようで 条件の"ないなら"に反応して中断するハズがファイルを開いてしまいます。 思ったのですが、bufの設定にファイル名は指定できないのでしょうか? Sub Start8() Dim buf As String, IptA As String Const Path As String = "C:\001\" IptA = Workbooks("AAA.xls").Sheets("Sheet1").Cells(1, 1).Value buf = Dir(Path & "" & IptA & ".txt") If buf = "" Then Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptA & "は見つかりません" Exit Sub Else Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptFN & "が見つかりました" End If Workbooks.OpenText Filename:= _ "C:\001\" & IptA & ".txt" End Sub

専門家に質問してみよう