繁体   English   中英

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

[英]How can I extract a specific Letter(s) and numbers from a text string via VBA Or excel Formula

我想从位于excel列内的较大字符串中提取文本和数字的组合。

我必须使用的常量是每个文本字符串将

  • 以A,C或S开头,并且
  • 总是7个字符长
  • 我要提取的字符串的位置有所不同。

例如;

COB0012 WP0402电子支付-中小企业咨询
DCPY708 A850035 WP161 Configuration Manager核心常规(Aman Ranjan)A614019 WP0302 SQL 2005升级项目– WFCopiesChq-下一阶段SUTP016 EPM培训T2

输出量

COB0012
A850035
SUTP016

我了解标准的向左/向右/中/搜索功能,但是我的数据集很大,所以我想创建一些可以自动执行此过程的东西。 (1000行)

我以为UDF函数可以解决问题,但是我对UDF的了解非常基础。

任何帮助将非常感激。

考虑:

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

在此处输入图片说明

@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

输出

在此处输入图片说明

正则表达式将非常有效-尤其是将其与变量数组而不是范围结合使用时。

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 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM