|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.10.2010, 16:45 | #1 |
Новичок
Джуниор
Регистрация: 21.10.2010
Сообщений: 1
|
Удаление строк со сдвигом вверх
Доброго времени суток!
Помогите, пожалуйста. Нужно обработать большой файл, по типу приложенного, а с VBA никогда дело не имел. Файл содержит список сотрудников. Мне нужно пробежаться по сотрудникам и удалять строку с сотрудником, если "Дата Уволнения" не пуста. Потом нужно убрать образовавшиеся пустые строки. И в заключении, если у сотрудника поле "Должность" пусто, вписать туда "Специалист". Заранее спасибо!!! |
21.10.2010, 16:58 | #2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Sub Start()
For r = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1 If Cells(r, 1).Value > 0 Then Rows(r).Delete Shift:=xlUp Else If Cells(r, 3) = "" Then Cells(r, 3) = "Специалист" End If Next End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
21.10.2010, 17:12 | #3 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Можно и не "бегать" по ячейкам:
Код:
Чем шире угол зрения, тем он тупее.
|
21.10.2010, 19:24 | #4 |
Форумчанин
Регистрация: 23.11.2006
Сообщений: 152
|
Lyrical
в крайнем случае всё это можно сделать без макросов, просто включив "автофильтр" |
03.09.2012, 14:55 | #5 |
Регистрация: 15.04.2012
Сообщений: 4
|
Здравствуйте, уважаемые форумчане. Подскажите, пожалуйста, пути решения такой задачи:
Есть: - массив (1 колонка), до 10 000 значений, - тип данных - текстовый, - значения могут повторятся, - среди значений есть пустые ячейки, - пустых ячеек может быть несколько подряд (до 5 шт.) - массив динамический, периодически появляются новые пустые ячейки, - ячейки влияют на другие (посторонние) ячейки, - посторонние ячейки на эти не влияют. Задача: - убрать пустые ячейки, - поскольку к ячейкам "пристегнуты" формулы, желательно не удаление строк, а сдвиг вверх, - последовательность непустых ячеек должна сохранится, - повторяющиеся ячейки не должны исчезнуть, даже если повторяются несколько раз подряд. - метод фильтрации - очень желательно не макрос, так как возможно документ потом будет открыт в Libre Office. - процедура будет повторятся десятки раз, значит желательна максимальная автоматизация и быстродействие. Пробовал: - все темы, найденные по словам "удалить пустые ячейки" в этом форуме, в гугле и на форуме "Планета Екзель". - к сожалению, почти все способы, обнаруженные здесь, основаны на удалении строк, что есть неприемлимо. - единственный 100%работающий способ, обнаруженный на Планете Екзель (способ №2), очень ресурсо- и времязатратный, занимает около 5 минут. Короче, подскажите пожалуйста, возможно ли вообще решить подобную вещь без макросов? Если да, подскажите направление плиз. р.s. я гуглил перед тем, как задать вопрос, чесное слово. Последний раз редактировалось dead_rat; 03.09.2012 в 15:03. |
03.09.2012, 16:19 | #6 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Такой вариант попробуйте (без макросов! ):
1. нумеруем строки где-то в пустом столбце (это можно делать раз в неделю с запасом) 2. сортируем по столбцу с пустыми строками 3. удаляем вручную нумерацию у пустых строк сразу всему блоку 4. сортируем назад по нумерации. Так даже не будет удаления строк - просто они переместятся вниз (или наверх ).
webmoney: E265281470651 Z422237915069 R418926282008
|
04.09.2012, 10:00 | #7 |
Регистрация: 15.04.2012
Сообщений: 4
|
спасибо, но боюсь не подойдет, - они просто будут отображены без пустых ячеек, благодаря сортировке. А нужно физическое перемещение содержимого вверх по списку, потому что на этот список завязаны формулы.
|
04.09.2012, 10:16 | #8 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Т.е. "физически" ячейки остаются на местах, просто в них меняются данные, и формулы привязаны не к данным, а к ячейкам.
Тогда я макросом делал бы так - взял данные в массив, создал аналогичный пустой массив, циклом переложил существующие данные в новый массив (без пустых "ячеек"), выгрузил новый массив на место. Быстро - доли секунды. Но это только макросом. И все существующие в этих ячейках формулы "умирают", форматирование не переносится (т.е. если нужно сохранить форматирование, то нужно код сильно усложнять, и работать будет намного (!) дольше.) Без макросов - копируете весь диапазон в новую книгу, затем сортируете так, как я написал постом выше, затем копируете полученный результат как значения назад. Остатки/хвосты внизу просто удаляете (ну или копируйте диапазон такого же размера, как и исходный).
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 04.09.2012 в 10:45. |
04.09.2012, 11:35 | #9 | |
Участник клуба
Регистрация: 02.05.2010
Сообщений: 1,390
|
Цитата:
Тут сегодня делал похожее: http://www.cyberforum.ru/vba/thread645651.html Вместо: a = r.Formula можно написать: a = r.Formular1c1 И будет счастье
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728 |
|
04.09.2012, 11:54 | #10 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Да, что-то я не использую эту возможность - взять в массив формулы.
Видел пару раз, но не запомнил. Спасибо Сергей Т.е. формулы сохранить можно (обычные, с массивными сложнее, но если повозиться, то и их в принципе тоже можно).
webmoney: E265281470651 Z422237915069 R418926282008
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
макрос для перемещения определенных строк вверх | MrGB | Microsoft Office Excel | 2 | 11.07.2010 20:04 |
перенос строк удаление ненужных строк | HelperAwM | Microsoft Office Excel | 5 | 26.06.2010 18:42 |
Удаление элемента массива со сдвигом последующих | beregok | Общие вопросы C/C++ | 11 | 09.01.2009 17:11 |
Удаление строк | Dr.Badnezz | Общие вопросы Delphi | 1 | 07.10.2008 15:22 |
удаление строк | Dime_x | Microsoft Office Excel | 2 | 07.10.2008 13:38 |