如何根据非连续数字列表创建范围显示?

How can I create a range display from a list of non consecutive numbers?

我制作了一个 bash 脚本来显示范围内的数字,我想知道是否可以在不编写脚本的情况下在表格中执行相同的操作。

我在一列(比方说 A)中得到了一个数字列表,例如:

001
002
004
012
013
014
...

我在单元格中有一个变量前缀(假设 B1="PREFIX")

有没有办法显示如下结果:

PREFIX001-PREFIX002
PREFIX004
PREFIX012-PREFIX014
...

预先感谢您的帮助!

可以做到。例如 A3:A 范围有数字,B1 将是前缀,B3:B 将有结果行。

公式仅在B3中(因为它是一个数组公式):

=ARRAYFORMULA(
  TRANSPOSE(SPLIT(
    REGEXREPLACE(
      REGEXREPLACE(
        TEXTJOIN(
          ",",
          True, 
            IF(
              NOT(ISNUMBER(A3:A)),
                "",
                IF(
                    NOT(ISNUMBER({""; OFFSET(A3:A, 0, 0, ROWS(A3:A) - 1)}))
                  + NOT(ISNUMBER({A4:A; ""}))
                  + (  ISNUMBER({""; OFFSET(A3:A, 0, 0, ROWS(A3:A) - 1)})
                     * (A3:A <> {""; OFFSET(A3:A, 0, 0, ROWS(A3:A) - 1)} + 1))
                  + (  ISNUMBER({A4:A; ""})
                       * (A3:A <> {A4:A; ""} - 1)),
                    TEXT(A3:A, "00#"),
                    ""
                  )
            )
          & IF(
              ISNUMBER({A4:A; ""})
            * (A3:A = {A4:A; ""} - 1),
              "-",
              ""
          )
        ),
        "(?:-,)+",
        "-"
      ),
      "\d+",
      B1 & "[=10=]"
    ),
    ","
  ))
)

这是一个示例 sheet,其中包含对解决方案的逐步说明:link

@kishkin

非常感谢您抽出宝贵时间来做这件事!我复印了一份来检查一下,你太好了! 我用多列创建了我的列,但方式很糟糕(我对表格很陌生,但到目前为止我很喜欢它):

对连续数字进行分组:

=IF(CNUM(V2)=CNUM(V1)+1,IF(REGEXMATCH(W1,"-"),LEFT(W1,CHERCHE("-",W1)-1)&"-"&V2,V1&"-"&V2),V2)

替换范围内的孤独:

=IF(LEFT(W3,2)=LEFT(W2,2),0,W2)

稍后拆分范围以计算范围值:

=SPLIT(X2,"-")

计算除 0 值以外的范围:

=IF(Z2-Y2+1<0,1,Z2-Y2+1)

删除所有 0,只保留范围:

=filter(X2:X,X2:X>0)

将总计与范围对齐(对项目的团体预订很有用)

=filter(AA2:AA,X2:X>0)

在那之后,它只是添加前缀和一些文本(对不起法语)。 正如我告诉你的那样,它不像你的解决方案那么性感^^