在Excel中分隔数字和文本

Separate numbers and text in Excel

提问人:Ryan Kapsak 提问时间:11/4/2022 最后编辑:Ryan Kapsak 更新时间:11/5/2022 访问量:227

问:

是否可以在 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 客服
Excel excel 公式 数据操作

评论


答:

3赞 JvdV 11/4/2022 #1

假设每个级联值中有两个尾随字母“[A-Z]”,请使用:

enter image description here

公式: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用任意大写字母拆分文本。 按任意数字拆分文本。 是结果,但数字仍然是文本。这是用textspillremove

enter image description here

我的不会逐行溢出,需要拖拽。我认为 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))

enter image description here