如何在1个单元格中指定最后一个字符(在IF内部)

时间:2019-05-24 17:04:57

标签: excel vba

我有一个代码可以复制和重写“(”和“)”之间的所有内容,但是现在我有不同类型的数据,它们的结尾不是“)”,所以我需要它在到达最后一个时停止单元格中的字符。也许这是一个愚蠢的问题,但我似乎找不到解决方法。我是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

2 个答案:

答案 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的最后一个字符