如何在Excel中将表格含日期单元格提取为可排序单列并实现去重倒序?
如何在Excel中将表格含日期单元格提取为可排序单列并实现去重倒序?
我刚好搞定这个需求啦,多亏了nkalvi的思路启发!下面是调整后的公式,能把表格里分散的日期单元格提取出来,整理成按时间倒序排列、自动去重的关联数组(我对原公式做了小修改,去掉了重复项):
=LET( dates_, IF(ISBLANK(Dates[[1巡目]:[11巡目]]), NA(), Dates[[1巡目]:[11巡目]]), no_dates, LAMBDA(row_, COUNTBLANK(INDEX(Dates[[1巡目]:[11巡目]], row_, )) = 11 ), loc_header, "名前", date_header, "日付", idx, SEQUENCE(ROWS(dates_)), date_and_loc_0, REDUCE( {"Loc","Date"}, idx, LAMBDA(acc,cur, IF( no_dates(cur), acc, LET( dates_to_col, TOCOL(INDEX(dates_, cur, ), 2), loc, INDEX(Dates[名前], cur, 1), loc_col, EXPAND(loc, ROWS(dates_to_col), , loc), VSTACK(acc, HSTACK(dates_to_col, loc_col)) )) ) ), date_and_loc, DROP(date_and_loc_0, 1), filtered_unique, SORT(FILTER(date_and_loc, ISNUMBER(INDEX(date_and_loc, , 1))), 1, -1), unique_loc_and_date, UNIQUE(filtered_unique) )
简单说下核心逻辑,方便你理解和调整:
- 用
LET定义一系列变量,让整个公式结构更清晰,后期修改也方便 dates_:把原表格中「1巡目」到「11巡目」区域的空值转为NA(),方便后续过滤无效内容no_dates:自定义了个小函数,用来判断某一行是否所有日期单元格都为空,直接跳过这类无数据的行- 通过
REDUCE循环每一行,搭配TOCOL把每行的有效日期转成单列,再用EXPAND把对应的「名前」(姓名)重复对应次数,最后用VSTACK把所有行的结果合并成完整的两列数据 - 最后先过滤掉非日期的无效值,再按日期降序排序,最后用
UNIQUE去掉重复的条目
备注:内容来源于stack exchange,提问作者user2289877
相关产品推荐
相关产品推荐

