【问题标题】:Excel 2013 VLOOKUP() based on multiple criteria, retrieving multiple rowsExcel 2013 VLOOKUP() 基于多个条件,检索多行
【发布时间】:2016-03-10 02:47:28
【问题描述】:

我有一个问题(我相信)可以通过 excel 解决,并且可能不需要 VBA(我可能是错的)。我相信它可以通过嵌套函数来解决,但我尝试过的公式没有奏效。

这是我的数据:

 Name               Report #          Name
Mark Doe            ReportXXX       Mark Doe
Connie Doe          ReportYYY       Connie Doe
Debbie Doe          REPORTYYY       Debbie Doe  
Valerie Doe         FSMVALTR1       Valerie Doe
Jeff Doe            FSMVALTR1       Jeff Doe
Andy Doe            RAZXYBCA1       Andy Doe    
Ryan Doe            RAZXYBCA1       Ryan Doe    
Andy Doe            RAZ111111       Jill Doe    
Ryan Doe            RAZ222112       Amanda Doe

此列表在前 NAME 和 REPORT # 列中持续约 4000 行。在第二个 NAME 列中,我有 ~160 行。

第二个名称列标识实际使用报告的所有用户,没有重复。两个名称和报告# 列有很多重复项,因为用户可以访问多个报告,其中许多是用于不同目的的同一个报告。由于第二个 NAME 列的行数很少,因此名称不会一直匹配,这可以在两个 NAME 列的底部附近观察到。

我需要做的是有一个VLOOKUP 来标识两列中的名称,然后返回每个人可以跨行(水平)访问的报告编号,而不是在列中。它还需要 I.D.大量报告,因为个人可以访问 1-15 份报告,从第二份开始,以此类推。

理想情况下应该是这样的:

Name          Report #      Name       ex column  ex column  ex column
Mark Doe      ReportXXX    Mark Doe    ReportXXX  ReportAAA   ReportB

我没有列出“Mark Doe”有权访问的其他报告,这些报告将在大约 4000 个长列表中的某个位置,以及他的名字在第一个 NAME 列中重复多次,但第二个“唯一” name 列将是跨行返回报告的位置。

【问题讨论】:

  • 可以使用数组公式,所以 index(a1:c10,if((a1:a10="xyx")*(c1:c10="abc"),row(a1:a10)) ,1) 看看数组公式
  • 我明白了,除非在这种情况下,您必须指定“名称”和“报告编号”才能返回值。这行不通,因为我有 167 个名字并且不能多次迭代这个公式。如果它与两个名称列匹配,它如何命名为“不可知”并且只返回报告的值?
  • @Jeeped 在那个例子中他指定了“red”“boat”,我不能为每个报告指定那个

标签: vba excel


【解决方案1】:

我制作了一个使用额外三列的方法,它对我有用。 我使用了你上面提供的数据。

在左边添加三列。

  • 在 A2 中输入=COUNTIFS($D$2:$D2,D2,$E$2:$E2,E2)
  • 在 B2 中输入=SUMIFS($A$2:$A2,$A$2:$A2,1,$D$2:D2,D2)
  • 在 C2 中输入=D2&B2

现在将这些单元格复制到所有 4000 行。

现在,在第二个名称列旁边添加从 1 编号的列标题到您认为用户可以拥有的最大报告数(您说 15)。

现在在 F2 中输入 vlookup =IFERROR(VLOOKUP($F2&G$1, your table array starting from column C as absolute/fixed ,3,FALSE),""),在我的例子中是 =IFERROR(VLOOKUP($F2&G$1,$C$2:$E$11,3,FALSE),"")

将公式复制到带有数字标题的所有列以及在第二个名称列 (160) 中具有名称的所有行。

your sheet shuld look something like this image

如果它对你有用,最好告诉我。

【讨论】:

  • 我认为这确实有效 - 将实施和验证。你能向我解释一下这是如何工作的吗?
  • 我对了解机制非常感兴趣。我想我知道,但我不是 100% 确定
  • 所以这个炒锅如下; A 列计算该用户从表开始到该点使用该特定报告的次数。 B 列为您提供用户当时最多的唯一报告数量的计数。然后通过加入用户名和号码报告,我们可以 ID 为Vlookup 要搜索的内容。希望我已经清楚地理解了。如果需要,很乐意提供帮助
  • 我想我现在明白了。非常感谢:)
【解决方案2】:

您是否探索过使用数据透视表的选项?

输出如下所示:

使用这样的数据透视表设置:

此方法将使视图更清晰,因为您当前的方法看起来重复了约 4,000 次(每个报告和名称组合一次)。希望这可以满足您的需求。

【讨论】:

  • 这行不通,这两个名称列之间不会完全匹配,而且右侧还有其他条件也约为 160 行,需要压缩 4000 行。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 2013-11-01
相关资源
最近更新 更多