Предположим, у меня есть Рабочая тетрадь (Report.xlsx), и в этой рабочей тетради есть другой лист. На каждом листе у меня есть имя столбца B_Code. Используя фильтр в B_Code, я хочу отдельную рабочую книгу с каждым листом в нем.

Так же, как на рисунке 1, вы можете увидеть, что лист 1 имеет B_Code.

Точно так же в Листе 2 у меня также есть B_Code.

Теперь я хочу, чтобы данные 001, то есть Рам на листе 1, а также на листе 2 в той же книге, что и имена файлов 001 и 002, т.е. Хари на листе 1, а также на листе 2 в другой книге, как имя файла 002 и так далее.

Может кто-нибудь помочь мне решить эту проблему с помощью VBA.

1 ответ1

0

Сохраните копию файла перед началом удаления. Затем вы можете использовать код VBA, который удаляет строку, когда ячейка (rngCell) имеет значение, отличное от 001 или B_Code или пробел.

        If rngCell.Value <> "001" _
            And rngCell.Value <> "B_Code" _
            And rngCell.Value <> "" _
            Then
                rngCell.EntireRow.Delete
        End If

Поместите этот код в цикл For чтобы проверить все ячейки в столбце A. Поскольку вы удаляете строки, запустите цикл в последней строке и поднимитесь с Step -1 . Код, который находит последнюю строку (lngLastRowNumber), объясняется в разделе Поиск последней использованной ячейки в диапазоне .

    lngLastRowNumber = Cells(Rows.Count, "A").End(xlUp).row
    For lngRowNumber = lngLastRowNumber To 1 Step -1
        Set rngCell = Columns("A").Rows(lngRowNumber)
        If rngCell.Value <> "001" _
            And rngCell.Value <> "B_Code" _
            And rngCell.Value <> "" _
            Then
                rngCell.EntireRow.Delete
        End If
    Next lngRowNumber

Чтобы удалить строки на каждом рабочем листе, поместите этот цикл в другой цикл « For Each рабочего листа».

Пишите о любых проблемах, которые у вас есть, когда вы пишете и тестируете код.

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