【问题标题】:How to group dates in adjacent cells together to create a range?如何将相邻单元格中的日期分组在一起以创建一个范围?
【发布时间】:2023-04-01 06:41:01
【问题描述】:

我有一个包含日期的单元格列表。有些日期是连续的(例如 9 月 2 日、9 月 3 日、9 月 4 日),而有些则是独立的。我希望将所有日期存储在一个单元格中,其中连续日期将存储为一个范围,所有独立日期和范围用逗号分隔(例如“Sept 2”、“Sept 3”、“Sept 4” ", "Sept 8" 将被存储为 "Sept 2-4, Sept 8")。

有没有办法用 Excel 公式做到这一点?

以下是当前数据的外观:

这是预期的结果:

我对此进行了多次破解,但我得到的最接近的是创建所有连续日期的列表。

【问题讨论】:

  • 公式不是正确的方法。这将更适合 vba。
  • 据我所知,普通公式根本没有办法。您肯定需要在 VBA 中编写一些代码。实际上你用 VBA 标记了这个问题,所以请发布你尝试过的代码,你在哪里卡住了,你遇到了什么错误。
  • 编辑队列目前已满,因此我无法提供较小的编辑,但我认为这是一个值得重新考虑的好问题。它给出了一个明确的问题、简短的样本数据和预期的结果,所以至少对我来说,我没有看到有助于澄清问题的缺失细节。

标签: excel vba excel-formula


【解决方案1】:

一定有更好的方法,但如果您拥有最新版本的 Excel,则可以使用公式执行此操作。我假设您的范围从 B 列到 L 列并从第二行开始。请注意,它对格式很敏感,因此请确保它是一致的。另请注意,它适用于超过几个月而不是几年的范围。

=LET(v, TEXTJOIN(",",, TEXT(B2:L2, "m/d/yyyy")),
w, SUBSTITUTE(v, "1/0/1900,", "!"),
x, IFERROR(FILTERXML("<t><s>"&SUBSTITUTE(w, "!", "</s><s>")&"</s></t>", "//s"),""),
y, IF(RIGHT(x,1)=",", LEFT(x,LEN(x)-1), x),
z, LEN(y),
a, IF(z<11, y, LEFT(y, SEARCH(",",y)-1)&"-"&RIGHT(RIGHT(y,12), 12-SEARCH(",", RIGHT(y,12)))),
b, TEXT(MONTH(LEFT(a, SEARCH("-", a)-1))*29, "mmm")&" "&DAY(LEFT(a, SEARCH("-", a)-1)),
c, TEXT(MONTH(RIGHT(a, LEN(a)-SEARCH("-", a)))*29, "mmm")&" "&DAY(RIGHT(a, LEN(a)-SEARCH("-", a))),
d, IFERROR(IF(LEN(a)<11, TEXT(MONTH(a)*29, "mmm")&" "&DAY(a),
IF(LEFT(b,3)=LEFT(c,3), b&"-"&RIGHT(c, LEN(c)-4), b&"-"&c)),""),
TEXTJOIN(",  ",1,d))

例如:

【讨论】:

    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多