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函数来确定要提取的字符串前后的分隔符位置,从而提取出相应的字符串。 |
|
来自: hercules028 > 《VBA》