首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以根据包含3个特定字母的字符串复制一个字母和数字字符串,所有这些都在excel中的单个单元格中找到?

有没有一种方法可以根据包含3个特定字母的字符串复制一个字母和数字字符串,所有这些都在excel中的单个单元格中找到?
EN

Stack Overflow用户
提问于 2020-07-06 11:28:20
回答 1查看 187关注 0票数 0

我有一个excel电子表格,其中有一个列,每个单元格都填充了从数据库中删除的数据页。在每个单元中,可以定义1或2个序列号。有三种已知的序列号格式:从YV开始,有10位长。从VNA开始,有8位长。从SVNA开始,有9位长。我需要把那列中每一个序列号的每一份拷贝都提取到一个单独的牢房里。每个单元格中可能有0、1或2个序列号,复制的信息需要保留为空白,保留单个序列号,或留下由逗号和空格分隔的2个序列号("VNA1234A,VNAB4321")。

我没有任何代码可以暗示,因为我在这方面看到的所有代码都是提取一个完整的已知单词,而不是一个基于几个字母的完整单词或短语。

有什么办法可以做到吗?

我想把图片文本中的序列号VNA3FB00复制到左边的F单元格中。如果还有另外一个序列号,也要把它复制一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-06 12:16:34

这可以通过一个公式和对TEXTJOIN的访问来完成(可在O365和Excel2019中找到)。在F2中,公式:

代码语言:javascript
复制
=TEXTJOIN(", ",,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(G1,":"," "),","," "),"."," "),";"," ")," ","</s><s>")&"</s></t>","//s[starts-with(., 'YV') and string-length(.) =10 or starts-with(., 'VNA') and string-length(.) =8 or starts-with(., 'SVNA') and string-length(.) =9]"))

根据数据的外观,您可能需要添加更多的替换。

您还可以决定通过VBA使用UDF。也许是这样的:

代码语言:javascript
复制
Function REGEX(str As String, pat As String) As String

With CreateObject("vbscript.regexp")
    .Global = True
    .Pattern = pat
    If .Test(str) = True Then
        For Each Mtch In .Execute(str)
            If REGEX = "" Then
                REGEX = Mtch
            Else
                REGEX = REGEX & ", " & Mtch
            End If
        Next
    End If
End With

End Function

您可以在F2中调用此函数,方法是:

代码语言:javascript
复制
=REGEX(G2,"\b(?:YV[^\W_]{8}|S?VNA[^\W_]{5})\b")

如果您想要将小写字母排除到[^\W_]中,您可能想要影响[A-Z0-9]

如果您不熟悉正则表达式,请查看VBA中regex上的在线演示介绍。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62755073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档