Excel VBA фильтрует столбец, а затем копирует каждый элемент в коллекции области в соответствующую строку

У меня есть следующая таблица Excel:

Create Date Last Active Date Age 4/12/2017 5:54 4/17/2020 8:54 5 Days 4/19/2017 7:43 #N/A 4/12/2017 20:43 #N/A 4/1/2017 23:20 4/3/2017 6:54 10 Days 4/15/2017 22:20 #N/A 

То, что я хочу сделать, это отфильтровать Age Column на # N / A, а затем скопировать каждое значение Last Active Date в ту же строку в Create Date. Кажется, достаточно легко, но я все время сталкиваюсь с проблемами. Я использую свойство SpecialCells (xlCellTypeVisible), чтобы затем выполнить для каждого из них в каждом Районе (несмежные строки), но когда я иду копировать строки, он либо копирует строки, начиная с строки 1 столбца Создать дату , что означает, что значения полностью выходят из строя, или он вызывает ошибку, указывающую, что диапазоны не совпадают. Вот код, который у меня есть до сих пор, который я вытащил с другой страницы, где говорилось о том, как это сделать, но, похоже, это не работает для меня.

  ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=8, Criteria1:= _ "#N/A" Dim lngrow As Long Dim FinalDest As Range Dim Rng As Range lngrow = Sheets("Sheet1").UsedRange.Rows.Count Set FinalDest = Sheets("Sheet1").Range("C2:C" & lngrow) Range("F2:F" & lngrow).Select For Each Rng In Cells.SpecialCells(xlCellTypeVisible).Areas Set FinalDest = FinalDest.Offset(Rng.Rows.Count) Rng.Copy Destination:=FinalDest Next Rng Application.CutCopyMode = False 

Как я могу это сделать? Я хочу отфильтровать его с помощью # N / A, а затем для каждой оставшейся отфильтрованной строки скопируйте значение в Last Active Date для создания даты (которое всегда будет пустым для этих строк) и убедитесь, что они скопированы в соответствующие строки, т. е. если строка 3 является первой отфильтрованной строкой, значение копируется в строки 3 вместо строки 2.

Вам не нужно фильтровать таблицу. У вас есть два возможных решения:

Решение 1 (без VBA): Предполагая, что Дата создания находится в формате A1:

-Вставьте новый столбец между датой создания и последней активной датой.

-Вставить эту функцию в B2 -> = IF (A2 = "", IFNA (D2, C2), A2)

-Подробная паста B2 до конца колонки

-Сообщите весь столбец B и вставьте их в качестве значений.

-Удалить столбец A

Решение 2 (с VBA):

Вы можете прокручивать каждую строку и проверять, является ли ячейка Возраст # N / A, если true (# N / A), затем вы делаете копию / вставку из ячейки Last Active Date для создания ячейки даты.

Решение 1 выполняется намного быстрее и проще. Если вы заинтересованы в решении VBA, сообщите нам об этом.

Изменить: вы всегда можете изменить следующий код для разных условий, но так как вы сказали -> Создать значение даты (которое всегда будет пустым для этих строк):

 Dim i As Long For i = 2 To Range("C1").End(xlDown).Row If IsEmpty(Cells(i, 1).Value) Then Cells(i, 1) = Cells(i, 2) End If Next i 
  • Поиск столбца в листе для значения; если обнаружены копии первых двух значений столбца и заголовка столбца
  • Фильтровать значения электронной таблицы Excel из файла
  • SUM - список остатков на счетах, за исключением определенного диапазона учетных записей
  • Excel VBA - удаление строк по нескольким значениям из одного столбчатого фильтра
  • VBA Выбор фильтрованных ячеек
  • Таблица фильтров VBA и подмножество копирования итоговых столбцов в буфер обмена
  • Excel VBA позволяет мне удалять строки на основе как форматирования, так и пустых
  • «Worksheet_Change» перезаписывает перемещенные строки и не может обрабатывать промежутки между столбцами
  • Включить значение ячейки в массив фильтров, если другое значение ячейки равно «ИСТИНА»,
  • VBA / Macro, чтобы добавить еще один colum с условиями
  • Как фильтровать данные в R или Excel?
  • Interesting Posts
    Давайте будем гением компьютера.