Есть шарящие за макросы в экселе? [решено]

Привет! Пытаюсь облегчить себе работу и подготовить выданную таблицу, зачистив ненужные столбцы, но что-то не понимаю, в чем вылезает ошибка. Пробовала чисто интуитивно разные способы, но ни один не сработал — либо чистит неверно, либо выпадает в ошибку "данная команда неприменима для перекрывающихся диапазонов".

В целом: удаляю первые две строки, ставлю фильтр, а дальше выпиливаю лишние столбцы. Ноооооо на удалении отсылает меня в дебаггер.

Rows("1:2").Select Selection.Delete Shift:=xlUp Rows("1:1").Select Selection.AutoFilter Range("E:AH,AJ:AK,AN:AN,AP:AQ,AS:AX,AZ:BC,BE:BS").Select Selection.Delete Shift:=xlToLeft End Sub
8
33 комментария

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

2
Ответить

спасибо, я об этом думала, но объединенные встречаются только в первых двух строках, которые удаляю как раз первым же делом.
или нужно делать какую-то задержку, чтобы макрос понял, что этих объединенных уже нет?
или надо всё равно сначала пройтись какой-нибудь командой на разъединение?

ломаю голову, потому что вручную выходит всё, даже через запись макроса, а как запускаю его на свежеоткрытой таблице — не пускает.

Ответить

Разделить селекцию range на несколько, если ты именно столбцы удаляешь

DeleteRange "E:AH"
DeleteRange "AJ:AK"
и так далее
Sub DeleteRange(r)
Range(r).Select
Selection.Delete Shift:=xlToLeft
End Sub

и удалять столбцы по очереди - не? нужно обязательно весь этот огромный range за раз выделить и удалить?

1
Ответить

только в обратном порядке, удалять столбцы справа налево, иначе учитывать сдвижку столбцов

2
Ответить

И еще формат файла надо зырить и что лежит в удаляемых столбцах

Здесь нужно быть аккуратным: если таблица сдержит помимо пустых строк, строки с заполненными и пустыми ячейками, то часть ячеек перескочит со своих строк на другие, что испортит таблицу. Если таблица в формате EXCEL 2007 , то EXCEL не даст испортить таким образом таблицу: появится сообщение «Данная команда неприменима для перекрывающихся диапазонов».

СОВЕТ: Стоит помнить, что ячейки, содержащие формулы (даже если это ссылки на пустые ячейки), не считаются пустыми по определению.

1
Ответить

Разделив удаление столбцов по одному range, будет проще найти хотя бы косячный range, чтобы к нему присмотреться.

Ну и как правильно подсказали, удаление делать справа налево.

1
Ответить

и нет, не обязательно за раз, но я, во-первых, хотела облегчить код, во-вторых, запуталась со сдвигом столбцов: то ли после каждого удаления новые имена ставить, то ли первоначальные.. и что-то ни один вариант не удовлетворял.

Ответить