|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Макрос в Excell
г.Саратов
Регистрация: 06.03.2004
Сообщений: 72
|
||
Просмотров: 13555
|
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Примерно так (из активного листа). Примерчик выдрал как мог по быстрому из рабочего файла.
Код:
![]() Цитата:
|
|||
![]() |
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Цитата:
А еще лучше подробненько сценарий распишите. Сделать то можно все. Ну или почти все. А вот с телепатией - хриновато :cry: |
|||
![]() |
|
||||
Регистрация: 06.03.2004
г.Саратов
Сообщений: 72
|
Если поподробней, то имеется набор строк (разный, до 4000). Этот набор делится на таблицы по 14 строк. Все строки записаны подряд. В одном из столбцов (десятом) находятся числа 0 или 1. Если в ячейке 0 - строку надо удалить, если 1 - оставить. Первую строку таблицы нужно оставлять.
Я думал сдалать так: 1. Выделяю самую правую ячейку (15-й столбец) в первой строке таблицы. 2. Запускаю макрос. Макрос проверяет начиная со второй строки в каждой ячейке 10-го столбца выполнение равенства нулю. Если равенство выполняется удаляет всю строку. И так 13 строк. 3. Потом снова выделяю самую правую ячеку первой строки следущей таблицы. 4. Опять запускаю макрос и т.д. Я сейчас это делаю вручную - задолбался! На один набор строк (лист) уходит не меньше часа |
|||
![]() |
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Ага, более-менее, пнятно. У меня похожая задачка была, с той разницей, что в листе содержалась ячейка с ключевым словом. В моем случае "Наименование" (в строке заголовков колонок). Его и искал. Условие такое, чтоб вокруг таблицы было по одной пустой строке или столбцу (длина таблицы не фиксирована, день ото дня в шаблон потихоньку добавляются строки). Таким образом определяется область, а от нее уже и плясать... Как определяется диапазон в этом случае (еще кусок из того же макроса)
Код:
Да, и вряд ли стОит привязываться конкретно к выделенной ячейке. По ней можно достаточно надежно определить таблицу, а область и тем более, столбец с данными наверно лучше вычислить программно (ИМХО). |
|||
![]() |
|
||||
Регистрация: 06.03.2004
г.Саратов
Сообщений: 72
|
Уважаемый vk!
Мне кажется мою задачу можно решить гораздо проще. Нам нужно просто из выделенной ячейки извлечь номер строки – число. Присвоить это число+1 переменной Rs тогда Re станет соответственно Rs+13 и записать код который Вы привели первым Цитата:
Самый главный вопрос тогда становится как выделить номер строки и присвоить значение переменной Rs |
|||
![]() |
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
В Экселе нет такого понятия как "выделенная ячейка". Есть понятие "выделенный диапазон", который может содержать и всего одну ячейку. Как из выделенного диапазона вытянуть границы - смотрите код в моем предыдущем постинге. Впрочем, это далеко не единственный способ. Нас интересует только Rs, а Re - это очевидно номер последней строки таблицы или Rs+13, если так угодно (не знаю, как Вам, но мне было б лень тыкать 256 раз в кнопку запуска макроса, чтоб пробежать все почти 4000 строк). Вместо Cs + 3 укажите явно номер столбца 10 (хоть я и против таких привязок, в прошлый раз столбец был однако 15-й... добавили слева что то?).
|
|||
![]() |
|
||||
Регистрация: 06.03.2004
г.Саратов
Сообщений: 72
|
Уважаемый vk!
Для начала хочу выразить Вам свою глубокую признательность!Спасибо Вам большое! Вы освободили меня от монтонного долгого труда. Со своей задачей я поступил следующим образом во первых я её еще упростил. Столбец который нужно проверять 12-й. В нем находятся числа 0 или 1. Причём число 1 встречается только один раз. Нужно удалить строки все строки, где в 12-м столбцечисло 0, кроме первой и строки где в 12-м столбце число 1. Т.е. от таблицы всегда остаётся 2 строки. В первоначальной таблице 15 , а как я раньше говорил 14 строк. Используя Ваш код я написал такой макрос: Код:
Цитата:
![]() Код:
Вот так, спасибо еще раз большое за помощь. Хочу извиниться за стиль программирвания. Просто я сосем не программист. В институте что-то писали когда-то. |
|||
![]() |
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Цитата:
![]() А вот почему Sum=27 - это просто. дело в том, что сам по себе цикл For Sum = 1 To 27 уже управляет переменной Sum, да еще и в теле цикла прописано Sum = Sum + 1 и притом, независимо от условий. Если последнее убрать (и в If ив в Else) - то должно получиться по человечьи For Sum = 1 To 14 . Более того, Else вроде как вобще не нужно и лишнюю переменную можно убрать (если конечно ничего не надо делать с этим значением) Код:
|
|||
![]() |
|
||||
Регистрация: 06.03.2004
г.Саратов
Сообщений: 72
|
Я первый раз так и сделал
Цитата:
:cry: А может после Else и Then можно писать только одну строку кода? Потому что я записал: Код:
|
|||
![]() |
|
||||
Регистрация: 02.09.2009
Сообщений: 82
|
Уважаемые коллеги, здравствуйте! Подскажите пожалуйста по данной теме. Вопрос следующий: Создана таблица, для проверки столбцов и строк оставляю первую строку и столец в которых будет отображаться сумма строки или столбца. Необходим макрос который пробежит сначала по первому столбцу, проверит ячейки и удалит строки со значением ноль, затем возратиться в начальную ячейку и пробежит по первой строке, проверит ячейки и удалит все столбцы со значением ноль! Очень нужно выручайте, работа горит, а просматривать все таблицы долго и ропоттливо! Заранее огромнейшее спасибо!!!!!!!!!!!
|
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
Код:
|
|||
![]() |
|
||||
Регистрация: 02.09.2009
Сообщений: 82
|
Спасибо огромное! Но если макрос находит в верхней строке 10, 20, или 1000, тогда он тоже его удаляет! Можно ли как нибудь оговорить чтобы удалялся только столбец со значением ноль? Со строками ведь все впорядке! Все равно огромное спасибо за помощь и идею! Буду пробовать дальше............
|
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
Похоже в один заход это не получится Попробуй каждую часть как отдельную процедуру, только придется переопределять диапазон после первой части заново |
|||
![]() |
|
||||
Регистрация: 02.09.2009
Сообщений: 82
|
Спасибо за все подсказки, разобрался!!!!!! Но возникла следующая запарка: Имеется столбец готовых значений. Например по вертикали 1,2,3,4,5,6,7,8,9. необходимо написать макрос, который бы после каждого значения создавал 8 пустых строк и копировал значение верхней ячейки в пустые ячейки. Итог должен быть по вертикали следующий: 1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5..........
Просто нужно обработать столбец в котором более 5 тысяч значений. А это вручную сделать не реально!!!!!!! Товарищи, коллеги, помогите с макросом!!!!!!!!!Заранее ОГРОМНОЕ спасибо!!!!!!!!! |
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
в колонках укажи: что имеешь и что нужно получить |
|||
![]() |