【问题标题】:Using VLOOKUP to return an array from drop down使用 VLOOKUP 从下拉列表中返回一个数组
【发布时间】:2015-12-22 15:40:07
【问题描述】:

这让我发疯了,所以我会尽力解释它。基本上,我有一个用于跟踪一年薪水工作时间的电子表格。由于它是双周一次,因此每隔一周进行一次检查,这意味着一年中有 2 个月将列出 3 次而不是仅列出两次的月份。所以 2016 年的一个例子是:

   A        B          C
1  Jan 08   $1,900.00  Drop Down
2  Jan 22   $1,900.00  Check 1
3  Feb 05   $1,850.00  Check 2
4  Feb 19   $1,800.00  Check 3 if there is one
5  Mar 04   $1,900.00
6  Mar 18   $1,900.00
7  Apr 01   $1,900.00
8  Apr 15   $1,900.00
9  Apr 29   $1,800.00
10 May 13   $1,900.00
11 May 27   $1,900.00
12 Jun 10   $1,900.00
13 Jun 24   $1,850.00
14 Jul 08   $1,900.00
15 Jul 22   $1,900.00
16 Aug 05   $1,900.00
17 Aug 19   $1,900.00
18 Sep 02   $1,900.00
19 Sep 16   $1,900.00
20 Sep 30   $1,900.00
21 Oct 14   $1,900.00
22 Oct 28   $1,900.00
23 Nov 11   $1,900.00
24 Nov 25   $1,900.00
25 Dec 09   $1,900.00
26 Dec 23   $1,900.00

A 列包含薪水的日期,B 列包含您在该日期获得的薪水。现在,我有一个下拉菜单,让您选择一个月,然后它只显示该月的薪水。

C1 = Drop down with January- December
C2 = check 1
C3 = check 2
C4 = check 3 if there is one

所以我试着像这样在每个单元格中做一个 VLOOKUP。

C2 =VLOOKUP(TEXT(C1,"mmm"),TEXT(A1:B26),2)

显然这不起作用,我意识到即使它起作用了,我要如何执行 C3 来显示第二张薪水?有没有办法做一个 VLOOKUP,返回所有匹配的值,IE 4 月它会返回 A7、A8 和 A9,然后将它们按顺序排列在 C2-C4 单元格中?

编辑: 因此,经过一些建议,这就是我目前所拥有的:

C2=INDEX(A1:B26,(SMALL(IF(MONTH(A1:A26)=MONTH(C1),ROW(A1:A26)),ROW(1:1))),2)
C3=INDEX(A1:B26,(SMALL(IF(MONTH(A1:A26)=MONTH(C1),ROW(A1:A26)),ROW(2:2))),2)
C4=INDEX(A1:B26,(SMALL(IF(MONTH(A1:A26)=MONTH(C1),ROW(A1:A26)),ROW(3:3))),2)

C3 和 C4 根本不起作用。 C2 仅在我选择一月时有效,它返回 B1,当我选择二月时,它返回 B2...

【问题讨论】:

  • 不适用于 VLOOKUP.. 这有帮助吗:fiveminutelessons.com/learn-microsoft-excel/…
  • 嗯,有点,我尝试同时使用索引和匹配,但它只返回 NA。索引(A1:B26,MATCH(TEXT(C1,"mmm"),A1:A29,0),2)
  • 我似乎找不到返回可以使用的数组的方法。
  • 我也试过 INDEX(A1:B26,MATCH(TEXT(C1,"mmm"),TEXT(A1:A29,"mmm"),0),2)
  • 添加一个仅包含月份数的列或使用 MONTH 函数来计算它。使用它作为查找列键。 VLOOKUP 只会在一个单元格中显示一个结果,而不是多个结果。使用 INDEX 和 MATCH 代替 VLOOKUP。使用它来查找结果 1 的月份条目。结果 2 将是相同的公式但偏移 1 行,结果 3 将是相同的公式但偏移 2 行,除非它是不同的月份,在这种情况下它将为空白.

标签: excel-2010 vlookup


【解决方案1】:

我拆分了日期列(见图)并通过我在 cmets 中提供的链接使用了方法。

您可以在单元格 M12 中输入月份名称。在它旁边你会得到匹配的金额。

1 月薪水第一次出现的公式是:

=INDEX($M$1:$O$7,(SMALL(IF($M$1:$M$7=$M$11,ROW($M$1:$M$7)),ROW(1:1))),3)

第二次出现

=INDEX($M$1:$O$7,(SMALL(IF($M$1:$M$7=$M$11,ROW($M$1:$M$7)),ROW(2:2))),3)

如果您在下一行插入公式,您将收到错误消息(#ZAHL

要屏蔽错误消息,您可以按照http://fiveminutelessons.com/learn-microsoft-excel/use-index-lookup-multiple-values-list 中的建议使用 ISERROR 函数

编辑:

正如 OP 指出的那样,不可能分割月份和日期。我建议从列中提取月数(通过MONTH)并调整上面的公式:

=INDEX($M$1:$O$7,(SMALL(IF(MONTH($M$1:$M$7)=MONTH($M$11),ROW($M$1:$M$7)),ROW(1:1))),3)

【讨论】:

  • 这让我更接近,除了我无法拆分列,因为另一个用户的进程,日期列必须保持“mmm dd”。
  • 另外,你的意思是在所有这些中使用 simi-colons 吗?还是您打算使用昏迷?
  • 所以,使用您提供的内容,这就是我目前为止得到的结果:=INDEX(A1:B26,(SMALL(IF(TEXT(A1:A26,"mmmm")=C1, ROW(A1:A26)),ROW(1:1))),2) 所以当我选择 1 月时,使用它得到我 1 月 8 日的值,当我选择 2 月时,我得到 1 月 22 日的值,我只从每个在那之后的一个月。并且将行从 1:1 更改为 2:2 根本不起作用。
  • 如果您没有在公式中使用绝对单元格引用 ($),那么如果您复制并粘贴第二行的公式,则行更改将不起作用。
  • 好吧,我完全复制了他的示例,但它根本不起作用,我使用相同的单元格、值和公式,他的示例不起作用。所以我什至没有试图复制他所做的,我仍在使用我提供的示例。
【解决方案2】:

找到答案:

{=IFERROR(INDEX($B$1:$B$9,SMALL(IF(MONTH($A$1:$A$9)=MONTH($C$1),ROW($A$1:$A$9)-ROW($A$1)+1,""),ROWS($A$1:A1))),"")}

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    相关资源
    最近更新 更多