Excel中人员列表与照片的匹配问题的处理

鉴水鱼技能说 2024-07-21 22:21:00

在职场的日常工作中,有无数的Excel问题困扰着大家。有位网友问:Excel的人员列表和一个装了照片的文件夹,如何匹配?Excel工作表中有1000多人,而存放照片的文件夹里有2000多人的照片,该怎么样才能知道表格上的1000多人在文件夹里有对应的照片文件名? 照片文件名的命名是不规范的,可能是人名,也可能是人名+其它,但是一定包含了人名。

对于Excel中的问题,我们可以用VBA宏非常便捷地来解决。这个问题的基本思路是(1)列出指定文件夹下的所有文件名,可以显示在工作表中;(2)使用Excel函数,在给出的文件列表中查找匹配的文件名;(当然上述二步,也可以用VBA代码一次性的完成操作)。假设有如下图所示的Excel工作表,A列为人员姓名列表,C列将显示指定文件夹下的所有文件名,B列将显示与人员匹配的文件名。在窗口中添加一个按钮(插入选项卡\形状\矩形:圆角,形状样式:预设2)。

右击按钮,在弹出的快捷菜单中选择“指定宏”命令,然后在“指定宏”窗口,输入宏名:ListFilesInFolder,再单击“新建”按钮进入到VBA编辑窗口,在通用模块窗口,输入以下代码:

Sub ListFilesInFolder() Dim fso As Object Dim folder As Object Dim file As Object Dim fd As FileDialog Dim folderPath As String ' 创建一个文件夹对话框对象 Set fd = Application.FileDialog(msoFileDialogFolderPicker) With fd ' 显示对话框 .Show ' 检查是否选择了文件夹 If .SelectedItems.Count > 0 Then folderPath = .SelectedItems(1) Range("E1").Value = folderPath MsgBox "您选择的文件夹路径是: " & folderPath Else MsgBox "您没有选择任何文件夹。" Exit Sub End If End With ' 创建FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject") ' 获取文件夹对象 Set folder = fso.GetFolder(folderPath) ' 遍历文件夹中的文件 r = 2 For Each file In folder.Files Range("C" & r).Value = file.Name r = r + 1 Next ' 清理 Set file = Nothing Set folder = Nothing Set fso = Nothing Set fd = NothingEnd Sub

程序中首先弹出一个文件夹选择对话框,用于指定图片文件所在文件夹,选定的文件夹存入变量folderPath中,并显示到E1单元格;接下来使用FSO对象,用For Each-Next循环列出指定文件夹下的所有文件,并将文件名显示到工作表的C列单元格。

完成代码编写后,返回工作表窗口,单击按钮,在选定文件夹后,即会将文件夹下的所有文件显示在C列,如下图示:

接下来,我们使用Match函数并结合Indirect函数,在C列中查找与A列各个人员姓名相匹配的文件名。在B2单元格中输入公式【=INDIRECT("C"&MATCH("*"&A2&"*",C:C,0))】,然后按回车键确认输入,即可得到结果,再用公式复制填充方式向下填充,将得到所有人员对应的图片文件名信息,如下图示:

上面用到了Excel中常用两个函数match函数用于查找匹配项在一列数组中的位置、Indirect函数将引用指定单元格地址的内容,关于这两个函数的使用可以参考我的知乎文章:zjshenwx的文章 - -Match函数用法和两种最常见函数公式的搭配组合。当然,我们完成可以不使用Match与Indirect函数,在VBA代码中直接给出匹配的图像文件名,这里不再赘述。

0 阅读:72