我的目标:将目录中的文件名与电子表格中的名称进行比较。如果匹配,那么我希望将该名称的相应帐号附加到文件名中。
我使用dir命令检索目录中的所有文件名,然后将列表粘贴到Excel电子表格的列中。
我现在有4列:帐号,姓氏,名字和文件名。这里的主要问题是文件名不一致。它们的形式为“姓氏,名字日期”,但它们的形式有“Smith,John 010112”,“Smith,J。010112”,“Smith J 010112”。这意味着当涉及到名字时,我只会比较字符串的第一个字母。
基本上,对于每个文件名,我需要检查lastname列的lastname。如果找到匹配项,那么我需要检查文件名的firstname的第一个字母是否与匹配的lastname在同一行中的firstname的第一个字母。如果这也是匹配,那么我需要获取该行中的帐号并将其附加到文件名。
我怎么能这样做?我对Excel函数很陌生,但我对一些大学课程中的Java和C编码有一点经验。
答案 0 :(得分:1)
使用不一致的字符串来解决问题可能会非常棘手。这是一个函数,可以确定匹配的姓氏和名字的初始名称,前提是字符串模式不会在您的示例之外变化。将它添加到模块,然后您可以通过在单元格中键入formula = 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
您可以围绕此代码创建一个循环来遍历所有文件和名称,并使用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
希望这有帮助。
答案 1 :(得分:1)
由于您已在列中拥有文件名,因此可以使用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
部分会将Ac. No
添加到Old Filename
。如果您希望最后添加Ac. No
,请将上述内容更改为D2&"-"&A2