Содержание
- List of all Files and Folders: How to Easily Insert a Directory in Excel!
- Summary
- Method 1: Simply copy and paste from Mac Finder to Excel
- Method 2: Insert a file list with built-in Excel functions using “Named Ranges”
- Set up the named range
- Use the named range in Excel functions
- Method 3: Use an internet browser to quickly copy and paste a file list to Excel
- Method 4: Create a file list with PowerQuery
- Method 5: Excel Add-in Professor Excel Tools
- Method 6: Use PowerShell to extract a file list
- Open PowerShell and write the directory into a text file
- Import text file into Excel
- Method 7: Let a VBA Macro loop through the files
- Download
List of all Files and Folders: How to Easily Insert a Directory in Excel!
You probably don’t need this every day: But once a file you might want to have a list of all files within a folder or directory in Excel. The good thing: There are many methods available. If you Google it, you will find a lot of different methods to create a file list in Excel. But unfortunately, all of them have advantages and disadvantages – which you usually only find out after trying them. That’s the reason for this article: You won’t only learn each method step by step: You will rather find an overview comparing all the advantages and disadvantages of each method. After seeing this, you don’t need to start extensive trials and errors. Much better: You can easily select the method that works best for you!
Summary
Method 1: Copy & Paste on Mac |
Method 2: Named function |
Method 3: Internet browser |
Method 4: PowerQuery |
Method 5: Excel-Add-In |
Method 6: Windows PowerShell |
Method 7: VBA Macro |
|
---|---|---|---|---|---|---|---|
Short description | Copy and paste from the Mac Finder. | Use a function in a named range to insert a file list. | Open folder with a web browser and copy the file list. | Use PowerQuery to insert a directory. | Let an Excel add-in do the work for you. | Use the Windows built-in PowerShell feature. | Use a VBA Macro to insert a file list. |
Ease of use | |||||||
Operating system | Mac | Windows | Windows / Mac | Windows / Mac | Windows | Windows | Windows |
Include subfolders and files |
No | No | No | Yes | Yes | Yes | (Yes) (depends on the VBA macro) |
File information available | File names | File names | File names, file links (not working properly), file size, date modified | Folder path, name extension, date accessed, date modified, date created More attributes: |
Links to files on the drive, file path, date and time last saved, date and time created, file size, file type File name, file path, date and time last saved, file size Depends on the VBA macro Technology Mac Finder Named function in Excel Internet browser PowerQuery Excel Add-In PowerShell, Text Import Wizard VBA Comment Fast but with limited options. Only shows files, no folders. File links not working in our test; not working with all internet browsers (tested with Google Chrome and working). Elegant and uses built-in functions. Convenient, fast and many options. Results not good, difficult process; performs well on large file structures, though. Modifying the macro rather for advanced users. Link Click here Click here Click here Click here Click here Click here Click here
Method 1: Simply copy and paste from Mac Finder to Excel
This first method works on a Mac only: Just select all files in a Finder window and press copy (Command + C on the keyboard). Next, switch to Excel and paste the list: Press Command + V on the keyboard.
The advantage of this method is that it’s very easy and fast. Unfortunately, you don’t have any further options than just pasting the file names. That means you can’t insert data of subfolders or file properties.
Recommendation: Use this if you need a quick file list on the Mac – without any further information.
Method 2: Insert a file list with built-in Excel functions using “Named Ranges”
The second method is actually quite elegant: Use built-in Excel functions to insert a file list in Excel. It is built on advanced functions, such as an Excel function within a named range. But following these steps should be quite straight-forward.
Set up the named range
- Choose a cell in which you later write the folder path. In this case, it’s cell C4.
- Click on “Defined Name” on the Formulas ribbon.
- Give a name for the cell containing the folder path (here: “Folder_Path”)
- In the “Refers to” field, type: =files(linktopathcell) (replace “linktopathcell” with your cell reference – in this case “Method_2!$C$4”).
- Confirm with OK.
Use the named range in Excel functions
- Go to the Windows Explorer and copy the folder path.
- Paste the folder link into the folder path cell (the cell you have set as the named range in step 1 above). Add one of the following endings:
- If you want to include all files – no matter which file type – in your list, add *
- For listing only Excel files, add *.xls*
- If you want to see all files ending on “.xlsx”, add *.xlsx
- As the last step, enter an INDEX function for compiling the list (here in cell B7):
=INDEX(Folder_Path,ROW(B1))
Folder_Path should be the same name that you have given in step 3 above. The ROW function should refer to any cell in the first row (for example to B1). That means, this argument could also be A1, C1, etc.
As the last step: Copy the INDEX function down until you see the first #REF error. #REF means in this case that there are no more files in your folder. If you like, you could wrap the IFERROR function around in order to mitigate the error.
Recommendation: Use this if you only need a list of files (no subfolders) that dynamically updates itself.
Method 3: Use an internet browser to quickly copy and paste a file list to Excel
I must say, I like this idea because it’s almost as fast as our method number 1 above: Open a folder in a webbrowser and then copy & paste the list to Excel.
- Copy the folder path from the Windows Explorer like on the screenshot or Mac Finder (for Mac: open file Info (right-click on folder and then on “Get Info”. Select and copy link from “Where” section).
- Open a browser, for example Google Chrome (should be working with most other browsers as well). Paste the previously copied link into the address field.
- Copy the table of files.
- Open Excel and paste the file list.
One comment to this methods: The links (which are also created) usually won’t work in Excel.
Recommendation: Use this if you quickly need a file list (without subfolders), including some file properties such as file size and date last saved.
Method 4: Create a file list with PowerQuery
The next method is also among my favorites: It uses PowerQuery and comes with the advantages that it doesn’t require any complex programming or third-party technologies. Also, it can be refreshed easily later on.
- Go to the Data ribbon, click on “Get Data” on the left, and select “From Folder” in the “From File” sub-menu.
- Select the Folder and click on “Open” (not in the screenshot on the right).
- You can now see a preview. Click on “Transform Data”.
- Remove the first column “Content” (right-click on the heading and click on “Remove”).
- If you want to see more file attributes than shown already in the preview, click on the small arrows of the “Attributes” column and select the attributes.
- Click on Close & Load.
Recommendation: Use this method if you to have lots of file properties. It can later on easily be refreshed.
The Excel add-in Professor Excel Tools offers a function to easily insert directories. It regards subfolders and can insert various file properties:
- Links to files on the drive
- File path
- Date and time last saved
- Date and time created
- File size
- File type
You can further specify, where the directory should be created.
Using the “Get Directory” function is very simple:
- Click on the Directory button on the Professor Excel ribbon.
- Select all the file properties you’d like to show and the location, where the directory table should be placed in your Excel file.
- Click on “Select folder and start”. Then, choose the folder and proceed with ok.
That’s it. Please feel free to download Professor Excel Tools here.
Recommendation: Use this method if you accept third-party add-ins within Excel. If you do, it’s quite convenient and fast.
This function is included in our Excel Add-In ‘Professor Excel Tools’
(No sign-up, download starts directly)
More than 35,000 users can’t be wrong.
As you can see in the following description, using PowerShell takes quite a lot of steps. It might be useful, though, if you have very large folder structures. Otherwise, try to use a different method.
Open PowerShell and write the directory into a text file
- Navigate to the folder which you want to have the file list from. Hold down the Shift key on the keyboard and right-click on it (if you don’t hold down the Shift key, the option of “Open PowerShell window here” is not available).
- Click on “Open PowerShell window here”.
- Copy and paste the following code and press enter afterwards:
Import text file into Excel
Open Microsoft Excel.
- Open the Text Import Wizard: Go to the Data ribbon, click on “Get Data” on the left, then on “Legacy Wizards” and then on “From Text (Legacy)”. If this option is not available, you can activate it within the Excel settings (check this article for more information).
- Select the file filelist.txt from your folder. In step 3 above it was created within your target folder.
Follow the import steps of the Text Import Wizard on the screen:
- In the first step of three, make sure that “Fixed width” is selected. Click on Next.
- In the lower part of the window, Excel shows a preview of your import. Check here, if the column separators are set correctly: You can move the vertical lines if necessary or add more by clicking on the respective number in the heading of the preview. Then click on Next and in the third step Next again. After that finish the Text Import Wizard by selecting the location where the file list should be placed.
- As you can see in number 8, the file list is inserted, but has some disadvantages: Directory paths are cut, each subfolder has its own block, and so on.
In a nutshell: This method of creating file lists within Microsoft Excel via PowerShell is complex and the results aren’t as good as in the other methods.
Recommendation: Try to avoid this method.
Do you want to boost your productivity in Excel?
Get the Professor Excel ribbon!
Add more than 120 great features to Excel!
Method 7: Let a VBA Macro loop through the files
The following VBA code creates a list of all files in a folder. The list will be placed on the currently active worksheet, starting from cell A1. Please make sure that you don’t override anything here.
Here is how to use the VBA-Code. If you need more help of how to use VBA macros, please refer to this article.
- Copy the VBA code from above.
- Open the VBA editor by pressing Alt + F11 on the keyboard.
- Insert a new module: Right-click on the active workbook name on the left.
- Go to “Insert” and click on “Module”.
- Paste the code by pressing Ctrl + V on the keyboard.
- Replace Your folder path with the path from your own folder.
- Click on start in the VBA editor.
Download
Please feel free to download all examples from above in this comprehensive Excel workbook. Each method is located on a different worksheet. Just click here and the download starts.
Источник
You probably don’t need this every day: But once a file you might want to have a list of all files within a folder or directory in Excel. The good thing: There are many methods available. If you Google it, you will find a lot of different methods to create a file list in Excel. But unfortunately, all of them have advantages and disadvantages – which you usually only find out after trying them. That’s the reason for this article: You won’t only learn each method step by step: You will rather find an overview comparing all the advantages and disadvantages of each method. After seeing this, you don’t need to start extensive trials and errors. Much better: You can easily select the method that works best for you!
Summary
Method 1: Copy & Paste on Mac |
Method 2: Named function |
Method 3: Internet browser |
Method 4: PowerQuery |
Method 5: Excel-Add-In |
Method 6: Windows PowerShell |
Method 7: VBA Macro |
|
---|---|---|---|---|---|---|---|
Short description | Copy and paste from the Mac Finder. | Use a function in a named range to insert a file list. | Open folder with a web browser and copy the file list. | Use PowerQuery to insert a directory. | Let an Excel add-in do the work for you. | Use the Windows built-in PowerShell feature. | Use a VBA Macro to insert a file list. |
Ease of use | |||||||
Operating system | Mac | Windows | Windows / Mac | Windows / Mac | Windows | Windows | Windows |
Include subfolders and files |
No | No | No | Yes | Yes | Yes | (Yes) (depends on the VBA macro) |
File information available | File names | File names | File names, file links (not working properly), file size, date modified | Folder path, name extension, date accessed, date modified, date created More attributes: Content type, kind, size, ReadOnly, hidden, S |
Links to files on the drive, file path, date and time last saved, date and time created, file size, file type | File name, file path, date and time last saved, file size | Depends on the VBA macro |
Technology | Mac Finder | Named function in Excel | Internet browser | PowerQuery | Excel Add-In | PowerShell, Text Import Wizard | VBA |
Comment | Fast but with limited options. | Only shows files, no folders. | File links not working in our test; not working with all internet browsers (tested with Google Chrome and working). | Elegant and uses built-in functions. | Convenient, fast and many options. | Results not good, difficult process; performs well on large file structures, though. | Modifying the macro rather for advanced users. |
Link | Click here | Click here | Click here | Click here | Click here | Click here | Click here |
Method 1: Simply copy and paste from Mac Finder to Excel
This first method works on a Mac only: Just select all files in a Finder window and press copy (Command + C on the keyboard). Next, switch to Excel and paste the list: Press Command + V on the keyboard.
The advantage of this method is that it’s very easy and fast. Unfortunately, you don’t have any further options than just pasting the file names. That means you can’t insert data of subfolders or file properties.
Recommendation: Use this if you need a quick file list on the Mac – without any further information.
Method 2: Insert a file list with built-in Excel functions using “Named Ranges”
The second method is actually quite elegant: Use built-in Excel functions to insert a file list in Excel. It is built on advanced functions, such as an Excel function within a named range. But following these steps should be quite straight-forward.
Set up the named range
- Choose a cell in which you later write the folder path. In this case, it’s cell C4.
- Click on “Defined Name” on the Formulas ribbon.
- Give a name for the cell containing the folder path (here: “Folder_Path”)
- In the “Refers to” field, type: =files(linktopathcell) (replace “linktopathcell” with your cell reference – in this case “Method_2!$C$4”).
- Confirm with OK.
Use the named range in Excel functions
- Go to the Windows Explorer and copy the folder path.
- Paste the folder link into the folder path cell (the cell you have set as the named range in step 1 above). Add one of the following endings:
- If you want to include all files – no matter which file type – in your list, add *
- For listing only Excel files, add *.xls*
- If you want to see all files ending on “.xlsx”, add *.xlsx
- As the last step, enter an INDEX function for compiling the list (here in cell B7):
=INDEX(Folder_Path,ROW(B1))
Folder_Path should be the same name that you have given in step 3 above. The ROW function should refer to any cell in the first row (for example to B1). That means, this argument could also be A1, C1, etc.
As the last step: Copy the INDEX function down until you see the first #REF error. #REF means in this case that there are no more files in your folder. If you like, you could wrap the IFERROR function around in order to mitigate the error.
Recommendation: Use this if you only need a list of files (no subfolders) that dynamically updates itself.
Method 3: Use an internet browser to quickly copy and paste a file list to Excel
I must say, I like this idea because it’s almost as fast as our method number 1 above: Open a folder in a webbrowser and then copy & paste the list to Excel.
- Copy the folder path from the Windows Explorer like on the screenshot or Mac Finder (for Mac: open file Info (right-click on folder and then on “Get Info”. Select and copy link from “Where” section).
- Open a browser, for example Google Chrome (should be working with most other browsers as well). Paste the previously copied link into the address field.
- Copy the table of files.
- Open Excel and paste the file list.
One comment to this methods: The links (which are also created) usually won’t work in Excel.
Recommendation: Use this if you quickly need a file list (without subfolders), including some file properties such as file size and date last saved.
Method 4: Create a file list with PowerQuery
The next method is also among my favorites: It uses PowerQuery and comes with the advantages that it doesn’t require any complex programming or third-party technologies. Also, it can be refreshed easily later on.
- Go to the Data ribbon, click on “Get Data” on the left, and select “From Folder” in the “From File” sub-menu.
- Select the Folder and click on “Open” (not in the screenshot on the right).
- You can now see a preview. Click on “Transform Data”.
- Remove the first column “Content” (right-click on the heading and click on “Remove”).
- If you want to see more file attributes than shown already in the preview, click on the small arrows of the “Attributes” column and select the attributes.
- Click on Close & Load.
Recommendation: Use this method if you to have lots of file properties. It can later on easily be refreshed.
The Excel add-in Professor Excel Tools offers a function to easily insert directories. It regards subfolders and can insert various file properties:
- Links to files on the drive
- File path
- Date and time last saved
- Date and time created
- File size
- File type
You can further specify, where the directory should be created.
Using the “Get Directory” function is very simple:
- Click on the Directory button on the Professor Excel ribbon.
- Select all the file properties you’d like to show and the location, where the directory table should be placed in your Excel file.
- Click on “Select folder and start”. Then, choose the folder and proceed with ok.
That’s it. Please feel free to download Professor Excel Tools here.
Recommendation: Use this method if you accept third-party add-ins within Excel. If you do, it’s quite convenient and fast.
This function is included in our Excel Add-In ‘Professor Excel Tools’
(No sign-up, download starts directly)
As you can see in the following description, using PowerShell takes quite a lot of steps. It might be useful, though, if you have very large folder structures. Otherwise, try to use a different method.
Open PowerShell and write the directory into a text file
- Navigate to the folder which you want to have the file list from. Hold down the Shift key on the keyboard and right-click on it (if you don’t hold down the Shift key, the option of “Open PowerShell window here” is not available).
- Click on “Open PowerShell window here”.
- Copy and paste the following code and press enter afterwards:
Get-ChildItem -Path $MyInvocation.MyCommand.Path -force -recurse > filelist.txt
Import text file into Excel
Open Microsoft Excel.
- Open the Text Import Wizard: Go to the Data ribbon, click on “Get Data” on the left, then on “Legacy Wizards” and then on “From Text (Legacy)”. If this option is not available, you can activate it within the Excel settings (check this article for more information).
- Select the file filelist.txt from your folder. In step 3 above it was created within your target folder.
Follow the import steps of the Text Import Wizard on the screen:
- In the first step of three, make sure that “Fixed width” is selected. Click on Next.
- In the lower part of the window, Excel shows a preview of your import. Check here, if the column separators are set correctly: You can move the vertical lines if necessary or add more by clicking on the respective number in the heading of the preview. Then click on Next and in the third step Next again. After that finish the Text Import Wizard by selecting the location where the file list should be placed.
- As you can see in number 8, the file list is inserted, but has some disadvantages: Directory paths are cut, each subfolder has its own block, and so on.
In a nutshell: This method of creating file lists within Microsoft Excel via PowerShell is complex and the results aren’t as good as in the other methods.
Recommendation: Try to avoid this method.
Do you want to boost your productivity in Excel?
Get the Professor Excel ribbon!
Add more than 120 great features to Excel!
Method 7: Let a VBA Macro loop through the files
The following VBA code creates a list of all files in a folder. The list will be placed on the currently active worksheet, starting from cell A1. Please make sure that you don’t override anything here.
Sub InsertFileList()
Dim objFileSystemObject As Object, objFolder As Object, objFile As Object, i As Integer
Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFileSystemObject.GetFolder("Your folder path")
For Each objFile In objFolder.Files
i = i + 1
ActiveSheet.Cells(i, 1) = objFile.Name
Next
End Sub
Here is how to use the VBA-Code. If you need more help of how to use VBA macros, please refer to this article.
- Copy the VBA code from above.
- Open the VBA editor by pressing Alt + F11 on the keyboard.
- Insert a new module: Right-click on the active workbook name on the left.
- Go to “Insert” and click on “Module”.
- Paste the code by pressing Ctrl + V on the keyboard.
- Replace Your folder path with the path from your own folder.
- Click on start in the VBA editor.
Download
Please feel free to download all examples from above in this comprehensive Excel workbook. Each method is located on a different worksheet. Just click here and the download starts.
Image by Pexels from Pixabay
Listing the files in a folder is one of the activities which cannot be achieved using normal Excel formulas. I could tell you to turn to VBA macros or PowerQuery, but then any non-VBA and non-PowerQuery users would close this post instantly. But wait! Back away from the close button, there is another option.
For listing files in a folder we can also use a little-known feature from Excel version 4, which still works today, the FILES function.
If you search through the list of Excel functions, FILES is not listed. The FILES function is based on an old Excel feature, which has to be applied in a special way. The instructions below will show you step-by-step how to use it.
Create a named range for the FILES function
The first step is to create a named range, which contains the FILES function. Within the Excel Ribbon click Formulas -> Define Name
Within the New Name window set the following criteria:
- Name: listFiles
Can be any name you wish, but for our example we will be using listFiles. - Refers to: =FILES(Sheet1!$A$1)
Sheet1!$A$1 is the sheet and cell reference containing the name of the folder from which the files are to be listed.
Click OK to close the New Name window.
Apply the function to list files
The second step is to set-up the worksheet to use the named range.
In Cell A1 (or whichever cell reference used in the Refers to box) enter the folder path from which to list the files, followed by an Asterisk ( * ). The Asterisk is the wildcard character to find any text, so it will list all the files in the folder.
Select the cell in which to start the list of files (Cell A3 in the screenshot below), enter the following formula.
=INDEX(listFiles,1)
The result of the function will be the name of the first file in the folder.
To retrieve the second file from the folder enter the following formula
=INDEX(listFiles,2)
It would be painful to change the file reference number within each formula individually, especially if there are hundreds of files. The good news is, we can use another formula to calculate the reference number automatically.
=INDEX(listFiles,ROW()-ROW(A$2))
The ROW() function is used to retrieve the row number of a cell reference. When used without a cell reference, it returns the row number of the cell in which the function is used. When used with a cell reference it returns the row number of that cell. Using the ROWS function, it is possible to create a sequential list of numbers starting at 1, and increasing by 1 for each cell the formula is copied into.
If the formula is copied down further than the number of files in the folder, it will return a #REF! error.
Finally, wrap the formula within an IFERROR function to return a blank cell, rather than an error.
=IFERROR(INDEX(listFiles,ROW()-ROW(A$2)),"")
Listing specific types of files
The FILES function does not just list Excel files; it lists all file types; pdf, csv, mp3, zip, any file type you can think of. By extending the use of wildcards within the file path it is possible to restrict the list to specific file types, or to specific file names.
The screenshot below shows how to return only files with “pdf” as the last three characters of the file name.
The wildcards which can be applied are:
- Question mark ( ? ) – Can take the place of any single character.
- Asterisk ( * ) – Represents any number of characters
- Tilde ( ~ ) – Used as an escape character to search for an asterisk or question mark within the file name, rather than as a wildcard.
The screenshot below shows how to return only files with the name of “New York.“, followed by exactly three characters.
Advanced uses for the FILES named range
Below are some ideas of how else you could use the FILES function.
Count the number of files
The named range created works like any other named range. However, rather than containing cells, it contains values. Therefore, if you want to calculate the number of files within the folder, or which meet the wildcard pattern use the following formula:
=COUNTA(listFiles)
Create hyperlinks to the files
Wouldn’t it be great to click on the file name to open it automatically? Well . . . just add in the HYPERLINK function and you can.
The formula in Cell A3 is:
=IFERROR(HYPERLINK(LEFT($A$1,LEN($A$1)-1)&INDEX(listFiles,ROW()-ROW(A$2)), INDEX(listFiles,ROW()-ROW(A$2))),"")
Check if a specific file exists within a folder
It isn’t necessary to list all the files to find out if a file exists within the folder. The MATCH function will return the position of the file within the folder.
The formula in cell B3 is:
=MATCH(A3,listFiles,0)
In our example, a file which contains the text “New Yor*” exists, as the 7th file, therefore a 7 is returned. Cell B4 displays the #N/A error because “Seattle” does not exist in the folder.
Find the name of the next or previous file
The files returned are in alphabetical order, therefore it is possible to find the next or previous file using the INDEX / MATCH combination.
The next file after “Denver.xlsx” is “New York.pdf“. The formula in Cell B3 is:
=INDEX(listFiles,MATCH(A3,listFiles,0)+1)
Retrieve values from each file with INDIRECT
The INDIRECT function can construct a cell reference using text strings. Having retrieved the list of files in a folder, it would be possible to obtain values from those files.
The formula in Cell B3 is:
=INDIRECT("'"&LEFT($A$1,LEN($A$1)-1)&"["&A3&"]Sheet1'!$A$1")
For INDIRECT to calculate correctly the file does need to be open, so this may be a significant flaw in this option.
Usage notes
When working with the FILES function there are a few things to be aware of:
- The file path and file name is not case sensitive
- Files are returned in alphabetical order
- Folders and hidden files are not returned by the function
- The workbook must be saved as a “.xlsm” file format
Further reading
There are variety of other Excel 4 functions available which still work in Excel. Check out this post to find out how to apply them and download the Excel 4 Macro functions reference guide.
If you decide to use a VBA method, check out this post.
About the author
Hey, I’m Mark, and I run Excel Off The Grid.
My parents tell me that at the age of 7 I declared I was going to become a qualified accountant. I was either psychic or had no imagination, as that is exactly what happened. However, it wasn’t until I was 35 that my journey really began.
In 2015, I started a new job, for which I was regularly working after 10pm. As a result, I rarely saw my children during the week. So, I started searching for the secrets to automating Excel. I discovered that by building a small number of simple tools, I could combine them together in different ways to automate nearly all my regular tasks. This meant I could work less hours (and I got pay raises!). Today, I teach these techniques to other professionals in our training program so they too can spend less time at work (and more time with their children and doing the things they love).
Do you need help adapting this post to your needs?
I’m guessing the examples in this post don’t exactly match your situation. We all use Excel differently, so it’s impossible to write a post that will meet everybody’s needs. By taking the time to understand the techniques and principles in this post (and elsewhere on this site), you should be able to adapt it to your needs.
But, if you’re still struggling you should:
- Read other blogs, or watch YouTube videos on the same topic. You will benefit much more by discovering your own solutions.
- Ask the ‘Excel Ninja’ in your office. It’s amazing what things other people know.
- Ask a question in a forum like Mr Excel, or the Microsoft Answers Community. Remember, the people on these forums are generally giving their time for free. So take care to craft your question, make sure it’s clear and concise. List all the things you’ve tried, and provide screenshots, code segments and example workbooks.
- Use Excel Rescue, who are my consultancy partner. They help by providing solutions to smaller Excel problems.
What next?
Don’t go yet, there is plenty more to learn on Excel Off The Grid. Check out the latest posts:
You can use the built-in Dir function or the FileSystemObject.
-
Dir Function: VBA: Dir Function
-
FileSystemObject: VBA: FileSystemObject — Files Collection
They each have their own strengths and weaknesses.
Dir Function
The Dir Function is a built-in, lightweight method to get a list of files. The benefits for using it are:
- Easy to Use
- Good performance (it’s fast)
- Wildcard support
The trick is to understand the difference between calling it with or without a parameter. Here is a very simple example to demonstrate:
Public Sub ListFilesDir(ByVal sPath As String, Optional ByVal sFilter As String)
Dim sFile As String
If Right(sPath, 1) <> "" Then
sPath = sPath & ""
End If
If sFilter = "" Then
sFilter = "*.*"
End If
'call with path "initializes" the dir function and returns the first file name
sFile = Dir(sPath & sFilter)
'call it again until there are no more files
Do Until sFile = ""
Debug.Print sFile
'subsequent calls without param return next file name
sFile = Dir
Loop
End Sub
If you alter any of the files inside the loop, you will get unpredictable results. It is better to read all the names into an array of strings before doing any operations on the files. Here is an example which builds on the previous one. This is a Function that returns a String Array:
Public Function GetFilesDir(ByVal sPath As String, _
Optional ByVal sFilter As String) As String()
'dynamic array for names
Dim aFileNames() As String
ReDim aFileNames(0)
Dim sFile As String
Dim nCounter As Long
If Right(sPath, 1) <> "" Then
sPath = sPath & ""
End If
If sFilter = "" Then
sFilter = "*.*"
End If
'call with path "initializes" the dir function and returns the first file
sFile = Dir(sPath & sFilter)
'call it until there is no filename returned
Do While sFile <> ""
'store the file name in the array
aFileNames(nCounter) = sFile
'subsequent calls without param return next file
sFile = Dir
'make sure your array is large enough for another
nCounter = nCounter + 1
If nCounter > UBound(aFileNames) Then
'preserve the values and grow by reasonable amount for performance
ReDim Preserve aFileNames(UBound(aFileNames) + 255)
End If
Loop
'truncate the array to correct size
If nCounter < UBound(aFileNames) Then
ReDim Preserve aFileNames(0 To nCounter - 1)
End If
'return the array of file names
GetFilesDir = aFileNames()
End Function
File System Object
The File System Object is a library for IO operations which supports an object-model for manipulating files. Pros for this approach:
- Intellisense
- Robust object-model
You can add a reference to to «Windows Script Host Object Model» (or «Windows Scripting Runtime») and declare your objects like so:
Public Sub ListFilesFSO(ByVal sPath As String)
Dim oFSO As FileSystemObject
Dim oFolder As Folder
Dim oFile As File
Set oFSO = New FileSystemObject
Set oFolder = oFSO.GetFolder(sPath)
For Each oFile In oFolder.Files
Debug.Print oFile.Name
Next 'oFile
Set oFile = Nothing
Set oFolder = Nothing
Set oFSO = Nothing
End Sub
If you don’t want intellisense you can do like so without setting a reference:
Public Sub ListFilesFSO(ByVal sPath As String)
Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sPath)
For Each oFile In oFolder.Files
Debug.Print oFile.Name
Next 'oFile
Set oFile = Nothing
Set oFolder = Nothing
Set oFSO = Nothing
End Sub
Assume a folder named Test on the desktop. In this Test folder, there is another folder named Survey reports. In the Survey reports folder, there are Word documents, PowerPoint files, Excel files, PDF files and all sort of other files types.
In a new workbook, one may want to list down all Excel files from the Survey reports folder (saved on the desktop) without using VBA. Furthermore, for new Excel files added to the folder, the list should keep updating.
Solution for MS Excel 2010 and higher versions
If you are using the Power Query add-in, then a few simple steps (no formulas at all) can solve this problem. The result will be dynamic and refreshable (just as in a Pivot Table). In Power Query, there is a feature to append data from multiple workbooks into one running range. The detailed process to do so is described below:
1. Go to Power Query > From File > From Folder
2. Choose the Test folder on the desktop and click on OK
3. Filter the extension column on “Contains” .xls
4. Right click on the Name column heading and choose “Remove Other columns”
5. Click on Apply and Close
This should now list down all MS Excel files lying the Test folder. This is a dynamic list i.e. add or remove Excel files from the folder and just right click on any cell and select Refresh.
Solution for all versions of MS Excel
Try the following procedure to get a list of all Excel files from the folder:
1. In the new workbook, press Ctrl+F3 > New. In the name box, type FL
2. In the Refer to box, enter =FILES(“C:UsersAshishDesktopTestSurvey Reports*.xls”)&T(NOW()).
3. Click on OK and Close
In cell A3 of sheet1, enter the following formula and copy down
=IF(ISERROR(INDEX(FL,ROW()-2)),””,INDEX(FL,ROW()-2))
If you add another Excel file to the Survey report folder, just press F9 anywhere on sheet1 and the file will appear in the list.
Change C:UsersAshishDesktopTestSurvey Reports to your actual path from where you want to extract the Excel files.
To generate a list of all tab names from in an Excel file, you may refer to the following post.