问与答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 If
End Function
代码主要使用了InStr函数来确定要提取的字符串前后的分隔符位置,从而提取出相应的字符串。
赞 (0)