![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 21.10.2010
Сообщений: 1
|
![]()
Доброго времени суток!
Помогите, пожалуйста. Нужно обработать большой файл, по типу приложенного, а с VBA никогда дело не имел. Файл содержит список сотрудников. Мне нужно пробежаться по сотрудникам и удалять строку с сотрудником, если "Дата Уволнения" не пуста. Потом нужно убрать образовавшиеся пустые строки. И в заключении, если у сотрудника поле "Должность" пусто, вписать туда "Специалист". Заранее спасибо!!! |
![]() |
![]() |
![]() |
#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
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Можно и не "бегать" по ячейкам:
Код:
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 23.11.2006
Сообщений: 152
|
![]()
Lyrical
в крайнем случае всё это можно сделать без макросов, просто включив "автофильтр" |
![]() |
![]() |
![]() |
#5 |
Регистрация: 15.04.2012
Сообщений: 4
|
![]()
Здравствуйте, уважаемые форумчане. Подскажите, пожалуйста, пути решения такой задачи:
Есть: - массив (1 колонка), до 10 000 значений, - тип данных - текстовый, - значения могут повторятся, - среди значений есть пустые ячейки, - пустых ячеек может быть несколько подряд (до 5 шт.) - массив динамический, периодически появляются новые пустые ячейки, - ячейки влияют на другие (посторонние) ячейки, - посторонние ячейки на эти не влияют. Задача: - убрать пустые ячейки, - поскольку к ячейкам "пристегнуты" формулы, желательно не удаление строк, а сдвиг вверх, - последовательность непустых ячеек должна сохранится, - повторяющиеся ячейки не должны исчезнуть, даже если повторяются несколько раз подряд. - метод фильтрации - очень желательно не макрос, так как возможно документ потом будет открыт в Libre Office. - процедура будет повторятся десятки раз, значит желательна максимальная автоматизация и быстродействие. Пробовал: - все темы, найденные по словам "удалить пустые ячейки" в этом форуме, в гугле и на форуме "Планета Екзель". - к сожалению, почти все способы, обнаруженные здесь, основаны на удалении строк, что есть неприемлимо. - единственный 100%работающий способ, обнаруженный на Планете Екзель (способ №2), очень ресурсо- и времязатратный, занимает около 5 минут. Короче, подскажите пожалуйста, возможно ли вообще решить подобную вещь без макросов? Если да, подскажите направление плиз. р.s. я гуглил перед тем, как задать вопрос, чесное слово. Последний раз редактировалось dead_rat; 03.09.2012 в 15:03. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
Такой вариант попробуйте (без макросов!
![]() 1. нумеруем строки где-то в пустом столбце (это можно делать раз в неделю с запасом) 2. сортируем по столбцу с пустыми строками 3. удаляем вручную нумерацию у пустых строк сразу всему блоку 4. сортируем назад по нумерации. Так даже не будет удаления строк - просто они переместятся вниз (или наверх ![]()
webmoney: E265281470651 Z422237915069 R418926282008
|
![]() |
![]() |
![]() |
#7 |
Регистрация: 15.04.2012
Сообщений: 4
|
![]()
спасибо, но боюсь не подойдет, - они просто будут отображены без пустых ячеек, благодаря сортировке. А нужно физическое перемещение содержимого вверх по списку, потому что на этот список завязаны формулы.
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
Т.е. "физически" ячейки остаются на местах, просто в них меняются данные, и формулы привязаны не к данным, а к ячейкам.
Тогда я макросом делал бы так - взял данные в массив, создал аналогичный пустой массив, циклом переложил существующие данные в новый массив (без пустых "ячеек"), выгрузил новый массив на место. Быстро - доли секунды. Но это только макросом. И все существующие в этих ячейках формулы "умирают", форматирование не переносится (т.е. если нужно сохранить форматирование, то нужно код сильно усложнять, и работать будет намного (!) дольше.) Без макросов - копируете весь диапазон в новую книгу, затем сортируете так, как я написал постом выше, затем копируете полученный результат как значения назад. Остатки/хвосты внизу просто удаляете (ну или копируйте диапазон такого же размера, как и исходный).
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 04.09.2012 в 10:45. |
![]() |
![]() |
![]() |
#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 |
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
Да, что-то я не использую эту возможность - взять в массив формулы.
Видел пару раз, но не запомнил. Спасибо Сергей ![]() Т.е. формулы сохранить можно (обычные, с массивными сложнее, но если повозиться, то и их в принципе тоже можно).
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 |