|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
21.08.2004, 19:59 | #1 | |
Макрос в Excell
г.Саратов
Регистрация: 06.03.2004
Сообщений: 72
|
||
Просмотров: 13403
|
|
||||
сисадмин Регистрация: 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ä
Сообщений: 813
|
Цитата:
Код:
|
|||
|
||||
Регистрация: 02.09.2009
Сообщений: 82
|
Спасибо огромное! Но если макрос находит в верхней строке 10, 20, или 1000, тогда он тоже его удаляет! Можно ли как нибудь оговорить чтобы удалялся только столбец со значением ноль? Со строками ведь все впорядке! Все равно огромное спасибо за помощь и идею! Буду пробовать дальше............
|
|||
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813
|
Цитата:
Похоже в один заход это не получится Попробуй каждую часть как отдельную процедуру, только придется переопределять диапазон после первой части заново |
|||
|
||||
Регистрация: 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ä
Сообщений: 813
|
Цитата:
в колонках укажи: что имеешь и что нужно получить |
|||
|
||||
Регистрация: 02.09.2009
Сообщений: 82
|
Спасибо, вот еще один вариант макроса, посоветовали на другом форуме. Спасибо за уделенное время, рад был пообщаться!!!!!!!!!!!!
Sub Task() 'Исходные данные в столбце А vArr = Range([A1], Cells(Rows.Count, "A").End(xlUp)) For Each oObj In vArr For j = 1 To 8 i = i + 1 Cells(i, 1) = oObj Next Next End Sub |
|||
|
||||
дома строю Регистрация: 09.01.2009
Самара
Сообщений: 47
|
Здравствуйте многоуважаемые!
Еще вопрос по теме: нужно при условия выполнения условия в заданной ячейке (ячейка с формулой) скрыть определенные строки. Получилось сделать только если я сам ввожу данные в ячейку. Код:
Последний раз редактировалось squicko, 05.04.2011 в 16:44. |
|||
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813
|
Цитата:
Успехов |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
Тема почищена.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 02.09.2009
Сообщений: 82
|
Всем привет! Помогите создать следующие макросы. Нужны маросы предвижения по таблице. Таблица заполняется из пользовательской формы. Создаю кнопки на стоку вверх, на строку вниз и кнопка подтвердить ввод данных. Этим кнопкам нужно назначить соответствующие макросы, но как их написать увы не знаю! Тварищи, программисты, подскажите какие комманды нужно назначить кнопкам? Напишите пожалуйста! Очень нужно!!!!!!!!!!
P.S. Кнопка подтверждения ввода аналог кнопки Enter |
|||
|
||||
Регистрация: 02.09.2009
Сообщений: 82
|
Всем привет! Снова нужна помощь!!! Очень нужно создать форму для защиты файла excell. идея следующая: необходимо чтобы при запуске Excell выскакивало окошко в которое необходимо ввести имя пользователя, пароль. Макрос должен проверить пароль, если пароль не верный нужно, чтобы удалялся лист, к примеру "лист 1". Проблема в том, что я не знаю как создать и вызвать подобную форму и описать все операции на языке VBA! Если кто может или есть аналоги, выручайте!
|
|||
|
||||
Регистрация: 30.10.2010
Сообщений: 123
|
Странные какие-то вещи ты в экселе сделать всё время пытаешься...
Лист удалять собрался, зачем? Чем не устраивает обычный пароль на книгу/лист? Есть такая штука, "постановка задачи" называется. Если ей не овладеешь - ответов на твой вопрос будет столько же, сколько и на пост #27 . |
|||
|
||||
Вода - моя работа Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639
|
На удаление листа в любом случае будет задан вопрос, сам попробуй, напиши строчку Sheets(1).Delete
По поводу поста 27, согласен с Petrov-Vodkin, что нужно не понятно.
__________________
Нерешаемых проблем не бывает. |
|||
|
||||
Вода - моя работа Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639
|
Попробуй так:
Код:
__________________
Нерешаемых проблем не бывает. |
|||
|
||||
дома строю Регистрация: 09.01.2009
Самара
Сообщений: 47
|
Немного не то. Интересует что то вроде:
для примера формула в ячейке "K6": "=Лист2!A1+Лист3!A2" (А1=2, А2=2) Результат в ячеке имеем:цифру "3". Так вот мне нужно чтобы в макросе проверялось условие равенства именно с "3", а не с формулой "=Лист2!A1+Лист3!A2" Код:
|
|||
|
||||
Вода - моя работа Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639
|
Этот макрос может сработать только в том листе в котором написан, вставь его в каждый лист изменив адрес целевой ячейки на полный (с указанием листа), если на ячейку возможно влияние из другой книги, нужно писать макрос периодически проверяющий значение ячейки.
__________________
Нерешаемых проблем не бывает. |
|||
|
||||
Вода - моя работа Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639
|
Dim goal As Range - объявление переменной типа Range, которую я назвал "goal"
Set goal = Sheets(2).Range("K6") - присвоение значения переменной. If goal = 6 Then - проверка значения ячейки, ссылку на которую дали выше. Все три строчки можно заменить на Цитата:
__________________
Нерешаемых проблем не бывает. |
|||