Найти строку в ячейке с помощью VBA

Я уже день схожу с ума от этого, искал все подряд и, возможно, пытаюсь быть слишком милым так что я совсем застрял.

Я пытаюсь выполнить простую операцию if then

Если ячейка содержит "%", я бы хотел, чтобы она делала одно, а если нет, то другое. По непонятным мне причинам у меня не получается. Я явно взял пару идей откуда-то еще, но все еще не могу заставить их работать.

Усложняющие факторы. Я не хочу запускать это для всего столбца, а только для таблицы, поэтому он встроен в более крупную подсистему с использованием лотов или относительных ячеек ActiveCell. Я никогда не знаю, где в столбце А я наткнусь на «% изменения», поэтому диапазон всегда должен быть переменным. Я хочу, чтобы VBA/VBE делал что-то другое, когда встречал ячейку со знаком «%». SO

Вот как выглядят необработанные данные

Initial Value (6/30/06)

Value (12/31/06)

Net Additions (9/30/07)

Withdrawal (12/07)

Value (12/31/07)

Withdrawal (2008)

Value (12/31/08)

Addition (8/26/09)

Value (12/31/09)

Value (12/31/10)

Value (12/30/11)

Value (3/31/12)

% Change 1st Quarter

% Change Since Inception

Но когда я запускаю следующее, он застревает в плохом цикле, где он должен был выйти в «Если тогда», а не в «Иначе» часть суб.

Sub IfTest()
 'This should split the information in a table up into cells
 Dim Splitter() As String
 Dim LenValue As Integer     'Gives the number of characters in date string
 Dim LeftValue As Integer    'One less than the LenValue to drop the ")"
 Dim rng As Range, cell As Range
 Set rng = ActiveCell

Do While ActiveCell.Value <> Empty
    If InStr(rng, "%") = True Then
        ActiveCell.Offset(0, 0).Select
        Splitter = Split(ActiveCell.Value, "% Change")
        ActiveCell.Offset(0, 10).Select
        ActiveCell.Value = Splitter(1)
        ActiveCell.Offset(0, -1).Select
        ActiveCell.Value = "% Change"
        ActiveCell.Offset(1, -9).Select
    Else
        ActiveCell.Offset(0, 0).Select
        Splitter = Split(ActiveCell.Value, "(")
        ActiveCell.Offset(0, 9).Select
        ActiveCell.Value = Splitter(0)
        ActiveCell.Offset(0, 1).Select
        LenValue = Len(Splitter(1))
        LeftValue = LenValue - 1
        ActiveCell.Value = Left(Splitter(1), LeftValue)
        ActiveCell.Offset(1, -10).Select
    End If
Loop
End Sub

Любая помощь приветствуется, спасибо!

6
задан Community 9 July 2018 в 18:41
поделиться