【问题标题】:How to split texts from dynamic range?如何从动态范围中分割文本?
【发布时间】:2022-10-21 17:01:20
【问题描述】:

我有一个从 ERP 系统下载的长数据集。它们是管道| 分隔的。然后我必须拆分到单个列。我可以使用FILTERXML()TEXTSPLIT() 将它们拆分为列。我试图动态使用 Textsplit 函数,以便如果有任何新数据到达行末,它会自动拆分为列。下面是我的示例数据(单个单元格中的每一行)。

HANG TAG (FG00028 NEXT||||(69 X 18)mm|||U LABEL|||||1631/2022|||||||||)             
BOX END LABEL (FG00781 NEXT||||(114 X 68)mm|||NEXT-BK|||||1804/22|||||||||)             
HANGER STICKER (FG00840 NEXT||||(40 X 40)mm|||WWL251|||||1616/22|||||||||)              
HANGER STICKER (FG00840 NEXT||||(34 X 17) mm|||WWL251|||||1621/2022|||||||||)               
CARE LABEL (FG00722 NEXT|CO-069593[QTY:2248]PER:0.35%|||(130X 25)mm|||NEXT-NF|||||1573/22|||||||||)             
CARE LABEL (FG00722 NEXT||||(130X 25)mm|||SWS-COM|||||1578/2022|||||||||)               
CASCADE CARD (FG00780 GEORGE|1078230-31-28-29|||(601 X 276.5) mm|||MUPC2||LIZ|||1639/22|||||||||)               
CARE LABEL (FG00722 NEXT||||(130X 25)mm|||SWS-SIM|||||1573/22|||||||||)             
CARE LABEL (FG00722 GEORGE|PO-1077981|||(20X70)mm|||CLGW|||||1734/2022|||||||||)                
BOX END LABEL (FG00781 NEXT||||(65X 105)mm|||BK|||||1177/22|||||||||)               
WOVEN MAIN LABEL (FG00806 GEORGE|PO-1084217 ERPNO-22S23P111037/1|||10X77MM|||GCBMF|||||1752/2022|||||||||)              
OVER RIDER (FG00826 Sainsbury|PP sample for developing|||31X95MM|||TU-DENOV-L2|||||365/22|||||||||)             
DISCLAIMER TAG (FG00829 SAINSBURY|2523229/141048665||||||TU-DISCSW24|||||1571/22|||||||||)              
HANGER STICKER (FG00840 GEORGE|1071004-1070769-70-1070764-65-66-67-1071006-1070776|||37X24MM|||MLH|||||1462/2022|||||||||)              
DISCLAIMER TAG (FG00829 SAINSBURY|2523238/1410980784||||||TU-DISCSW24|||||1572/22|||||||||)

到目前为止,我可以应用TEXTSPLIT()TEXTJOIN() 来动态拆分,例如-

=TEXTSPLIT(TEXTJOIN("#",TRUE,A1:A15),"|","#")

上面的公式给了我想要的结果,但我不能将它用于长数据集,因为TEXTJOIN() 有字符限制。那么,如何通过excel内置函数将文本从动态范围中拆分出来呢?

【问题讨论】:

  • 只要您有固定数量的结果列,您就可以使用类似:=MAKEARRAY(ROWS(A1:A15),22,LAMBDA(r,c,INDEX(TEXTSPLIT(INDEX(A1:A15,r),"|"),1,c)))?您可以添加 LET 以便只有一个范围引用可以更改,或者使用命名范围。
  • @Rory 它适用于样本数据。我将适用于长数据集和反馈。
  • 使用 BYROW 循环每一行数据
  • @Terio BYROW 每行只会返回一个结果。 OP 希望每行有几个结果。
  • @JosWoolley 对:不支持嵌套数组 :(

标签: excel excel-formula office365


【解决方案1】:

试试MAKEARRAY()

B1 中的公式:

=IFERROR(DROP(REDUCE(0,A1:A15,LAMBDA(a,b,VSTACK(a,TEXTSPLIT(b,{"|"," ("})))),1),"")

【讨论】:

  • 它对我有用,但对于大数据集来说真的很慢。我有超过 1000000 的记录。无论如何学习一些新的东西。谢谢你。
  • @Harun24hr 如果速度次优,基于 pq 的解决方案可能是更好的选择
  • 这次我已经通过文本到列的方法完成了我的真实案例。
  • @Harun24hr,我刚刚在REDUCE() 中了解到VSTACK() 的一个很酷的新技巧。
猜你喜欢
  • 2021-04-25
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
相关资源
最近更新 更多