В опубликованном примере, если для Джейн и Дэвида меня интересуют только строки с "Всего" в столбце B, как удалить строки, которые не содержат "Всего" в столбце B. Я хотел бы применить эту функцию к несколько листов в рабочей книге.

пример

3 ответа3

0

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

Конечно, это Excel, вы можете сделать каждый немного по-другому, немного больше работы. Например, вставьте столбец "помощник" в удобное для вас место (например, рядом с интересующим вас столбцом) и быстро напишите тест IF для значения со знаком «», если он не найден. Затем скопируйте или заполните весь столбец формулой (каждый проверяет ячейку этой строки), сортируйте по вспомогательному столбцу, и все строки, которые вы хотите удалить, объединены, а не в две группы. Какой из ваших вариантов кажется проще в ваших обстоятельствах, и предпочтение - ваш путь.

Если вам нужен макрос для этого, следуйте той же концепции. В макросе просто проверьте первую ячейку в интересующем вас столбце на предмет значения, и, если он НЕ найден, удалите макрос из этой строки, затем выполните цикл до достижения конца данных. Если ни одна ячейка не может быть пустой в этом столбце, вы можете проверить ее на пустоту и выйти, когда найдете. Но ... если клетка может быть пустой, вам нужно попробовать что-то еще. Любая из множества вещей может работать в зависимости от вашей таблицы и характеристик других ячеек, но вы также можете просто запустить макрос в последней возможной ячейке, выбранной вашим мозгом, и работать вверх (включая проверку номера строки каждый время, так что вы можете остановиться, скажем, на строке 2, если у вас есть заголовки, вместо удаления строки заголовка и последующего постоянного цикла в первой строке).

Или объединить два. Сортируйте данные в этом столбце в макросе, найдите первое вхождение нужного значения, удалите все строки DATA выше этого значения, затем проверьте до первого сбоя и удалите все строки после этого.

Так много способов. Мой подход был бы самым первым для моей собственной работы. Для таблицы, которую я даю кому-то другому, я бы изменил это, пытаясь автоматизировать его. Или ... зависит от пользователя, знающего против новичка, босса против Джимми из уборочной. Такого рода вещи.

0

Я хотел бы предложить MACRO, который лучший и самый быстрый способ удалить все строки из всех листов, не содержит текста ВСЕГО в конкретном столбце B.

Sub Delete_Rows()

Dim rng As Range, cell As Range, del As Range
Dim sht As Worksheet

For X = 1 To 10
    Set sht = Sheets(X)
    Set del = Nothing

    Set rng = Intersect(sht.Range("B1:B9"), sht.UsedRange)

    For Each cell In rng.Cells

    If (cell.Value) <> "Total" Then
        If del Is Nothing Then
            Set del = cell
        Else
            Set del = Union(del, cell)
        End If
    End If

    Next cell

    If Not del Is Nothing Then del.EntireRow.Delete
Next X

End Sub

Как это устроено:

  • На любом листе нажмите Alt+F11 чтобы открыть VB Editor затем Copy & Paste этот код как стандартный модуль.
  • Перед тем, как запустить макрос, убедиться , что Строка поиска Всего доступно в диапазоне B1:B9 во всех листах, откуда вы пытаетесь удалить строки.

Замечания:

  • For X = 1 to 10 указано, что MACRO будет искать TOTAL в 10 Worksheets , которые можно редактировать.

  • Вы также можете настроить / изменить диапазон поиска B1:B9 и Total строк, как вам нужно.

0

Спасибо за вашу помощь. Я закончил тем, что сделал следующее:

  1. Используйте условное форматирование, чтобы выделить все ячейки с повторяющимися именами.
  2. Сортировка ячеек по цвету, затем сортировка по названию яблока
  3. Удерживая клавишу "Shift", выделите все строки, содержащие выделенную ячейку, для которой в столбце "яблоко" не было "Всего".

Этот процесс был относительно быстрым для больших наборов данных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .