【问题标题】:Matching different name formats匹配不同的名称格式
【发布时间】:2014-05-20 14:30:33
【问题描述】:

我有两个需要匹配的数据文件:

  • 第一个有姓名、日期和工作时间。上面的名字最后格式化,第一个(昵称)。例如,Smith, John (John)
  • 第二个只有名称和日期,如果列出的话,需要从第一个开始填写小时数。这个名称格式为第一个,可能是中间名首字母,加上最后一个,作为一个字符串。例如,JSMITHJDSMITH

我知道,如果多个人的姓氏相同,可能会有问题,但有没有办法用公式比较和提取这些时间,或者这必须是手动过程吗?

其中一些超过 1500 行。如果可能的话,我想通过公式来做到这一点,因为办公室里没有其他人知道任何 VBA。如果 VBA 是唯一的方法,我会尝试找出一种使其用户友好的方法。

【问题讨论】:

  • 是的,vba 可以帮助你。查看以下有关“用户定义函数”的文章:cpearson.com/excel/writingfunctionsinvba.aspx
  • 您也应该能够使用 Excel 公式(无 VBA)来执行此操作。 VLOOKUPLEFTFINDMID 应该可以满足您的需求。查看 Excel 帮助或在 Google 上搜索一些提示!
  • 我最初是这么想的,但是有两个问题我无法通过这种方法解决。首先,如果我使用 LEFT 或 RIGHT 公式,我必须指定要查找的字符数。假设我可以使这个动态化,但我不知道该怎么做,我仍然需要告诉它在第二个文件上停止的位置,该文​​件可能有也可能没有中间首字母。
  • VBA 非常有能力进行这些比较。我认为您确实应该像 @Seb 建议的那样从制作 UDF 开始,然后带着您拥有的一些代码回到这里,以便我们进一步帮助您。

标签: vba excel excel-formula


【解决方案1】:

您是否尝试过使用 Vlookups,或者更好的 Sumproduct 函数?这里有一个很好的介绍,我已经广泛使用:

http://www.accountingweb.com/topic/excel/some-unlikely-uses-sumproduct

要匹配名称,请搜索满足以下条件: 文件 1 中名字的第一个字符等于文件 2 中全名的第一个字符; 文件 2 中的姓氏等于文件 2 中全名的除第一个(或除前两个之外的所有)字符。

从以下内容开始:(在 sheet2 中)

Left('[file1.xlsx]Sheet1'!$A$1) = Left(A1)

【讨论】:

  • 我确实考虑过某种 sumproduct,但我的问题是将名称缩小为完全匹配的名称。如果我能找到一种方法使名称相等,我可以使用带有名称和日期的 sumproduct 来查找小时数。
  • 尝试类似 if(or(right([cell],5)=target,right([cell],4) = target,,,) - 即检查两种情况(假设中间首字母加姓不等于别人的姓!
猜你喜欢
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 2021-05-13
相关资源
最近更新 更多