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 不会读取。
这是另一种方法:
*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`)。如果这些可能在您的字符串中,并且您希望将它们解释为文本,请扩展您的示例以包含它们
公式:
这是一种没有的 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)
| 归档时间: |
|
| 查看次数: |
386 次 |
| 最近记录: |