昨天改的程序未经调试,有一些错误,现把调好的代码再发一遍,只用以下代码即行了,其他代码都不需要了。已用你给的数据测试了结果全部正确。
Function Num(Exp As String) As String
Dim lntI As Long
Dim lntN As Long
Dim strWord As String
Dim strNum As String
lntN = 1
For lntI = 1 To Len(Exp)
strWord = Mid(Exp, lntI, 1)
If strWord Like "[0-9]" And Len(Nz(strNum, "0")) < 10 Then
strNum = strNum & strWord
lntN = lntN + 1
End If
If lntN - lntI <> 1 And Len(Nz(strNum, "0")) <> 10 Then '此if语句为判断是否是连续数字,如不是原strNum清空,重新从intI位置开始判断
strNum = ""
lntN = lntI + 1
End If
Next
If Nz(strNum, "") <> "" Then
Num = InStr(1, Exp, Nz(strNum, "")) '此即为连续10个数字在字符串中的起始位置
Else
Num = 0 '如果无连续10个数字在字符串中则返回值为0
End If
End Function
上面的代码,我测试可以的呀,如果要返回数值的,就把GetNum = Nz(j, 0)改成
GetNum = Nz(Left(NumTemp, 10), 0)
无需那么复杂,用正则表达式处理即可。
点击下载此附件
真是感到无比荣幸,万分感谢各位老师的指点。
请允许我学习下先,特别是煮版的正则表达式,以前从未想过,还真的消化下。
先感谢三位老师的细心指导!
不用消化,囫囵吞枣一般调用函数便可。
洋洋洒洒写了那么多内容在提交时竟然提醒我要登录(写太长时间,超时了),写的内容丢失了,也没激情重新写,主要是对三位老师的感谢,特别是CSPA经常帮助我的。煮版的方法让我大开眼界。同时也请教个问题:{n}应该是匹配确定次数的,为什么我输入11个数字也能匹配,这样不是与{n.}的效果一样了吗?
总记录:14篇 页次:1/1 9 1 :