Итерация по столбцу в Excel и удаление нескольких строк на основе значений в столбце - PullRequest
0 голосов
/ 05 апреля 2020

Я работаю в роли бухгалтера. Мне часто нужно удалять строки из файла Excel, где значение обнуляется с другой строкой. 1000 строк из 10000 могут в конечном итоге быть удалены.

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

Я написал некоторый код для выполнения некоторых данных с 50 строками, однако он не работает:

Sub delete_row()

    Dim activerow As Integer

    activerow = 2

    Do

        If ActiveSheet.Cells(activerow, 13).Select + ActiveCell.Offset(1, 0) = 0 Then

            Rows("activerow:activerow + 1").Select
            Selection.Delete Shift:=xlUp



        Else: activerow = activerow + 1

        End If

    Loop Until activerow = 50


End Sub

Некоторый контекст: я новичок в VBA и программировании. Я понимаю некоторые основные понятия c. То, что я знаю, я узнал, посмотрев онлайн и из учебника (Финансовое моделирование, Саймон Беннинга). Я также начал курс Python по Udemy

. Я использую эту пандемию c как возможность попробовать себя в программировании и повысить свой уровень владения VBA и Excel. Каков следующий шаг к тому, чтобы заставить этот код работать? Понятно ли из этого кода, что есть понятия, которые я не понимаю (я бы так себе представил)? Буду признателен, если кто-нибудь поможет мне в правильном направлении и порекомендует любые полезные учебные материалы или предметы для чтения!

Спасибо:)

1 Ответ

1 голос
/ 05 апреля 2020

как начало (пояснения в комментариях):

Sub delete_row()
    Dim iRow As Long ' in Excel sheet you can handle up to 1 million row
                     ' Integer type reaches up to some 32 thousands
                     ' Long type allows for far more

    For iRow = Cells(Rows.Count, 13).End(xlUp).Row To 2 Step -1 ' step backwards from column M (column index 13) last not empty cell row index to 2
        If Cells(iRow, 13).Value + Cells(iRow + 1, 13) = 0 Then Cells(iRow, 13).EntireRow.Delete Shift:=xlUp
    Next
End Sub

при удалении строк вы всегда должны начинать с последней, а затем с l oop, чтобы не пропустить ни одной строки

Вы действительно должны Select что-нибудь (посмотрите на Эта ссылка )

...