问与答106:如何自定义一个LAMBDA函数来提取两个字符之间的字符串?

excelperfect

引言:今天的问题整理自MrExcel.com的论坛,这个大名鼎鼎的论坛不用多说,喜欢Excel的人都应该知道。

Q:我有一些带有分隔符的数据,我试图使用LAMBDA函数从原数据单元格中提取指定分隔符之间一些字符串。(在Office365中有一个新函数LAMBDA,对于没有这个版本的用户来说,使用不到。这里使用VBA自定义了一个LAMBDA函数)

例如,在某单元格中的数据为:

D6PQT2 | 0001934 |Excavation of natural soil | 005

LAMBDA函数可以在其中输入分隔符(本例中为“|”),指定提取分隔符之前或之后的字符串,例如:

LAMBDA(d, i, b, s)

其中,

d代表分隔符。

I指定提取的字符串相邻的分隔符的位置。

b指定提取分隔符之前还是之后的字符串,1代表分隔符之前,2代表分隔符之前。

s指定字符串所在的单元格。

对于示例数据,公式:

=LAMBDA(“|”, 2, 1, cell)

返回字符串:

“0001934”

A:下面是自定义的LAMBDA函数的代码:

Function Lambada(d As String, i As Integer, b AsInteger, s As Range) As String Dim x As Integer, z As Integer, y As Integer Dim ii As Integer, xx As Integer, zz As Integer, yy As Integer Dim t As String y = 1 For x = 1 To i z =InStr(y, s.Value, d, vbBinaryCompare) If z> 0 Then y= z + 1 Else z= 0 End If Next If z >0 Then ii =IIf(b = 1, i - 1, i + 1) yy =1 For xx = 1 To ii zz = InStr(yy, s.Value, d, vbBinaryCompare) If zz > 0 Then yy = zz + 1 Else zz = IIf(b = 1, 0, Len(s.Value) + 1) End If Next End If If b = 1 And z > 0 Then Lambada = Trim(Mid(s.Value, zz + 1, z - zz - 1)) ElseIf b= 2 And zz > 0 Then Lambada = Trim(Mid(s.Value, z + 1, zz - z - 1)) Else Lambada = '' End IfEnd Function

代码主要使用了InStr函数来确定要提取的字符串前后的分隔符位置,从而提取出相应的字符串。

(0)

相关推荐