我正在尝试创建一个与 MS Excel 和 LibreOffice Calc 兼容的公式。该公式将跨多列复制,并递增前一列单元格中字符串的最后一个数字。
考虑单元格 A1 的以下输入:
对于上述用例,单元格 B1 中的公式应计算为以下内容:
我认为关键是隔离字符串中的最后一个数字,添加 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,"")))))),"")
快速尝试一下,
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)
)