如图所示,我们在B列获取了某文件夹下的所有文件名,现在想知道这些文件对应的文件类型或者说文件的扩展名。可以用下面的函数来实现:
=MID( B12 ,FIND("\",SUBSTITUTE( B12 ,".","\",LEN( B12 )-LEN(SUBSTITUTE( B12 ,".",))))+1,LEN( B12 ))

例子
解释一下上面的函数 =MID( B12 , FIND("\",SUBSTITUTE(B12,".","\",LEN(B12)-LEN(SUBSTITUTE(B12,".",))))+1 , LEN(B12) )
MID 函数用来截取 B12 在 FIND() 这个字符之后不超过 LEN(B12) 个字符组成的字符串。
FIND( "\" , SUBSTITUTE(B12,".","\",LEN(B12)-LEN(SUBSTITUTE(B12,".",))) ) +1
FIND 函数用来寻找 \ 在 SUBSTITUTE() 这个字符串中的位置, +1 表示在找到的位置后面一个字符位置。
SUBSTITUTE( B12 , "." , "\" , LEN(B12)-LEN(SUBSTITUTE(B12,".",)) )
SUBSTITUTE 函数用来将 B12 这个字符串中的第 LEN(B12)-LEN(SUBSTITUTE(B12,".",)) 个 . 替换成 \ 。之所以要替换成 \ 是因为文件名中不可能含有 \ 。
LEN( B12 )-LEN(SUBSTITUTE( B12 , " . " ,)) 用来计算 B12 中 . 的个数。
继续拆解的话:
LEN( B12 ) 表示 B12 的长度, LEN(SUBSTITUTE( B12 , " . " ,)) 表示去掉 B12 中的所有 . 后,B12的长度。两者相减后,得到 . 的个数。
SUBSTITUTE( B12 , " . " ,) 省略了第3个参数,表示将 . 替换成空,实际上就是删除 . ;省略了第4个参数,表示替换掉所有的.。
综上所述,思路就是:先计算B12中.的个数,并将最后一个.替换成\,再在结果中找到\的位置后面的位置,然后获得这个位置之后的字符组成的字符串。
如果要在Excel宏中截取文件名对应的扩展名,可以直接使用 InStrRev 函数获得文件名中最后一个 . 的位置,然后使用 Mid 函数即可。比如 Str1 中保存着文件名,使用下面的代码可以获得扩展名 Str2 :
Str2 = Mid( Str1 , InStrRev( Str1 , ".") + 1, Len( Str1 ))
其中 InStrRev(Str1, ".") ,表示从右向左找到第一个 . 的位置,需要注意的是 . 的位置仍然是用从左向右的数字序号表示的。