Как указать последний символ в 1 ячейке (Inside IF) - PullRequest
0 голосов
/ 24 мая 2019

У меня есть код, который копирует и переписывает все, что между "(" и ")", но теперь у меня есть другой тип данных, которые не заканчиваются на ")", поэтому мне нужно остановить его, когда он достигнет последнегоперсонаж в клетке.Может быть, это глупый вопрос, но я не могу найти, как решить мою проблему.Я студент и полностью новичок в 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 ]

1 голос
/ 24 мая 2019

В вашей конкретной реализации, одним из вариантов является изменение вашего цикла 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)

Последнее замечание: если ваши шаблоны становятся все более и более сложными, рассмотрите возможность рассмотрения и реализации регулярных выражений.

0 голосов
/ 24 мая 2019

Вы можете использовать Right(LookInHere, 1), чтобы получить последний символ LookInHere

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...