如何在Excel中拆分列直到*后的第一个数字

May*_*rya 5 excel excel-formula office365

我试图将我的范围分成2。我想要的结果是直到第一个数字之后*。我尝试过将文本添加到列中,并尝试使用 Textbefore 和 textafter,但由于长度不同,它不起作用。这就是我正在挣扎的地方。

我有 我需要 我需要
ABC*K*1234*456 ABC*K*1234 第456章
AB*L2*987*456*459*326 AB*L2*987 456*459*326
AB*BCD*EFGJKL*DEG*22*1971 AB*BCD*EFGJKL*DEG*22 1971年
GHI*FG*HIGUI*02*1971*1985 GHI*FG*HIGUI*02 1971*1985

一级方程式

=TEXTBEFORE(A1,"*",2)

公式二

=TEXTAFTER(A1,"*",3)

不知道为什么 * 从 markdown 表中删除。excel 中的丝网打印。忽略之间的空格,当没有空格时,Markdown 不会读取。

在此输入图像描述

Ron*_*eld 5

这是另一种方法:

  • 分裂于*
  • 使用XMATCH查找第一个数字序列
  • 使用TAKEand DROP,创建序列 and 以及TEXTJOIN*一个数字之前和之后的数字
  • HSTACK两个字符串
B1: =LET(
    a, TEXTSPLIT(A1, "*"),
    b, XMATCH(TRUE, ISNUMBER(-a)),
    c, TEXTJOIN("*", , TAKE(a, , b)),
    d, TEXTJOIN("*", , DROP(a, , b)),
    HSTACK(c, d)
)
Run Code Online (Sandbox Code Playgroud)

并填写

在此输入图像描述

请注意,Excel 会将某些值转换为数字。这些包括您的系统可能解释为日期、指数表示法、比率或分数等的值(例如:May25; 1E5; 5/9`)。如果这些可能在您的字符串中,并且您希望将它们解释为文本,请扩展您的示例以包含它们


Jvd*_*vdV 3

公式

这是一种没有的 LAMBDA()选项:

在此输入图像描述

公式为B2

=LET(s,A2:A5,z,"*",x,FILTERXML("<t><s>*"&SUBSTITUTE(s,z,"</s><s>*")&"</s></t>","//s[substring(.,2)*0=0][1]"),y,TEXTAFTER(s,x&z,1),IF({1,0},TEXTBEFORE(s,z&y),y))
Run Code Online (Sandbox Code Playgroud)

这里的想法是,FILTERXML()的 xpath 表达式用于标识第一个数字的位置//s[substring(.,2)*0=0][1]

为了防止删除前导零,我首先在每个元素的位置 1 处插入星号。当希望使用TEXTBEFORE()TEXTAFTER()随后防止误报时,这也变得相关。

注意FILTERXML()在此上下文中使用需要您使用 Windows Excel 365 版本。


电源查询:

只是为了好玩,我在 PQ 中玩了一下,看看我是否可以做到这一点:

在此输入图像描述

M 代码:

let
    Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    Out_1 = Table.TransformColumns(Source,{"I have", each let x = "*"&List.First(List.Select(Text.Split(_,"*"),(s)=> Text.Select(s,{"0".."9"})=s))&"*" in Text.ReplaceRange(_,Text.PositionOf(_,x)+Text.Length(x)-1,1,"|")}),
    Out_2 = Table.SplitColumn(Out_1, "I have", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), {"I need.1", "I need.2"})
in
    Out_2
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,与 Excel 中的许多函数不同,FILTERXML 显然允许 2D 溢出结果,这一点很酷 (3认同)