答案1
如果您不介意的话,根据我们在评论中的讨论,我提出的部分解决方案对我来说变得足够有趣,我想将其作为答案发布给后人,即使我还没有让您完全明白这一点。
您正在寻找的解决方案分为两部分;我已经解决了第一部分,并且根据我们的讨论,将第二部分留给您。
第一部分
将此公式放在工作簿中的任何位置:
="FR"&TEXT(MAX(IFERROR(VALUE(MID(INDIRECT("$A2:$A"&LOOKUP(2,1/(A:A<>""),ROW(A:A))),3,2)),0))+1,"00")
这是一个数组公式,输入后按Ctrl++Shift确认Enter
这将创建一个包含“FR”ID 的单元格,该 ID 应分配给下一个创建的记录:
关于此公式的一些注释:
LOOKUP
是一件有趣的事情。使用它来定位最后填充的行或列的技巧非常酷。最初我有,="FR"&TEXT(MAX(IFERROR(VALUE(MID(INDIRECT("$A2:$A"&COUNTA(A:A)),3,2)),0))+1,"00")
但当COUNTA
存在空白时并不可靠。我在这里包括它,因为该版本与最终版本之间的比较有助于演示在那个较长的公式中做什么。1.5 我想我应该向 excel jet dot net 致敬,LOOKUP
这里的代码块直接取自它。- 除了在确定数组函数的目标范围
LOOKUP
时使用的技巧之外,这里发生的事情实际上非常简单;获取字符串的(忽略错误),添加 `,并在前面添加 'FR'。很简单。INDIRECT
MAX
VALUE
MID(3,2)
A
- 无论排序如何,也无论插入多少空行,此公式都有效。
- 感谢@Hannu 提供的关于使用
TEXT
来处理单数输出格式的说明。请注意,如果您使用该TEXT(...,"00")
版本,它将无法处理三数输出;在这种情况下,您需要进行调整TEXT(...,"000")
(假设“FR001”等适用于单数输出!)。
好的,现在您已经获得了所需的值,但它还在那里。下一步做什么?
第二部分
谷歌搜索“Excel 记录宏”并阅读一些教程。从那里开始,完成你的任务应该相当容易。如果你真的想一丝不苟,把你的解决方案写成答案,一两天后你就可以接受你自己的答案了。在评论中@我,我也会点赞。这是一项非常有用的技能,也是一个完美的示例用例。