【问题标题】:EXCEL - Match values from one sheet to another and then paste resultsEXCEL - 将一张纸上的值匹配到另一张纸上,然后粘贴结果
【发布时间】:2017-04-22 15:08:42
【问题描述】:

我正在尝试制作最用户友好的 Excel 电子表格。该电子表格采用用户为客户输入的名称,有时是名字,有时是名字和姓氏。我有另一张表,上面有客户的完整名单、名字和姓氏。

我需要做的是查看用户输入,将该名称与客户列表表匹配,然后将其粘贴到原始表中。

示例:

用户表

       A           
1    Jane
2    Helen Smith
3    John 

客户名单

       A         B
1   Johnson     Jane
2    Smith      Helen
3    Brown      John

我需要用户表看起来像

       A                 B
1    Jane           Johnson, Jane
2    Helen Smith    Smith, Helen
3    John           Brown, John

我知道这可能是一个复杂的公式,我尝试编写了一大堆不同的公式,但没有一个真正在做我需要他们做的事情。

大部分问题是,我需要与我一起工作的其他人,他们不知道如何使用 excel,有时无法写出全名,一旦我有一个通用的电子表格就能够使用这个电子表格那里的公式,所有需要更改的是客户列表表。

希望我在这里提供了足够的细节。感谢您提前给我的任何帮助,非常感谢。如果我找到解决方案,我会发布它。

【问题讨论】:

  • 使用Match 和/或Index 函数应该非常简单。你为什么不向我们展示你到目前为止所做的尝试,并解释什么是行不通的?另一方面,进行名字匹配只有在确保没有客户具有相同名字的情况下才是可靠的。如果您有两个客户 Jane Johnson 和 Jane Stevenson,那么任何公式都无法正确确定您在用户表 A 列中指的是哪个“Jane”。
  • 有时是名字,有时是名字和姓氏。
  • 与我一起工作的人...有时无法写出全名
  • @DavidZemens 我们试图强制执行,但是输入负载很重,所以即使他们通常写全名,有时他们也不写,而且我很难单独编辑每个人,所以我宁愿不写。
  • 当然,当您使用电子表格进行数据收集时会发生 sh|t :) 我明白了。但最大的问题是字符串匹配所施加的限制:如果您只有姓名的一部分(名字、名字的一部分等),那么您必须假设查找列表(客户表) 包含任何可能的重复项。否则,无法保证准确的结果,因为函数(无论是通过工作表完成还是使用 VBA 完成的复杂 UDF)根本无法从字符串“Jane”中确定它是“Jane Johnson”还是“Jane Smith”或“Jane Somethingelse” .

标签: excel


【解决方案1】:

我有个主意。在您的客户表中,在第三列中构建一个包含名字和姓氏的公式,例如:

=B1&" "&C1

然后选择名称范围(A:C 列)和插入表格(不带标题)。您可以稍后输入标题标签:

从公式功能区中,打开名称管理器。定义一个名为“ClientNames”的新名称,并让它引用全名列(根据您的表的名称和列标题名称修改“引用到”公式):

然后,在您的用户表上,选择 A 列,然后从数据功能区数据验证中。允许“列表”并将“源”公式设置为=ClientNames

最后,指示您的用户从验证列表中选择一个客户端名称。这将防止他们做出错误的输入,并针对“用户”工作表执行标准。

如果您仍然需要 B 列中格式化的 LastName,FirstName,则执行公式:

=RIGHT(A1,LEN(A1)-FIND(" ",A1))&", "&LEFT(A1,FIND(" ",A1)-1)

【讨论】:

    【解决方案2】:

    这个公式可能看起来太复杂,但其实很简单,

    在用户表的 B 列中使用它并在行间拖动。

    =IFERROR(INDEX(Sheet2!A:B,MATCH(LEFT(A1,LEN(A1)-FIND(" ",A1)),Sheet2!B:B,0),1)&", "&INDEX(Sheet2!A:B,MATCH(LEFT(A1,LEN(A1)-FIND(" ",A1)),Sheet2!B:B,0),2),IFERROR(INDEX(Sheet2!A:B,MATCH(LEFT(A1,LEN(A1)-FIND(" ",A1)),Sheet2!A:A,0),1)&", "&INDEX(Sheet2!A:B,MATCH(LEFT(A1,LEN(A1)-FIND(" ",A1)),Sheet2!A:A,0),2),IFERROR(INDEX(Sheet2!A:B,MATCH(A1,Sheet2!B:B,0),1)&", "&INDEX(Sheet2!A:B,MATCH(A1,Sheet2!B:B,0),2),IFERROR(INDEX(Sheet2!A:B,MATCH(A1,Sheet2!A:A,0),1)&", "&INDEX(Sheet2!A:B,MATCH(A1,Sheet2!A:A,0),2),""))))

    这个公式是针对A1的,如果你想从搜索A2开始,可以修改它。如果您需要帮助,请告诉我。这可能看起来很大,但对于跨范围拖动非常有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 2020-06-12
      • 2023-02-02
      相关资源
      最近更新 更多