【问题标题】:How to compare names in MS Excel 2010 with filenames?如何将 MS Excel 2010 中的名称与文件名进行比较?
【发布时间】:2025-12-27 07:05:06
【问题描述】:

我的目标:将目录中的文件名与电子表格中的名称进行比较。如果匹配,那么我希望将该名称的相应帐号附加到文件名。

我使用 dir 命令检索目录中的所有文件名,然后将列表粘贴到 Excel 电子表格的列中。

我现在有 4 列:帐号、姓氏、名字和文件名。这里的主要问题是文件名不一致。它们的形式为“姓,名日期”,但它们的形式为“Smith, John 010112”、“Smith, J. 010112”、“Smith J 010112”。这意味着当涉及到名字时,我只会比较字符串的第一个字母。

所以本质上,对于每个文件名,我需要检查姓氏与姓氏列。如果找到匹配项,那么我需要检查文件名的名字的第一个字母与匹配的姓氏在同一行中的名字的第一个字母。如果这也是匹配项,那么我需要获取该行中的帐号并将其附加到文件名中。

我怎么能这样做?我对 Excel 函数还很陌生,但我在一些大学课程中对 Java 和 C 编码有一点经验。

【问题讨论】:

  • 可能值得一个 [excel-vba] 标签
  • 对于John SmithJake Smith,您想如何应对Smith, JJake Smith

标签: function vba excel


【解决方案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 SmithJohn Smith

快照

注意

公式中的A2&"-"&D2 部分将Ac. No 添加到Old Filename。如果您想在最后添加Ac. No,请将上面的内容更改为D2&"-"&A2

【讨论】:

  • 谢谢,但这只是给了我#VALUE!
【解决方案2】:

处理不一致的字符串可能很棘手。这是一个可以确定匹配的姓氏和名字的首字母的函数,前提是字符串模式在您的示例之外没有变化。将其添加到模块中,然后您可以通过在单元格中输入公式 =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

希望这会有所帮助。

【讨论】:

  • 在单元格中使用函数时,参数要输入什么?
  • 在函数名称中它具有参数。所以按顺序;姓氏、名字、文件名、帐号。所以公式看起来像 =AppendFileName("Smith","John","Smith, J 010112", "#123")。只需将名称替换为它们所引用的单元格即可。
  • 这似乎不起作用,当我输入正确的参数时它一直给我 False。
  • 在第一行放置一个断点并单步执行 (F8) 代码以查看它带来了哪些值以及它是如何处理它的。所以即使输入这些值也不起作用? =AppendFileName("Smith","John","Smith, J 010112", "123")