Код VBA для удаления строк на основе значения ячейки, которые обновляются динамически - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть лист, где мне нужно удалить строки на основе index значение столбца, вывод которого формулы.

Это данные, над которыми я работаю:

enter image description here

Вот что имеют данные:

Каждый идентификатор задания (столбец A) имеет 2 значения: True и False, назначенные разным владельцам

Теперь в столбце F есть данные, указанные для выполнения определенных условий

Каждый раз, когда идентификатор задания удаляется (обе строки задания), последние значения в столбце F продолжают обновляться до «Да / Нет» на основе условия

Чего я пытаюсь достичь:

  • Чтобы проверить строки по одной за раз и сдвинуть / удалить две строки (задание) в нижней части, когда последний столбец имеет значение «Нет»
  • Обновления данных в последнем столбце по мере удаления или смещения
  • Таким образом, макрос должен быть динамическим c

Вот код, который я пробовал:

Sub delete()

    Dim i As Integer
    Dim LastRow As Integer
    LastRow = Range("A").End(xlUp).Row

    For i = 2 To LastRow
        If Range("F" & i).Value = "No" And Range("A" & i).Value = Range("A" & i + 1).Value Then
            Rows(i & ":" & (i + 1)).Cut
            Range("A").End(xlDown).Offset(1, 0).EntireRow.Insert
            Application.CutCopyMode = False
        End If
    Next

End Sub

Это не похоже на работу. Часть удаления работала частично, где я использовал следующие строки кода:

 Rows(i & ":" & (i+1)).Select
        Selection.delete Shift:=x1Up

1 Ответ

0 голосов
/ 17 февраля 2020

Я не хочу обидеть, но я не вижу преимуществ вашей системы. Пожалуйста, подумайте об этом.

  1. Создайте вспомогательный столбец и введите эту формулу в строку 2. =SUM(INDIRECT(ADDRESS(ROW()-MOD(ROW(),2),5)&":"&ADDRESS(ROW()+1-MOD(ROW(),2),5)))*(IF(AND(INDIRECT(J2)>50,INDIRECT(K2)>50),2,1))+(ROW()/10000)
  2. Скопируйте до конца листа.
  3. Сортируйте по этому column.
  4. Скрыть помощника.

Обратите внимание, что формула предназначена для вычисления двух последовательных строк, первая из которых находится в строке с четным числом, а вторая - с неравной число. Если ваша строка 2 используется для чего-то другого, формулу необходимо настроить, чтобы начать в строке 3, или изменить по-другому, чтобы начать в строке 4.

И вот как это работает. Это добавляет два повторения (столбец E). Если они оба выше 50, результат умножится на два. Это обеспечит сортировку всех строк с двумя значениями выше 50 над всеми остальными. Наконец, добавляется номер строки / 10000. Если в ваших данных более 10000 строк, сделайте это число 100 000. Дело в том, что результат этого деления всегда должен быть меньше 1, чтобы не мешать оценкам. Это дополнение будет работать как средство разрешения конфликтов, когда другие оценки идентичны, и будет гарантировать, что последовательность ваших двух строк останется неизменной после сортировки.

Конечно, этот вид создаст список, который намного больше чувствительнее, чем просто продвигать худших исполнителей до конца. Это также оставит вашу формулу в столбце F без изменений. И последнее преимущество заключается в том, что критерии в столбце помощника могут быть точно настроены, чтобы лучше соответствовать вашим целям.

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