提问人:Ryan Kapsak 提问时间:11/4/2022 最后编辑:Ryan Kapsak 更新时间:11/5/2022 访问量:227
在Excel中分隔数字和文本
Separate numbers and text in Excel
问:
是否可以在 Excel 中编写 Excel 公式来将数字和文本的组合从单元格中分离出来?
col A 是数据的格式,cols b - i 是我需要它们的样子:
col A | 列 B | 列 C | 列 D | 上校 E | Col F (五) | 科尔 G | H上校 | 科尔 I |
---|---|---|---|---|---|---|---|---|
1EA/1PK/16BX/124CA系列 | 1 | EA电子交易 | 1 | PK的 | 16 | BX系列 | 124 | CA公司 |
1EA/6CA型 | 1 | EA电子交易 | 6 | 客服 |
答:
3赞
JvdV
11/4/2022
#1
假设每个级联值中有两个尾随字母“[A-Z]”,请使用:
公式:B1
=DROP(IFERROR(REDUCE(0,A1:A2,LAMBDA(a,b,VSTACK(a,LET(c,TEXTSPLIT(b,"/"),TEXTSPLIT(TEXTJOIN("|",,REPLACE(c,LEN(c)-1,0,"|")),"|"))))),""),1)
要执行此操作,无论数字后面的尾随字符数量如何:
=DROP(IFERROR(REDUCE(0,A1:A2,LAMBDA(a,b,VSTACK(a,LET(c,TEXTSPLIT(b,ROW(1:10)-1,,1),d,SUBSTITUTE(TOROW(WRAPCOLS(HSTACK(TEXTSPLIT(b,c,,1),c),COUNTA(c))),"/",),IFERROR(--d,d))))),""),1)
这里的想法是用任何数字分隔递归中的每个输入。然后,可以将余数输入为数组,以分隔输入以检索所有数字。然后,其他一些函数将在这两个数组周围进行随机排序,以正确地连接到输出的前几行。VSTACK()
评论
0赞
P.b
11/4/2022
很好,你怎么能让文本拆分溢出来。看我的回复。你知道有什么方法可以应用它吗?
0赞
JvdV
11/5/2022
@p.b 谢谢。我现在不在电脑后面,但这个周末会看看!
1赞
JvdV
11/5/2022
@P.b,添加了一个选项,无论尾随字符的长度如何,都可以执行此操作。请注意,这也不依赖于首先连接整个输入的可能限制。它基本上是一个递归函数,用于获取单个输入并将其带到输出的前几行。TEXTJOIN()
VSTACK()
1赞
JvdV
11/5/2022
@P.b,是的,这是描述这种行为的好方法。TEXTSPLIT 限制的一个非常好的替代方案,请参阅此处。在更多情况下很有用,人们也想回顾以前的迭代。
1赞
P.b
11/5/2022
发现它已经有更多用途 stackoverflow.com/a/74326770/12634230
2赞
P.b
11/4/2022
#2
我有一个解决方案可以溢出结果,数字是数字,文本(或数字)长度可以是可变的:
=LET(number,TEXTSPLIT(A1,CHAR(SEQUENCE(1,26,65)),,1),
text,TEXTSPLIT(A1,SEQUENCE(1,10,0),,1),
spill,TOROW(VSTACK(number,text),,1),
remove,SUBSTITUTE(spill,"/",""),
IFERROR(--remove,remove))
number
用任意大写字母拆分文本。 按任意数字拆分文本。 是结果,但数字仍然是文本。这是用text
spill
remove
我的不会逐行溢出,需要拖拽。我认为 JvdV 可能知道如何解决这个问题。
编辑以溢出:
=LET(data,A1:A2,
join,TEXTJOIN("|",,data),
number,TEXTSPLIT(join,CHAR(SEQUENCE(1,26,65)),,1),
text,TEXTSPLIT(join,SEQUENCE(1,10,0),,1),
spill,TOROW(VSTACK(number,text),,1),
spilldown,IFERROR(TEXTSPLIT(TEXTJOIN("•",1,spill),"•","|",1),""),
remove,SUBSTITUTE(spilldown,"/",""),
IFERROR(--remove,remove))
评论