Но он правильно работает только если выделена ячейка "H1". Так подозреваю, что метод Select тут неуместен, как и везде. Есть способ его заменить, копируя при этом только ячейки со значениями?
Добрый день. У вас в коде задается диапазон для копирования через указание верхней левой и нижней правой ячейки
Код
Range("H1", Selection.End(xlDown))
, где верхняя левая задана явно (Н1), а нижняя правая ищется от выделенной ячейки методом End с направлением "вниз" (xlDown). Вместо Selection, если всегда копируемый диапазон расположен в столбце Н можно Selection заменить на явное указание той же ячейки Н1 в квадратных скобках:
IvanMantrov, доброго утра! 1. Определение последней строки исходного диапазона: я бы выбрал вар 2 или 3 в вашем случае. 2. Перенос всего диапазона в нужное место.
3. Выделение пустых ячеек
Код
Selection.SpecialCells(xlCellTypeBlanks).Select
потом удаляйте как хотите - со сдвигом вверх или строки целиком
P.S.: 1. могу ошибаться, но, если копируется 1 столбец, в котором есть пустые ячейки, то .End(xlDown) вернёт диапазон до первой пустой 2. Если допускается вставить диапазон с пропусками, а потом удалить их (то есть можно не вставлять сразу отфильтрованный), то это должно быть побыстрее цикла. Опять же: зависит от количества строк - на небольших объёмах разница будет незаметна
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Можно написать Range("H1"), можно [h1]. Если просто "Н1" и потом применять методы - то как название диапазона не воспринимает, воспринимает, как строку.