VBA中如何拆分无分隔符长文件名 分别提取姓名与ID编号
VBA实现固定结构文件名拆分(姓名/ID分离)
你的文件名固定遵循lastname, Firstname ID#12345.pdf结构,ID段自带固定标识ID#,不需要依赖姓名与ID之间的分隔符,直接通过标识定位分界点即可完成准确拆分,不会出现姓名附带ID内容的问题。
核心拆分逻辑
- 先剔除文件名末尾的
.pdf后缀,排除后缀对内容匹配的干扰 - 用
InStr函数定位字符串中ID#标识的起始位置,该位置即为姓名与ID段的分界点 - 分界点之前的内容去除首尾空格后即为姓名字段;
ID#标识之后的内容去除首尾空格后即为纯ID编号
可直接复用的VBA代码
自定义函数(支持单元格直接调用)
把以下代码粘贴到VBA工程的标准模块中,即可在Excel单元格内直接调用函数提取内容:
' 提取文件名中的姓名部分 Function ExtractName(fileName As String) As String Dim cleanStr As String, idMarkPos As Long ' 移除.pdf后缀,兼容大小写格式 cleanStr = Replace(fileName, ".pdf", "", Compare:=vbTextCompare) ' 定位ID#标识的位置 idMarkPos = InStr(1, cleanStr, "ID#", vbTextCompare) If idMarkPos > 0 Then ExtractName = Trim(Left(cleanStr, idMarkPos - 1)) Else ExtractName = "格式不匹配" End If End Function ' 提取文件名中的纯ID编号 Function ExtractID(fileName As String) As String Dim cleanStr As String, idMarkPos As Long cleanStr = Replace(fileName, ".pdf", "", Compare:=vbTextCompare) idMarkPos = InStr(1, cleanStr, "ID#", vbTextCompare) If idMarkPos > 0 Then ' ID#共3个字符,从第4位开始截取即为纯ID ExtractID = Trim(Mid(cleanStr, idMarkPos + 3)) Else ExtractID = "格式不匹配" End If End Function
批量处理子过程
如果需要一次性批量拆分整列文件名,可运行以下子过程,提前选中存储完整文件名的列,运行后会自动在选中列右侧相邻两列分别写入姓名、ID:
Sub BatchSplitFileName() Dim selectedRng As Range, cell As Range Set selectedRng = Selection For Each cell In selectedRng If Not IsEmpty(cell.Value) Then cell.Offset(0, 1).Value = ExtractName(cell.Value) cell.Offset(0, 2).Value = ExtractID(cell.Value) End If Next Set selectedRng = Nothing End Sub
使用说明
- 单元格调用方式:若A列存储完整文件名,在B1单元格输入
=ExtractName(A1)下拉即可得到所有姓名,在C1单元格输入=ExtractID(A1)下拉即可得到所有纯ID - 代码兼容
.pdf后缀的大小写变体(如.PDF、.Pdf),不受姓名长度、姓名与ID之间空格数量的影响,不会出现ID内容混入姓名字段的问题
内容的提问来源于stack exchange,提问作者anj
相关产品推荐
相关产品推荐

