在 Excel 工作簿中,我在一个单元格中设置了范围,例如从 ABA 到 ABS,我想将它们分离并在它们之间添加每个代码,如图所示。但是没有 VBA 方法。
设法创建一个矩阵(在此处归档) 并设置范围限制(绿色单元格 - 公式 1),然后填写这些范围内的每个代码(橙色单元格 - 公式 2)。
我不喜欢这个解决方案,因为公式 2 不够先进,范围限制后的值过多(例如第 5 行中的蓝色单元格)。我想删除这些蓝色值,让这些单元格保持空白。
正在寻找一个概念来解决这个问题,因为我现在没有主意了。它必须是某种形式的公式 2 修改。有人能建议我如何让公式在特定范围限制(例如 ABS)处停止吗?
答案1
假如说:
- 您的“发件人”代码始终为三个字符,以 AB 开头
- 您的“收件人”代码始终为三个字符,以 AB 开头
- 范围从单个大写字母字符(例如 A)到另一个单个大写字母字符(例如 S)
- 您拥有最新版本的 Excel,并且能够访问
LET
和SEQUENCE
功能
然后你可以这样做:
要返回行上的结果序列,请使用此公式,如上图中单元格 B1 所示:
=LET(from,MID($A1,3,1),to,RIGHT($A1,1),"AB"&CHAR(SEQUENCE(CODE(to)-CODE(from)+1,1,CODE(from),1)))
要返回列上的结果序列,请使用此公式,如上图中单元格 C1 所示:
=LET(from,MID($A1,3,1),to,RIGHT($A1,1),"AB"&CHAR(SEQUENCE(1,CODE(to)-CODE(from)+1,CODE(from),1)))
- 让名称“from”等于范围内的第三个字符(即 A)
- 让名称“to”等于范围内最右边的字符(即 S)
- 此
CODE
函数将字符转换为该字符的数字表示。A 的代码为 65。S 的代码为 83。 83 - 65 + 1 = 19
,因此SEQUENCE(19,1,65,1)
创建一个包含从 65 到 83 的整数的数组,因为它是一个有 19 行、1 列的列表,从 65 开始并且每次增加 1 步。CHAR
将数字代码转换回字符,因此CHAR(SEQUENCE(19,1,65,1))
创建从 A 到 S 的字符列表。- 将步骤 5 中提到的列表与范围内的常用字符连接起来,
"AB"&CHAR(...
然后创建所需的输出。