如何将MS Excel 2010中的名称与文件名进行比较?
我的目标是:将目录中的文件名与电子表格中的名称进行比较。 如果有匹配,那么我希望将该名称的相应帐号追加到文件名。
我已经使用dir命令检索目录中的所有文件名,然后将该列表粘贴到Excel电子表格的列中。
我现在有4列:帐号,姓氏,名字和文件名。 这里的主要问题是文件名不一致。 他们的forms是“姓,名,姓”,但是他们的forms是“史密斯,约翰010112”,“史密斯,010112”,“史密斯010112”。 这意味着,当涉及到名字,我只会比较string的第一个字母。
所以基本上,对于每个文件名,我需要检查姓氏与姓氏列。 如果find了一个匹配项,那么我需要检查文件名的第一个字母与匹配的姓氏在同一行中名字的第一个字母。 如果这也是一个匹配,那么我需要获取该行的帐号并将其追加到文件名。
我怎么能这样做? 我对Excel函数非常陌生,但是在某些大学课程中,我对Java和C编程有一点经验。
由于您已经有一个列中的文件名,您可以使用Excel公式解决其余的问题
=IF(SEARCH(B2&", "&LEFT(C2,1),D2,1)>0,A2&"-"&D2,IF(SEARCH(B2&" "&LEFT(C2,1),D2,1)>0,A2&"-"&D2,""))
Jake Smith
和John Smith
都适用这个公式。
快照
注意 :
A2&"-"&D2
公式中的A2&"-"&D2
部分添加Ac. No
Ac. No
, Old Filename
。 如果你想要Ac. No
Ac. No
在最后添加,然后将上述更改为D2&"-"&A2
用不一致的string来解决问题会非常棘手。 这里有一个函数可以确定匹配的姓氏和名字的首字母,只要string模式不会超出你的例子。 将其添加到模块中,然后通过在单元格中键入公式= AppendFileName来访问它。
Public Function AppendFileName(ByVal LName As String, ByVal FName As String, ByVal FileName As String, ByVal AccN As String) As String If LName = Left(FileName, Len(LName)) Then If Mid(FileName, Len(LName) + 1, 1) = "," Then 'Check if the string contains a comma If Mid(FileName, Len(LName) + 3, 1) = Left(FName, 1) Then AppendFileName = FileName & " " & AccN End If Else 'If no comma then assume just one space If Mid(FileName, Len(LName) + 2, 1) = Left(FName, 1) Then AppendFileName = FileName & " " & AccN End If End If End If If AppendFileName = "" Then AppendFileName = False End Function
你可以创build一个循环遍历这个代码来遍历所有的文件和名称,并使用dir函数自动化,例如。
Dim x as integer, DirFile as string DirFile = Dir(Path) Do While DirFile <> "" x = x + 1 'To track how many files, and to assign variables as in below line of code 'Set each string variable like FName = Range("A1").offset(x,0).value 'Then assess the the names and file names with the If statements above 'Do something with appended FileName DirFile = Dir Loop
希望这可以帮助。