Google 表格/微软 Excel

Google 表格/微软 Excel

寻求您的帮助专业知识,因为我正在检查是否有方法或函数或公式,以便 C 列下的日期反映在 S 列中的每个单元格上。

这是文件: https://docs.google.com/spreadsheets/d/1Xd6AH_Fwp78G8TBuhji-XCjuZWSrV0VAB-QDySPebts/edit#gid=0

例如:

代理#1 以红色突出显示,他的班次是 2022 年 3 月 6 日。我希望他的日期反映在 S 列中与他的名字相匹配的每个单元格中。

对于代理#2,显示的时间表是2022年3月7日,依此类推。

实际文件

如果可以的话,可以帮助我获取 Col D 和 E 下的时间,并将它们分别反映在 Col S 和 T 上的每个单元格上,那将非常有帮助!

提前谢谢您!

答案1

因此,每个 C 列日期都正好位于新代理“条目”开始处的下方 4 行。因此,如果您能找到一个公式来查找每个代理名称 (B) 的“第一行”,则可以使用 INDEX 或 OFFSET 向下跳转 4 行并向右跳转一个单元格到日期 (C)。

要找到名称单元格,您可以使用 XMATCH 反向向上查找(从最后一个开始搜索)第一个非空白单元格。在这里,您可能需要尝试匹配模式(“精确匹配”或“下一个最小/最大”或通配符)来找到名称并忽略空白。然后,XMATCH 将为您提供行索引。然后,INDEX($B$1:$C$10000, XMATCH(...)+4, 2) 将索引到日期单元格,也可以针对时间单元格进行调整。

或者,您可以添加辅助列来跟踪名称单元格的行偏移量,例如

=IF(ISBLANK(B2), B1+1, 0)

现在使用 OFFSET 跳转到日期单元格,例如

=OFFSET(B2, -*helper value*+4,1)

或者最好使用非挥发性指数

=INDEX($B$1:$C$10000, ROW()-*helper value*+4,2)

答案2

您可能想要尝试一下 IFS 函数。

在第一个链接中尝试

IFS(R2="Abanto, Jerome", $C$6, R2="Acero Campos, July Stephany", $C$17, etc etc

看看是否有效。R2 应指向名称单元格。$ 符号锁定日期单元格,使其不会移动。

答案3

您已经将所有名称都弄清楚了,并将其列在 R 列中。在此基础上,执行以下操作即可:

=OFFSET($C$1,  XMATCH(R13,  RIGHT($B$1:$B$39,  LEN($B$1:$B$39)-FIND(" ",$B$1:$B$39,FIND(": ",$B$1:$B$39)+2)),  0)+4-1,  0)

嵌套的FIND()' 在 B 列数据中定位:“Agent”之后,并使用该 (+2) 作为定位 Agent 名称前空格的起点。从 B 列数据的完整长度中减去该值可得出字符串中每个 Agent 名称的长度。它是字符串中最右边的数据,因此使用可RIGHT()提取它。

这将为您提供一个 B 列数据列表,该列表仅包含名称部分,将与 R 列中的名称匹配。这样就可以XMATCH()在该虚拟数据集中找到它们(计算时在函数内部,不存在于其他地方)。这将返回它们在虚拟数据集中的上/下(在本例中)位置。由于它从第 1 行开始,而不是更“自然”的第 2 行,因此该值也是名称出现的行号。

因此现在它有了行号,并且它是“绝对的”,而不是相对于某行的。您知道日期在 C 列中,因此所有情况下OFFSET()(或INDIRECT/ADDRESS)所需的列号都是已知的。已知所需日期位于代理人姓名行下方四行,因此与姓名行的偏移量为 4。

然后,公式使用OFFSET()单元格 C1 作为其起点。由于找到了“绝对”行号,而不是相对于其他行的行号,因此这种方法有效。因此,单元格 C1 适用于 S 列中的所有行。对于行偏移,您给它结果XMATCH()加上从那里到日期行的四行减去一行,因为起点在第 1 行。不能将其设为第 0 行,因此这是必要的。)列偏移很容易成为下一列。

如果更广泛地使用此方法,并且列之间的距离可以向上或向下改变,则使用COLUMN(S:S) - COLUMN(B:B)将保持其准确性。

因此,唯一要做的另一件事就是将公式沿列向下传播。不幸的是,我无法获得OFFSET()INDIRECT/ADDRESS获取动态范围(出错)。所以我将范围地址和 C1 设为绝对地址,然后沿列向下复制。有效,只是在现代并不优雅。不过在我看来,“成功”胜过“优雅”,所以……

正是INDIRECT()拒绝了动态范围的想法(和OFFSET()),因为似乎都不愿意接受动态范围所需的多个输入(范围而不是单元格)。ADDRESS()非常乐意接受它。我相信这是由于内部输入字符串的文本形成方式所致。INDIRECT()例如,将采用单个单元格范围,B2:B2但不是多个单元格范围。单个单元格范围解析为字符串中的单个值,而多个单元格范围具有多个值,我认为这就是症结所在。它愿意对它们进行评估,只是它让它们完全错误,#VALUE!-错误,所以......

但有时,将此类内容包装在另一个函数中(或两个函数,如果将其从错误阶段提升的函数实际上没有以所需的方式输出信息)可以克服这种错误,这里可能也是如此。如果是这样,那么可能也是如此OFFSET()

但“...并复制下来...”的方法效果很好。

相关内容