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

Это легко обойти при обновлении отчета вручную, используя фильтр, отфильтровывая данные и удаляя соответствующие данные. Однако я пытаюсь автоматизировать файл, поэтому мы можем просто нажать кнопку и обновить ее, не тратя на это 20-30 минут.

Поэтому я хочу сделать, но до сих пор не получилось, - VBA удалить каждую строку, где столбец содержит определенную строку.

Это как часть более крупного макроса, который обновляет данные, исправляет столбец дат, используя текст в столбцы, удаляет раздел данных, вычисляет формулы в таблице KPI, а затем сохраняет его как дату этой недели.

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

1 ответ1

1

Этот подпункт удаляет всю строку (и) листа, когда значение, определенное переменной thestring, находится в столбце, определенном переменной thecolumn

Sub deleterows()
    Dim a As Application
    Dim wkb As Workbook
    Dim wks As Worksheet
    Dim DataRange As Range
    Set a = Application
    Set wkb = ThisWorkbook
    Set wks = wkb.ActiveSheet
    wks.Application.ScreenUpdating = False
    thecolumn = 2 'this have to be changed to the desired column
    thestring = "some text" ' this have to be changed too
    reviewing = True
    visitrow = 1
    While reviewing = True
        visitrow = visitrow + 1
        If wks.Cells(visitrow, 1) = "" Then
            reviewing = False
        End If
        celldata = wks.Cells(visitrow, thecolumn)
        If IsNumeric(celldata) = True Then
            celldata = Trim(Str(celldata))
        End If
        If celldata = thestring Then
            wks.Rows(visitrow).Delete
            visitrow = visitrow - 1
        End If
    Wend
   wks.Application.ScreenUpdating = True
   Message = MsgBox("Finished!", vbOKOnly)
End Sub

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