查找匹配和复制数据

时间:2015-04-26 04:00:01

标签: excel excel-vba vba

我有以下(sheet1):

State           Region
South Australia Aberfoyle Park
New South Wales Abermain
South Australia Adelaide

然后(表2):

State           Region          Long       Lat
Victoria        Abermain        -12.8167   51.4333
New South Wales Abermain        -32.8167   151.4333
South Australia Aberfoyle Park  -35.07     138.5885

我需要一种有效的方式来搜索sheet1并匹配Region中的Statesheet2,当找到匹配项时,我想创建两个新列(在sheet1中)从Long复制匹配的Latsheet2,最终输出应如下所示(sheet1):

State           Region          Long       Lat
South Australia Aberfoyle Park  -35.07     138.5885
New South Wales Abermain        -32.8167   151.4333

请注意; sheet1包含了很多此处显示的数据,因此过去的简单副本将不起作用:)

提前致谢。

1 个答案:

答案 0 :(得分:1)

在Sheet1!C2中,您可以通过多种方式从两列匹配记录中收集正确的数据。以下是三个场景和示例。

  1. 根据INDEX function对查找使用两列条件。有 array 公式可以做到这一点,但我更喜欢不需要CSE的标准公式。这些只会获取匹配的状态/区域对的第一次出现,但可以进行少量重写以将多个匹配返回到多个行。 C2的示例:
    =iferror(index(Sheet2!C$1:C$9999, min(index(row($1:$9999)+((Sheet2!$A$1:$A$9999<>$A2)+(Sheet2!$B$1:$B$9999<>$B2))*1e99, , ))), "")
  2. 使用简单的SUMIFS function。当只有一组匹配的州/区域要返回时,这将最有效。多个匹配对会产生不正确的聚合结果。 C2的示例:
    =sumifs(Sheet2!C:C, Sheet2!$A:$A, $A2, Sheet2!$B:$B, $B2)
  3. 如果有多个匹配的对,并且您想要从地理点的平均值返回的平均值,请使用AVERAGEIFS function。当有多个位置点时,这将最有效,但除非只有一组匹配的状态/区域要返回,否则永远不会返回任何一个点。 C2的示例:
    =averageifs(Sheet2!C:C, Sheet2!$A:$A, $A2, Sheet2!$B:$B, $B2)
  4. 将任何这些示例放入Sheet1!C2为纬度填充右边的一列以获取经度,然后填充C2:D2以获取所有匹配。