excel中使用VBA提取指定文件夾中指定擴(kuò)展名的所有文件名的技巧
在不使用VBA,列出指定文件夾的所有文件名的方法中,我們使用Excel中隱藏的FILES函數(shù)定義名稱,并將之應(yīng)用到Excel公式中提取指定文件夾中所有文件名。今天更進(jìn)一步:按擴(kuò)展名篩選,只提取我們想要的那一類文件(比如只提取 .xlsx 或 .jpg)。配合自定義函數(shù)(UDF),像使用內(nèi)置函數(shù)一樣簡單!
可以使用VBA創(chuàng)建一個自定義函數(shù)(UDF),輕松獲取指定文件夾指定擴(kuò)展名的所有文件的名稱。
代碼來了
'================================================
' 函數(shù)名稱:GetFileNamesbyExt
' 功能描述:獲取指定文件夾中特定擴(kuò)展名的所有文件名
' 參 數(shù):FolderPath - 文件夾路徑
' ? ? ? ? ? FileExt ? ?- 文件擴(kuò)展名(如".xlsx")
' 返 回 值:包含文件名的數(shù)組
'================================================
Function GetFileNamesbyExt(ByVal FolderPath As String, FileExt As String) As Variant? ?
Dim Result As Variant? ?
Dim i As Integer? ?
Dim MyFile As Object? ?
Dim MyFSO As Object? ?
Dim MyFolder As Object? ?
Dim MyFiles As Object?? ?
Set MyFSO = CreateObject("Scripting.FileSystemObject")? ?
Set MyFolder = MyFSO.GetFolder(FolderPath)? ?
Set MyFiles = MyFolder.Files?? ?
ReDim Result(1 To MyFiles.Count)? ?
i = 1?? ?
For Each MyFile In MyFiles? ? ? ?
If InStr(1, MyFile.Name, FileExt) <> 0 Then? ? ? ? ? ?
Result(i) = MyFile.Name? ? ? ? ? ?
i = i + 1? ? ? ?
End If? ?
Next MyFile?? ?
ReDim Preserve Result(1 To i - 1)? ?
GetFileNamesbyExt = ResultEnd Function上述代碼將創(chuàng)建了一個名為GetFileNamesbyExt的函數(shù),該函數(shù)可像Excel內(nèi)置函數(shù)一樣在工作表中使用。
如何使用這個函數(shù)?
- 插入模塊打開VBE編輯器(
Alt + F11),插入一個標(biāo)準(zhǔn)模塊,粘貼上述代碼。 - 使用公式提取
在工作表任意單元格中輸入希望列出文件名的文件夾地址,示例中為單元格A1;在工作表任意單元格中輸入指定的擴(kuò)展名,示例中為單元格B1。然后,在想要列出文件名單元格中(示例為單元格A3),輸入公式:
=IFERROR(INDEX(GetFileNamesbyExt($A$1,$B$1),ROW()-2),"")
向下拖動公式復(fù)制到下方單元格直至列出所有文件名,如下圖1所示。

注意,在上面的公式中,使用了ROW()-2,因為公式單元格是從第三行開始的,這確保了當(dāng)在下面的單元格中復(fù)制公式時,它將遞增1。如果在某列的第一行輸入公式,則可以簡單地使用row()。
特別提示
- 如果省略第二個參數(shù)(擴(kuò)展名),函數(shù)將返回文件夾中 所有文件名;
- 擴(kuò)展名區(qū)分大小寫?不用怕,
InStr默認(rèn)不區(qū)分,放心用; - 路徑最后不要忘了加反斜杠?不用加,
GetFolder自動識別。
寫在最后
這個小工具非常適合:
- 整理照片時提取所有
.jpg文件; - 匯總報表時提取所有
.xlsx文件; - 清理電腦時列出所有
.tmp臨時文件。
相關(guān)文章

不使用VBA! excel表格提取指定文件夾的所有文件名的技巧
Excel提供了一個名為FILES的宏表函數(shù),可以直接在Excel中批量提取指定文件夾下的文件名,這種方法適合有一定Excel基礎(chǔ)的用戶,操作相對簡單2026-02-26
輕松掌握基礎(chǔ)功能! 給excel初學(xué)者的16個VBA基本代碼
歡迎來到VBA的世界!這里有一些簡單的代碼示例,幫助你快速理解VBA的基礎(chǔ)概念,通過這些代碼,你可以逐步掌握VBA的精髓,為更復(fù)雜的任務(wù)打下基礎(chǔ)2026-01-13
Excel表格中怎么插入和運(yùn)行VBA代碼? Excel宏代碼運(yùn)行攻略
在Excel中創(chuàng)建并運(yùn)行VBA宏可以極大地提高工作效率,自動化重復(fù)性任務(wù),其實在Excel中運(yùn)行宏代碼其實非常簡單,只需幾個步驟即可完成2025-05-06
excel圖表秘籍! Excel VBA操作切片器切換顯示不同圖表的技巧
切片器是顯示匯總數(shù)據(jù)最有吸引力的方式之一,Excel 2010中引入的切片器是一種將數(shù)據(jù)列表顯示為頁面上按鈕的方法,下面我們就來看看如何利用切片器實現(xiàn)Excel圖表類型的動態(tài)2024-12-15
excel動態(tài)查詢表如何做? 利用VBA實現(xiàn)工作表數(shù)據(jù)的動態(tài)查詢的教程
excel如何在多個工作表中查找某個給定值,當(dāng)然要求這個給定的值在一個工作表中要是單一的值,如果是多個值我們可以稍微改一下代碼即可,我們不再做詳細(xì)講解2024-11-25
excel表格怎么用vba批量建立文件夾? Excel建文件夾實例
excel中需要創(chuàng)建文件夾來管理文件,通常都是一個一個創(chuàng)建,我們可以通過Excel的VBA(Visual Basic for Applications)編寫一個簡單的腳本來自動化這個過程,詳細(xì)請看下文介2024-06-11
excel表格怎么快速插入空行? VBA批量隔行加入空白行的技巧
excel表格怎么快速插入空行?excel表格中想要在表格中插入空行,我們可以使用vba實現(xiàn),下面我們就來看看VBA批量隔行加入空白行的技巧2023-07-24
excel表格怎么利用VBA代碼快速制作一份通訊錄?excel表格中想要利用vba代碼快速制作一份通訊錄,該怎么制作呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2020-07-13
excel表格怎么利用VBA代碼插入交叉矩形圖?excel表格中想要繪制交叉的矩形圖,該怎么繪制這個圖形呢?我們可以使用vba代碼來繪制,下面我們就來看看詳細(xì)的教程,需要的朋友2020-04-28
excel怎么利用VBA代碼插入同心圓?excel中想要畫一個同心圓,該怎么繪制同心圓呢?下面我們就來看看excel總vba插入同心圓的教程,需要的朋友可以參考下2020-04-22






