LoginSignup
0
4

More than 5 years have passed since last update.

フォルダ内のファイルをリストアップするVBA

Last updated at Posted at 2018-07-11

はじめに

業務の中には「頻度は低いけどたまにやってくる単調で面倒な作業」というのが少なからずあります。
そういったものに限って忙しい時にやってきて、「あの時自動化しておけば良かった」と後悔させられるものです。

今回のマクロは前回の「ファイルを仕分ける」の逆バージョンです。
フォルダ内にある大量のファイルをExcelにリストアップする、という単純な内容です。

ファイル一覧化マクロ

pickupfile.xlsm
'-----------------------------------
'ファイル一覧化メソッド
'  フォルダに格納されたファイルのファイル名を「PICKUP」シートへ記載します
'  サブフォルダはチェックしません
'-----------------------------------
Sub pickupFileFunc()
  Dim orgFolderPath As String
  orgFolderPath = ActiveWorkbook.Path 'Excelがあるフォルダパス
  sheetName = "PICKUP" 'ファイル名を記載するシート名

  'エラーが発生しても無視
  On Error Resume Next
  'シートが無ければエラーになるが、エラーが無視されるのでwsは空となる
  Dim ws As Excel.Worksheet
  Set ws = ActiveWorkbook.Sheets(sheetName)
  'エラー無視を無効化
  On Error GoTo 0
  'シートが無ければ作成
  If ws Is Nothing Then
    Worksheets.Add after:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = sheetName
    Set ws = ActiveWorkbook.Sheets(sheetName)
  Else
    ws.Activate
  End If

  'シートをクリア
  ws.Cells.Clear
  ws.Cells(1, "A").Value = "ファイル名"

  Dim fso As Object
  Set fso = CreateObject("Scripting.FileSystemObject")
  Dim cnt As Integer
  cnt = 2
  'ファイル名の取得
  For Each fileObject In fso.GetFolder(orgFolderPath).Files
    '自分は無視
    If Not InStr(fileObject.Name, ActiveWorkbook.Name) <> 0 Then
      ws.Cells(cnt, "A").Value = fileObject.Name
      cnt = cnt + 1
    End If
  Next

  'オブジェクト参照の解除
  Set fso = Nothing
End Sub

使い方

  1. 上記のマクロをExcelのVBエディタにCopy&Paste。
  2. 「Alt+F8」キーをクリックして「moveFileFunc」マクロを実行。
  3. Excelと同じディレクトリ内のファイルがA列にリストアップされて完了。

簡単な解説

下記でExcelが置かれたフォルダパスを取得します。

ActiveWorkbook.Path

下記でシート名が存在するかチェックします。

On Error Resume Next
Dim ws As Excel.Worksheet
Set ws = ActiveWorkbook.Sheets("シート名")
On Error GoTo 0

Set ws = ActiveWorkbook.Sheets("シート名")でシート名を取得しますが、対象のシート名が無ければ通常はエラーになります。
そこで、事前にOn Error Resume Nextでエラーを無効化しておくことでシート名が見つからない場合にwsが空になるようにします。
あとはOn Error GoTo 0でエラー無効化を解除しておしまいです。

下記でフォルダ内のファイルを取得して、ファイル名を一つずつセルに記入していきます。

For Each fileObject In fso.GetFolder("調査したいフォルダパス").Files
  ws.Cells("行番号", "A").Value = fileObject.Name
Next

おわりに

Mac版のExcelでは動作しないので注意してください。(権限でひっかかるようです)

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4