增加电子表格单元格中包含的字符串中的最后一个数字

问题描述 投票:0回答:1

我正在尝试创建一个与 MS Excel 和 LibreOffice Calc 兼容的公式。该公式将跨多列复制,并递增前一列单元格中字符串的最后一个数字。

考虑单元格 A1 的以下输入:

  • 主机1
  • 主机01
  • 主机1-ilo
  • host01-idrac
  • dc1-主机1
  • dc1host01
  • dc1-主机1-ilo
  • dc01host01-idrac

对于上述用例,单元格 B1 中的公式应计算为以下内容:

  • 主机2
  • 主机02
  • host2-ilo
  • host02-idrac
  • dc1-主机2
  • dc1host02
  • dc1-主机2-ilo
  • dc01host02-idrac

我认为关键是隔离字符串中的最后一个数字,添加 1,然后可能在结果中添加前导零。最后,将其放回原始字符串中。

到目前为止,我有以下数组公式来隔离数字,但这对于最后四个示例输入不起作用,因为它考虑了所有数字:

=IFERROR(IF(COUNT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>LEN(TEXTJOIN("",1,IFERROR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)+0,""))),"", TEXT(VALUE(TEXTJOIN("",1,IFERROR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)+0,"")))+1,REPT("0",LEN(TEXTJOIN("",1,IFERROR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)+0,"")))))),"")
excel-formula libreoffice-calc
1个回答
0
投票

快速尝试一下,

LAMBDA
MAP
SEQUENCE
可能无法使用 - 请告诉我。

=LET(
    incr_last_num, LAMBDA(input,
        LET(
            input_index, SEQUENCE(, LEN(input)),
            index_last_digit, MAX(
                ISNUMBER(--MID(input, input_index, 1)) * input_index
            ),
            right_of_num, RIGHT(input, LEN(input) - index_last_digit),
            left, LEFT(input, index_last_digit),
            _left_index, SEQUENCE(, LEN(left)),
            index_last_non_digit, MAX(
                NOT(ISNUMBER(--MID(input, _left_index, 1))) * _left_index
            ),
            num, RIGHT(left, LEN(left) - index_last_non_digit),
            left_of_num, LEFT(left, index_last_non_digit),
            left_of_num & TEXT(num + 1, "00") & right_of_num
        )
    ),
    MAP(A1:A8, incr_last_num)
)

Result

© www.soinside.com 2019 - 2024. All rights reserved.