Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 匹配不同的名称格式_Vba_Excel_Excel Formula - Fatal编程技术网

Vba 匹配不同的名称格式

Vba 匹配不同的名称格式,vba,excel,excel-formula,Vba,Excel,Excel Formula,我需要匹配两个数据文件: 第一个有名字、日期和工作时间。此页上的名称格式为last,first(昵称)。例如,史密斯,约翰(约翰) 第二个只有名字和日期,并且需要从第一个开始填写小时数(如果已列出)。这一个有一个名字格式的第一个,也许中间的首字母,加上最后一个,作为一个字符串。例如,JSMITH或JDSMITH 我意识到,如果不止一个人有相同的姓氏,这可能会有问题,但有没有办法用公式来比较和提取这些时间,或者这必须是一个手动过程 其中一些线路超过1500条。如果可能的话,我想通过公式来实现这

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

  • 第一个有名字、日期和工作时间。此页上的名称格式为last,first(昵称)。例如,史密斯,约翰(约翰)
  • 第二个只有名字和日期,并且需要从第一个开始填写小时数(如果已列出)。这一个有一个名字格式的第一个,也许中间的首字母,加上最后一个,作为一个字符串。例如,
    JSMITH
    JDSMITH
我意识到,如果不止一个人有相同的姓氏,这可能会有问题,但有没有办法用公式来比较和提取这些时间,或者这必须是一个手动过程


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

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

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

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


是的,vba可以帮助你。查看以下关于“用户定义函数”的文章:您还应该能够使用Excel公式(无VBA)完成此操作
VLOOKUP
LEFT
FIND
MID
应该能满足您的需求。查看Excel帮助或谷歌这些,以获得一些提示!我最初是这么想的,但有两个问题我无法用这种方法解决。首先,如果我使用左公式或右公式,我必须指定要查找的字符数。假设我可以做这个动态的,我不知道怎么做,我仍然必须告诉它在第二个文件的哪里停止,这个文件可能有中间的首字母,也可能没有中间的首字母。VBA非常有能力进行这些比较。我认为你确实应该像@Seb建议的那样开始制作一个UDF,然后带着你的一些代码回到这里,这样我们可以进一步帮助你。我确实考虑过某种sumproduct,但我的问题是将名称缩小到完全匹配的范围。如果我能找到一种方法使姓名相等,我可以使用带有姓名和日期的sumproduct来查找小时数。尝试类似于If(或(右([cell],5)=target,右([cell],4)=target,,,)-即检查两种情况(假设中间的首字母加上姓氏不等于其他人的姓氏!)!
Left('[file1.xlsx]Sheet1'!$A$1) = Left(A1)