我有一个日期列(A),我想创建一个具有唯一月份-年份的列。我可以使用UNIQUE函数,但这需要创建一个额外的列(B):= DATE(YEAR(A1),MONTH(A1))和最后一列= UNIQUE(B1:B)问题是,我能在不创建额外列的情况下完成它吗?
= DATE(YEAR(A1),MONTH(A1))
= UNIQUE(B1:B)
azpvetkf1#
截至2023年,GSheet和Excel都有UNIQUE函数和BYROW函数,后者比ARRAYFORMULA定义更好,更容易理解。因此,我提出了一个新的解决方案,在这两种产品中都适用:
=unique(byrow(A:A; lambda(d; date(year(d); month(d); 1))))
说明:BYROW()函数循环遍历A列中的所有日期,并使用LAMBDA()构造一个日期列,该日期列用1替换每个日期所在月份的日期。2然后UNIQUE()函数只接受唯一的日期。
将日期表达式包含在ARRAYFORMULA中:
=UNIQUE(ARRAYFORMULA(DATE(YEAR(A1:A10), MONTH(A1:A10), 1))
Excel中没有UNIQUE()函数,它只存在于Google Sheets中。你可以使用INDEX/MATCH/COUNTIF格式的公式来模拟它,但它肯定没有上面的解决方案那么简单。
xtfmy6hx2#
当我使用2018年2月的答案时,我总是在列表的最后得到一个奇怪的日期。这是因为空白单元格被考虑在内了。我使用过滤器来删除它们,这给了我唯一的月/年值
=UNIQUE(ARRAYFORMULA(DATE(YEAR(FILTER(A1:A10, A1:A10<>"")), MONTH(FILTER(A1:A10, A1:A10<>"")), 1)))
2条答案
按热度按时间azpvetkf1#
截至2023年,GSheet和Excel都有UNIQUE函数和BYROW函数,后者比ARRAYFORMULA定义更好,更容易理解。因此,我提出了一个新的解决方案,在这两种产品中都适用:
说明:BYROW()函数循环遍历A列中的所有日期,并使用LAMBDA()构造一个日期列,该日期列用1替换每个日期所在月份的日期。2然后UNIQUE()函数只接受唯一的日期。
将日期表达式包含在ARRAYFORMULA中:
Excel中没有UNIQUE()函数,它只存在于Google Sheets中。你可以使用INDEX/MATCH/COUNTIF格式的公式来模拟它,但它肯定没有上面的解决方案那么简单。
xtfmy6hx2#
当我使用2018年2月的答案时,我总是在列表的最后得到一个奇怪的日期。这是因为空白单元格被考虑在内了。
我使用过滤器来删除它们,这给了我唯一的月/年值