我有一个代码可以复制和重写“(”和“)”之间的所有内容,但是现在我有不同类型的数据,它们的结尾不是“)”,所以我需要它在到达最后一个时停止单元格中的字符。也许这是一个愚蠢的问题,但我似乎找不到解决方法。我是vba的学生和新手(5天前我不知道vba是什么...)也为我的英语不好而感到抱歉。
我尝试搜索(在这里是google,youtube),但是找不到我需要的东西
'zaciatok=start koniec=end dlzka=length
Do While Mid(LookInHere, y, 1) <> ""
If Mid(LookInHere, Z, 1) = "(" Then
zaciatok = Z
End If
If Mid(LookInHere, y, 1) = ")" Then
koniec = y
dlzka = (koniec - 1) - zaciatok
dlzka = Abs(dlzka)
SplitCatcher = Mid(LookInHere, zaciatok + 1, CStr(dlzka))
MsgBox SplitCatcher
End If
y = y + 1
Z = Z + 1
Loop
答案 0 :(得分:1)
在您的特定实现中,一种选择是修改Do While ...
循环以同时测试字符串的长度。那行看起来像:
Do While Mid(LookInHere, y, 1) <> "" And y < Len(LookInHere)
该修改告诉语句,当迭代变量y
超过语句的长度时,它应该终止循环。
另一种选择是将其从Do While
循环更改为For
循环。它将显示为:
For i = 1 to Len(LookInHere)
MsgBox Mid(LookInHere, i, 1)
'Input your logic here
Next i
问题在于这些版本中的每个版本效率相对较低,它们会遍历字符串中的每个字母并执行计算。考虑使用内置的Excel函数。 Instr
返回字符的位置,如果找不到,则返回零。例如,Instr("Abcdef", "b")
将返回数字2,而Instr("Abcdef", "k")
将返回零。您可以用这两个函数调用替换整个循环。
Z = Instr(LookInHere, "(")
y = Instr(LookInHere, ")")
If y = 0 Then y = Len(LookInHere)
最后一点:如果您的模式开始变得越来越复杂,请考虑查看并实现正则表达式。
答案 1 :(得分:0)
您可以使用Right(LookInHere, 1)
来获取LookInHere
的最后一个字符