VBA - Фильтровать по текстовому значению в массиве, определить, возвращает ли фильтр пустое значение, скопировать непустые строки в другой именованный лист;LOOP - PullRequest
0 голосов
/ 09 октября 2019

Здравствуйте. Я прошу прощения, если мой заголовок был не очень хорошо сформулирован, но я постараюсь уточнить здесь более подробно.

Краткая справка / Что я знаю

Я не программист, но я уже второй год учусь в школе по специальности СНГ;Мой единственный опыт в программировании - это объектно-ориентированный класс программирования и базовый самообучаемый Excel VBA с использованием Google и средства записи макросов, и я учусь, чтобы помочь автоматизировать определенные процессы и рутину на работе.

Что я пытаюсь выполнить

  • Теоретически этот процесс должен повторяться ровно 5 раз
  • Создать автофильтр по текстовому значению на рабочем листе «Мастер» (Лист 2) в столбце "D"
  • Текстовое значение будет основано на массиве (" HQ ", " MTV ", " OTV "," RTD", Все остальное не выделено желтым )
  • Есть также 5 готовых листов с маркировкой (" CORP"," MTV"," OTV"," RTD"," Исключения")
  • Для каждого текстового значения вмассив, фильтр и определить, если видимая строка возвращается.
  • ЕСЛИ ТАК

    • 1. Выделите строки желтым;
    • 2. Копировать строки (без выделения) на другой лист в RC (2,0);
    • 3. В столбце A перейти к последней строке + смещение на (2,0)) и введите значение «ВСЕГО:»;
    • 4. Смещение выделения на (0,1) и введите формулу COUNTA приложения для подсчета суммы строк минус заголовок (строка 1)
  • ЕСЛИ ВОЗВРАЩАЕТСЯ НЕТ ВИДИМЫХ СТРОК Переходить к следующему элементу в массиве
  • Как только массив завершен, все, что НЕ подсвечено желтым, должно быть скопировано& вставляется на лист с именем «Исключения», начиная с A2
  • . Итоги, созданные на других листах («CORP», «MTV», «OTV», «RTD»), затем должны автоматически вводиться в готовуюЛист «Итоги» (который, я думаю, можно сделать с помощью VLOOKUP)

Вот что я имею в виду на странице итогов

Here's what I'm talking about regarding the totals page

Что я уже пробовал / С чем я борюсь

Итак, я попытался использовать макро-рекордер примерно 5 различными способами, чтобы попытаться выяснить,это, и я могу очень легко сделать это вручную и обман мой путь через, но я хочу сделать тего код полностью автономен и динамичен, и я думаю, что я слишком усложняю его. Создание рабочих листов и автоматическое форматирование каждой страницы достаточно просты, и кажется, что в остальном это всего лишь простая процедура filter> copy> paste.

Вот что у меня пока есть -

Sub AutoFilterFormat()

Range("A1:D1").Select
    Selection.AutoFilter 'cancel filter already in place on header range
    ActiveSheet.Range("$A$1:$D$212").AutoFilter Field:=4, Criteria1:="=*HQ*", _
    Operator:=xlAnd 'filter that will be used for the following array:(HQ, CORP, MTV, OTV, RTD, <>)

Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select '
    Selection.Copy
Sheets("CORP").Select
    Range("A1").Select
        ActiveSheet.Paste
    Range("A1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.End(xlDown).Select
        Selection.Offset(2, 0).Activate
        Selection.Value = "TOTAL:"
        Selection.Offset(0, 1).Activate
        '
        'application COUNTA formula to count each non-blank row, excluding header A1:D1
        '

End Sub

Что я ищу

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

  • Find the LastRowТОЛЬКО видимых ячеек из автофильтра
  • Какой цикл использовать с массивом
  • Если нет результатов автофильтра, перейдите к следующему элементу в массиве

СпасибоВы за ваше время, и я прошу прощения, если моя проблема была слишком длинной или если я сошел с какой-либо степени неуместности.

Еще раз спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...