我正在尝试将I have范围拆分为2。我想要的结果是直到*
之后的第一个数字。我尝试过将文本转换为列,并尝试使用TextBefore和TextAfter,但由于长度的差异,它不起作用。这就是我奋斗的地方。
| 我有|我需要|我需要|
| - -----|- -----|- -----|
| ABCK1234456| ABCK1234|四百五十六|
| 电话:+86-21 - 88888888传真:+86-21 - 88888888| ABL2987| 456459326|
| ABBCDEFGJKLDEG221971| ABBCDEFGJKLDEG22|一九七一年|
| GHIFGHIGUI0219711985| GHIFGHIGUI02| 1971年 *|
一级方程式=TEXTBEFORE(A1,"*",2)
二级方程式赛车=TEXTAFTER(A1,"*",3)
不知道为什么 * 从markdown表中删除。在Excel中进行屏幕打印。忽略中间的空格,没有空格时markdown没有阅读。
7条答案
按热度按时间nuypyhwy1#
备选方案:
qni6mghb2#
这里有另一个方法:
*
上拆分XMATCH
查找第一个数字序列TAKE
和DROP
创建序列和TEXTJOIN
,其中*
位于第一个数字之前和之后HSTACK
两个字符串填写
May25
; 1E5; 5/9`)。如果这些可能在你的字符串中,并且你希望它们被解释为文本,请扩展你的例子以包含它们 *camsedfj3#
公式:
这里有一个选项 * 不带 *
LAMBDA()
:B2
中的公式:这里的想法是,
FILTERXML()
的xpath表达式用于标识第一个数字的位置与//s[substring(.,2)*0=0][1]
。为了防止删除前导零,我在每个元素的位置1插入星号。当稍后使用
TEXTBEFORE()
和TEXTAFTER()
来防止误报时,这也变得很重要。注意:在此上下文中使用
FILTERXML()
需要使用windows Excel 365版本。PowerQuery:
只是为了好玩,我在PQ里玩了一下,看看我能不能做到这一点:
M代码:
eulz3vhy4#
前后对比
flvlnr445#
我的版本:
其中,它首先计算第二部分'B',方法是通过分隔符
*
分割范围并将所有溢出值转换为数字。文本值将转换为错误,并由TOROW参数3
过滤掉。然后通过从初始文本中删除a
的文本字符串来计算a
。并将其溢出:
kmb7vmvb6#
您可以使用
SEARCH
查找星号的位置。然后将其与LEFT
或RIGHT
组合以获得所需的子字符串。比如说,
tkqqtvp17#
我必须承认,你有一个有效的观点:据我所知,Excel没有一个基本的函数来查找字符串中子字符串的最后一个条目(但VBA有,它是
InStrRev
函数)。所以,我建议你用这个
InStrRev
VBA函数做一个小函数,并在你的Excel工作表中使用它,就像这样:VBA代码:
Excel公式:
=LastIndexOf(A1,"_")
=RIGHT(A1,LEN(A1)-LastIndexOf(A1, "_"))
(Cell“B1”仅用于演示目的。)
截图: