尝试在多个工作表中查找特定行/范围中的最后一个非空单元格

我在这里看了一些build议,没有find专门为我工作的东西。 如果可能,我宁愿不使用数组公式。 但是,如果这是唯一的方法,我会尽力处理它。

我正在制作Excel 2013中的各种考勤工作簿。工作簿包含一年中每个月份的计算表,列表表和工作表。 “列表”工作表包含名称列表和月份列表。 我已经包含了一个示例工作簿的链接,以演示如何设置表单以及我正在使用的基本function,名称,列表等。

我的示例工作簿: https : //app.box.com/s/mgvums1vmnmnec7e7d0p4vi5daoyo5nv

当在特定的行/范围中查找最后一个非空单元格时,我在每个特定的月份表上使用以下LOOKUP时会收到正确的结果:(在几个网站上挖掘一些后我发现)= LOOKUP(2, 1 /(C5:AG5 <>“”),C $ 4:AG $ 4) – 对于2月份,范围C5:AG5中的最后一个条目在AA5中,即25日。

从任何非月份表中使用以下查找时,我也会收到正确的结果:= LOOKUP(2,1 /(Feb!C5:AG5 <>“”),Feb!C $ 4:AG $ 4)

话虽如此,我所遇到的两个具体问题如下:

  1. 在使用combobox/表格控件中select的名称和月份信息时,我一直无法弄清楚如何设置最后一个非空单元格(这是最后一次出席的标记日)。 简单地说,在我的样本工作簿中,我想知道Johnny参加的最后一天。

我试过简单的,只是使用我select的“月”。 我尝试了以下几种不同的方式:= LOOKUP(2,1 /(Month&“!C5:AG5 <>”“”),Month&“!C $ 4:AG $ 4”)我得到的最接近的是查找,最终变成你在下面看到的(当在计算步骤中查看时)。 它当然会返回一个#VALUE! 错误。 = LOOKUP(2,1 / “二月C5:AG5 <>” “”,月及 “C $ 4:!AG $ 4”)

我也试过这个数组公式,它给了我4的结果。其中,不是正确的结果。 而且,我不知道结果究竟是从哪里来的。 = MAX((INDIRECT(F4& “!” “C5:AG5”)<> “”)*(ROW(INDIRECT(F4& “” & “C $ 4:!AG $ 4”))))

  1. 在使用combobox/窗体控件中的选定名称时,我一直无法弄清楚如何在所有的月份表中找出最后一个非空单元格。 基本上,我想知道Johnny出席的那一年的最后一天。 在这个示例工作簿中,这将在4月11日。 我知道这个公式只会返回“11”。 我相信我可以在事实之后使用生成的图纸名称格式化结果。 (在这个例子中,Apr)

我相当肯定,我将需要使用VLOOKUP。 我似乎无法打破我想要的一般概念和制定它的正确方法之间的障碍。

任何帮助,将不胜感激。 我现在感觉很迷茫。 如果您需要更多信息,请告诉我。

谢谢,Kurewe

关键是要使用与您已经具有完全相同的LOOKUP公式的INDIRECT ,并使用MATCH公式来确定所选名称的行号。

放置以下公式:

  • G3: =MATCH(F3,NameList,0)+4 (在NameList中查找所选名称的项目编号)
  • H2: =F4&"!C4:AG4" (构build所选月份的date行地址)
  • H3: =F4&"!C"&G3&":AG"&G3 (构build用于所选名称和月份的地址)
  • E9: =INDEX(MonthList,ROW()-ROW(E$8)) 复制到E20 (使用MonthList查找该行的月份名称)
  • G9: =E9&"!C4:AG4" 复制到G20 (构buildE9中月份的date行地址)
  • H9: =E9&"!C"&G$3&":AG"&G$3 复制到H20 (构build地址用于所选名称和E9中的月份)
  • F9: =IFERROR(LOOKUP(2,1/(INDIRECT(H9)<>""),INDIRECT(G9)),"(n/a)") 复制到F20 (find最后一天用“X”在它使用G9和H9中的地址)
  • G4: =LOOKUP(2,1/ISNUMBER(F9:F20),ROW(F9:F20)-ROW(F8)) (find其中有“(n / a)”的第一个单元格的索引)
  • F5: =LOOKUP(2,1/(INDIRECT(H3)<>""),INDIRECT(H2)) (查找H2和H3中地址的“X”
  • F6: =INDEX(MonthList,G4)&"-"&INDEX(F9:F20,G4) (构build当年最后一天的出勤date)