如何提取一系列数字以及一个字母,然后是其他一系列数字?

时间:2019-04-24 17:01:42

标签: excel

我面临的问题是,我有一整个列的文本用_分隔,其中包含我希望能够提取但当前无法提取的像素大小。例如:

           A                                  
Example_Number_320x50_fifty_five
Example_Number_One_300x250_hundred
Example_Number_two_fifty_728x49

我尝试使用替代函数来获取有效的数字,但仅在需要以下内容时才获取数字:320x50而是0,因为我不确定如何正是这样提取出来的。如果一致,则可以轻松地LEFTRIGHT公式来获取它,但是正如您所看到的那样,数据会有所不同。

我正在寻找的结果类似于以下内容:

           A                        |          B   
Example_Number_320x50_fifty_five    |       320x50
Example_Number_One_300x250_hundred  |       300x200
Example_Number_two_fifty_728x49     |       728x49

任何帮助将不胜感激!如果需要进一步澄清,请告诉我,我会尽力解释!

-Maykid

2 个答案:

答案 0 :(得分:3)

我可能会使用正则表达式UDF完成此操作。

  • 首先,通过按 Alt + F11 打开VBE。
  • 右键单击 VBAProject > 插入> 模块

然后,您可以在模块中粘贴以下代码:

Option Explicit

Public Function getPixelDim(RawTextValue As String) As String

    With CreateObject("VBScript.RegExp")
        .Pattern = "\d+x\d+"
        If .Test(RawTextValue) Then
            getPixelDim = .Execute(RawTextValue)(0)
        End If
    End With

End Function

返回工作表,您将使用以下公式:

=getPixelDim(A1)

enter image description here


看着模式\d+x\d+,转义的d\d)表示任何数字+表示一个或更多\d ,而x只是一个文字字母x。这是您要捕获为函数的返回值的模式。

答案 1 :(得分:2)

天哪,K Davis太快了!这是具有类似概念的另一种方法。

创建一个模块并创建一个用户定义的函数,

Public Function GetPixels(mycell As Range) As String

    Dim Splitter As Variant
    Dim ReturnValue As String
    Splitter = Split(mycell.Text, "_")

    For i = 0 To UBound(Splitter)
        If IsNumeric(Mid(Splitter(i), 1, 1)) Then
            ReturnValue = Splitter(i)
            Exit For
        End If
    Next

    GetPixels = ReturnValue

End Function

在Excel工作表中,输入公式=GetPixels(A1)到B1,您将获得320x50。

如何创建用户定义的函数?

“开发者”标签

如果没有,请使用以下URL添加“开发人员”标签:https://www.addintools.com/documents/excel/how-to-add-developer-tab.html

单击突出显示的区域以转到Visual Basic for Applications(VBA)窗口。

enter image description here

创建模块

单击“插入”>“模块”,然后键入代码。

enter image description here

使用用户定义的功能

enter image description here

请注意如何调用用户定义的函数。