我面临的问题是,我有一整个列的文本用_
分隔,其中包含我希望能够提取但当前无法提取的像素大小。例如:
A
Example_Number_320x50_fifty_five
Example_Number_One_300x250_hundred
Example_Number_two_fifty_728x49
我尝试使用替代函数来获取有效的数字,但仅在需要以下内容时才获取数字:320x50
而是0
,因为我不确定如何正是这样提取出来的。如果一致,则可以轻松地LEFT
或RIGHT
公式来获取它,但是正如您所看到的那样,数据会有所不同。
我正在寻找的结果类似于以下内容:
A | B
Example_Number_320x50_fifty_five | 320x50
Example_Number_One_300x250_hundred | 300x200
Example_Number_two_fifty_728x49 | 728x49
任何帮助将不胜感激!如果需要进一步澄清,请告诉我,我会尽力解释!
-Maykid
答案 0 :(得分:3)
我可能会使用正则表达式UDF完成此操作。
然后,您可以在模块中粘贴以下代码:
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)
看着模式\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)窗口。
创建模块
单击“插入”>“模块”,然后键入代码。
使用用户定义的功能
请注意如何调用用户定义的函数。