excel - 有没有办法根据包含 3 个特定字母的字符串复制一串字母和数字,所有这些字母都在 excel 的单个单元格中找到?
问题描述
我有一个 excel 电子表格,它有一列,每个单元格都填充了从数据库中删除的数据页。在每个单元格中,可以定义 1 或 2 个序列号。序列号共有三种已知格式: 以 YV 开头,长度为 10 位。以 VNA 开头,长度为 8 位。以 SVNA 开头,长度为 9 位。我需要将该列中每个序列号的每个副本提取到一个单独的单元格中。每个单元格中可能有0、1或2个序列号,复制的信息需要留空,留一个序列号,或者留2个序列号,用逗号和空格隔开(“VNA1234A, VNAB4321 ”)。
我没有任何代码可以建议,因为我在这方面看到的所有代码都是提取整个已知单词,而不是基于几个字母的整个单词或短语。
有没有办法做到这一点?
我想将图片中文本中的序列号 VNA3FB00 复制到左侧的 F 单元格中。如果有另一个序列号,也要复制它。
解决方案
这可以通过公式和访问来完成TEXTJOIN
(在 O365 和 Excel 2019 中可用)。在F2
公式中:
=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。也许是这样的:
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
:
=REGEX(G2,"\b(?:YV[^\W_]{8}|S?VNA[^\W_]{5})\b")
如果您想排除小写字母,[^\W_]
您可能想在哪里摇摆不定。[A-Z0-9]
如果您不熟悉正则表达式,请查看在线演示和这篇关于 VBA 中正则表达式的介绍性文章。
推荐阅读
- python - 由于 FileNotFoundError,heroku 上的 Python discord bot 崩溃。我该如何解决?
- ios - 如何在通过 XCUIApplication 启动的 iOS 模拟器上安装 PDF 文件
- php - 合并两个 Json Object PHP(结构不同)
- excel - 来自多列和多行的参考值
- amazon-web-services - Kubernetes Bridge VSCODE 未连接到 AWS EKS 中的依赖项
- identityserver4 - 身份服务器 4 错误 400 并将我重定向到 signin-oidc
- c++ - 如何编写一个引用“char *”或“const char*”的 C++ 函数?
- python - 高效序列化多个需要进行 REST 调用的对象
- android-jetpack-compose - LazyColumn 中的列堆叠/折叠成一列
- reactjs - 映射放大 Storage.get()