Фильтрация данных как часть макроса VBA


0

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

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

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

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

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


Что вы пробовали? Где это пошло не так? Удалось ли вообще удалить строку? Поделитесь своим кодом, чтобы мы могли видеть, что вы сделали.
Дэйв

Если честно, Дэйв, тем более, что я понятия не имею, с чего начать! Я понимаю, что могу создать оператор if и затем удалить строки. но я в тупик относительно того, как именно.
Miller86

Ответы:


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

Отлично, спасибо @jcbermu - очень признателен :) Если я правильно понимаю код, похоже, он должен работать. Я попробую это позже, когда у меня будет время полностью написать макрос.
Miller86
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.