在处理 Excel 中的多列日期表时,会遇到不同的情况。以下详细讲解两种常见情况以及相应的解决方法。
一、每行数据从左到右按日期从小到大排列的情况
当每行日期是从小到大排列时,每行最后更新的日期自然就是这一行中的最大值。所以,我们可以将这个问题简化为求一行数据中的最大值。
使用 MAX 函数:
公式及参数解释
公式为 “=MAX (C2:XFD2)”。其中,“C2:XFD2” 表示要操作的单元格区域,这里是取第二行从第三列(C 列)到最后一列(XFD 列)的数据范围。MAX 函数会在这个区域中找到最大值,这个最大值就是该行最后更新的日期。
自动更新特性
这个公式的一个优点是,如果后续日期更新,Excel 会自动重新计算结果。例如,当在这一行的某个日期单元格中输入一个更大的日期值时,公式会立即更新并返回新的最大值,也就是最新的最后日期。
二、仅有标题是日期格式的情况
在这种情况下,我们需要找到每一行最后一个非空单元格的位置,然后以这个位置为基准,偏移到第一行来获取对应的日期值。这种情况可以使用lookup函数来实现:
=LOOKUP(1,0/(C2:XFD2<>""),$C$1:$XFD$1)
公式步骤分解:
步骤一:判断非空单元格
公式中的 “C2:XFD2<>""” 部分,它的作用是判断第二行(以第二行为例,实际应用中可以根据需要修改行号)的数据是否为空。这会得到一个由 TRUE 和 FALSE 构成的逻辑数组。例如,如果 C2 单元格有数据,对应的位置就是 TRUE;如果为空,则为 FALSE。
步骤二:转换数组形式
“0/(C2:XFD2<>"")” 这部分是将前面得到的逻辑数组进行转换。它会把符合条件(即非空单元格)的转换为 0,不符合条件(空单元格)的转换为错误值 #DIV/0!。这样就得到了一个新的数组,形式可能为 #DIV/0!、0、#DIV/0!、0、#DIV/0!……
步骤三:利用 LOOKUP 函数特性查找
LOOKUP 函数在这里的查找值是 1。由于 LOOKUP 函数具有自动忽略错误值和向下匹配的特征,它会忽略数组中的错误值 #DIV/0!,只关注 0。并且,它的向下匹配机制是如果没有找到完全匹配的结果(这里不太可能找到 1 这个值,因为数组中只有 0 和错误值),则返回小于查找结果的最大值,在这个例子中就是返回数组中最后一个 0 所对应的单元格。
步骤四:偏移获取日期值
“$CXFD$1” 这部分利用了 LOOKUP 函数最后一个参数可以偏移返回其它单元格区域的值的特点。通过前面步骤找到最后一个非空单元格在第二行(同样,行号可根据实际调整)的位置后,以这个位置为基准,从第一行(标题行)中获取对应的日期值,从而得到该行最后一个非空单元格对应的日期。
结语
在 Excel 中,对于求某行 / 列的第一个 / 最后一个非空单元格的问题,除了上述介绍的 LOOKUP 函数外,还可以根据具体情况使用其他函数组合来实现。例如,使用 INDEX MATCH 函数或者 SUMPRODUCT 函数等。而且,除了使用函数方法外,还可以利用 PowerQuery 或者 VBA 等功能来解决。在实际应用中,应该从不同的角度灵活分析问题,结合自己的知识和经验,找到最适合自己的方法来处理数据。
评论 (0)