VBA для удаления строк из группы промежуточных итогов, когда ячейки совпадают

У меня есть лист Excel с промежуточными итогами, который я использую для согласования учетной записи. Промежуточные итоги находятся в столбцах F и H. Когда они сбалансируются, я хочу удалить все строки в этой группе промежуточных итогов.

На этом листе формула промежуточного итога включает строки, которые она вычисляет (в этом случае я хочу удалить из строк 104-109, поэтому могу получить 104 из формулы =SUBTOTAL(9,F104:F108), поэтому я пытался извлечь первую строку, а затем передать ее в диапазон удаляемых строк.

ОБНОВЛЕНИЕ: изменен скрипт

Упростил, но по-прежнему получаю несоответствие типов в строке Rows(y & ":" & i).EntireRow.Delete.

Sub QuickKill()
Dim i
Dim y

For i = 1910 To 1 Step -1
    If Range("F" & i).Value = Range("H" & i).Value Then
        y = Mid(Range("F" & i).Formula, 14, CInt(Len(i)))
        Rows(y & ":" & i).EntireRow.Delete
    End If
Next i

Конец сабвуфера

Любая помощь / руководство очень ценится! Заранее спасибо.

Вот макет листа Excel


person Anthony Homer    schedule 23.09.2016    source источник
comment
Что такое сообщение об ошибке?   -  person Brian    schedule 23.09.2016
comment
Пишет "Ошибка времени выполнения 5". Неправильный вызов процедуры или аргумент. Если я заменю x на 2,3 или 4, это говорит о несоответствии типов. Это определенно проблема в этой строке   -  person Anthony Homer    schedule 23.09.2016
comment
Я думаю, что метод Range.DirectPrecedents должен получить диапазоны, указанные в формуле   -  person Slai    schedule 23.09.2016
comment
Я не уверен, как использовать это в этом случае, потому что диапазон - это именно то, что я пытаюсь извлечь из строки формулы, сгенерированной функцией промежуточного итога в Excel.   -  person Anthony Homer    schedule 23.09.2016
comment
Вы можете попробовать что-то вроде MsgBox Range("F" & i).DirectPrecedents.Address   -  person Slai    schedule 23.09.2016


Ответы (1)


Третий параметр MID не может быть отрицательным. Убедитесь, что вы не передаете отрицательное число для x. Есть несколько проблем с преобразованием типов. Начните с удаления слова «до тех пор, пока» из ваших туманных утверждений. Я думаю, что в этот момент вы обнаружите, что проблема в том, что вы передаете Rows() недопустимый адрес для строки.

person David Cram    schedule 23.09.2016
comment
Я подтвердил. Он варьируется от 2 до 4 в зависимости от того, в какой строке находится сценарий. - person Anthony Homer; 23.09.2016
comment
это ошибка несоответствия типа? я обновил свой ответ выше - person David Cram; 23.09.2016
comment
Пишет "Ошибка времени выполнения 5". Неправильный вызов процедуры или аргумент. Если я заменю x на 2,3 или 4, это сработает. Это определенно проблема в этой строке: - person Anthony Homer; 23.09.2016
comment
Проблема в том, что скрипт ломается, когда он переходит от 4-значного числа строк к 3 и 2. - person Anthony Homer; 23.09.2016
comment
Он говорит о несоответствии типов, когда я жестко кодирую 2, 3 или 4 вместо x - person Anthony Homer; 23.09.2016
comment
Я изменил его, чтобы ссылаться на длину подсчета строк, что упростило, но я все еще получаю несоответствия типов. Ой, я не хотел ломать поле комментария, скопировав сюда код. Я отредактирую вопрос выше. - person Anthony Homer; 23.09.2016