我有两本工作簿。 学生出勤第一列是学校学生的姓名。其余列包括出勤情况 - “上学时间”、“放学时间”和“总时长”,包括学校当月开放的每一天。
第二本工作簿客户端选项卡包含每个学生的标签。列为“日期”、“上课时间”、“下课时间”和“总小时数”。然后,它将所有每日小时数相加,并乘以小时费率,以得出计费所需的总应付金额。这些项目与第一个工作簿链接在一起。只要我不添加/删除姓名和度假村名称 A 到 Z,它就可以很好地工作。当我这样做时,一些姓名将出现在新的行号中,而第二个工作簿公式正在寻找旧的行号信息。以下是一个例子:
=IF('...\[Attendance.xlsm]Current Month'!AO$30="","",'...\[Attendance.xlsm]Current Month'!AO$30)
在上面的公式中,当学生名册发生变化时,该客户现在可能位于行AO$31
而不是行AO$30
。
我如何调整公式以自动进行此更改?现在,我使用“查找和替换”选项手动更改它 - 查找$30
并替换为$31
。
答案1
处理所述问题很简单:使用基于每个客户电子表格的单元格 B14 作为查找值、查找范围为出勤电子表格的 D 列(从单元格 D7 开始)的查找。返回将是找到的行中的一个单元格(嗯,有很多单元格可供选择,但它们似乎是按日期集合排列的,并且每组都是不同的)。INDEX
这可能是自然的,因为您可以轻松控制返回的三列集,XLOOKUP
而VLOOKUP
例如和对此来说会有点困难。这个查找很简单,非常直接,非常基础。
在这种情况下,查找部分会返回行,因此不需要引用(绝对或非绝对)来指定客户端工作簿中查找的每个日期要使用的单元格集。当这个问题实际上没有解决办法时,不要只专注于进行小修小补。以简单的方式进行改造,如果您无法面对查找和使用正确日期集的复杂性,那么请在列上使用绝对寻址方案,并与查找的行配对。
这是更有趣的问题:如何找到每个日期的单元格集。虽然不是特别有趣,但如果你愿意的话,可以稍微不那么“常见”。
您应该询问如何做到这一点,并提供足够的信息来可靠地为您提供解决方案。我本来会的,但是我们看到的内容和提到的一列(“AO”)之间有那么大的空间,如果我猜错了的话,就会浪费很多工作。
答案2
我找到了一个简单的答案——纯属运气。我所要做的就是在出勤工作簿中用学生的姓名命名每一行。当在此文件中添加/删除姓名时,客户选项卡工作簿中公式中的行引用会自动更新以反映新的行号。
虽然这个解决方案确实有效,但它有局限性——无法按学生姓名排序,公式中没有行引用错误。我无法理解按照建议使用 INDEX,所以我使用 VLOOKUP 以学生姓名作为值。这是一个繁琐的过程,必须处理 46 列。它已经完成并且运行完美。