如何通过VBA或Excel公式从文本string中提取特定的字母和数字

我想从excel中的列中的较大string中提取文本和数字的组合。

我必须处理的常量是每个文本string将

  • 或者从A,C或S开始,然后
  • 将永远是7个字符长
  • 他想要提取的string的位置各不相同。

例如;

COB0012 WP0402电子付款 – 中小企业顾问
DCPY708 A850035 WP161configurationpipe理器核心一般(Aman Ranjan)A614019 WP0302 SQL 2005升级项目 – WFCopiesChq – 下一阶段SUTP016 EPM培训T2

产量

COB0012
A850035
SUTP016

我有标准的左/右/中/searchfunction的知识,但是我的数据集是变化很大,所以我想创build一个自动化这个过程的东西。 (1000行)

我想像一个UDF函数可以做到这一点,但是我和UDF的相似性是非常基本的。

任何帮助将非常感激。

@Gary's Student变体,但有一些差异

 Public Function Xtractor(r As Range) As String Dim a, ary ary = Split(r.Text, " ") For Each a In ary If Len(a) = 7 And a Like "[SAC]*" Then Xtractor = a Exit Function End If Next a End Function 

产量

在这里输入图像说明

考虑:

 Public Function Xtractor(r As Range) As String Dim CH As String, L As Long ary = Split(r.Text, " ") For Each a In ary L = Len(a) CH = Left(a, 1) If L = 7 Then If CH = "S" Or CH = "A" Or CH = "C" Then Xtractor = a Exit Function End If End If Next a Xtractor = "" End Function 

在这里输入图像说明

一个正则expression式将会非常高效 – 特别是如果将它与一个变体数组而不是一个范围组合在一起。

 Sub UseaRegex() MsgBox StrChange("COB0012 WP0402 Electronic Payments - SME Consultancy [I would require COB0012]") MsgBox StrChange("DCPY708 A850035 WP161 Configuration Manager Core General (Aman Ranjan)") End Sub 

function

 Function StrChange(strIn As String) As String Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") With objRegex .Pattern = "[ACS]\w{6}" If .test(strIn) Then StrChange = .Execute(strIn)(0) Else StrChange = "No match" End If End With End Function