![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 13.08.2013
Сообщений: 10
|
![]()
Здравствуйте!
На втором листе размещены данные, которые нужно сопоставлять с первым листом и, при совпадении id, выделять цветом и добавлять "дату открепления". Знаний у меня в VBA не очень много, поэтому прошу помощи в доработке кнопки. Недостаток в том, что кнопка работает только на 2 листа. В основном проекте листов будет больше, данные с листа2 из примера будут, скажем, на листе7 и нужно, чтобы данные с листа7 сверялись со всеми остальными листами в книге и при совпадении id (на всех листах будет 1й столбец с id, но остальных столбцов может быть разное количество) закрашивалась строка и добавлялась дата, как в прикреплении. Данные на лист7 будут постоянно добавляться/удаляться вручную. Ну и мне показался мой код громоздким из-за двух for each, можно ли его как-то оптимизировать, слив их в одно? Заранее большое спасибо. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
![]()
Так будет побыстрее, и цикл по листам несложно прикрутить:
Код:
![]()
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 14.08.2013 в 00:46. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 13.08.2013
Сообщений: 10
|
![]()
Круто, гораздо быстрее моего варианта) А по какому принципу добавляется дата в лист1? Вот тут сложность в том, что в лист2 будут добавляться новые id и даты вместо старых, а в лист1 эти даты добавляются следующим столбцом, а должны в тот же падать, вместе со старыми. Проще говоря именно в конец строки, а не в 4й столбец.
А можно вместо лист2 воткнуть activeworksheet? Будут приходить новые документы с датами откреплений, из них пользователь будет копипастить данные на лист с кнопкой и тыкать ее. А If .exists(a(i, 1)) Then означает, что пустые строки не будут участвовать при сканировании лист1 , верно? Они вообще помешают? Просто могут оказаться на любом листе. Доработал свою кнопку, добавив ws и указав все листы в целевой ренж. Это почти то, что нужно, но слишком медленно, объем данных очень большой в итоговом проекте. Плюс дату нужно именно в конец строки. Код:
Последний раз редактировалось filton; 14.08.2013 в 01:26. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 13.08.2013
Сообщений: 10
|
![]() Код:
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
![]()
Даже не знаю на что отвечать...
Лучше помолчу.
webmoney: E265281470651 Z422237915069 R418926282008
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 13.08.2013
Сообщений: 10
|
![]()
на последнее, если не трудно
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
![]()
А конец строки - это где?
В общем мой код и пишет всегда в конец строки ![]() Но Вы его забраковали...
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 14.08.2013 в 23:26. |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 13.08.2013
Сообщений: 10
|
![]()
Первая пустая ячейка в ряду.
Ваш код добавляет все в первый свободный столбец. Данные на лист2 будут удаляться и вставляться из других документов, след-но каждое такое изменение будет на первом листе новым столбцом , а нужно чтобы эти даты были в одном и том же столбце(чтобы новые даты добавлялись в столбец к старым, которые были уже добавлены кодом ранее). В идеале, чтобы добавлялось именно в, пустую ячейку ряда. К тому же при наличии пустых рядов на листе1, код перестает выполняться. Надеюсь, в этот раз более понятно получилось) Последний раз редактировалось filton; 14.08.2013 в 23:53. |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
![]()
Ну я конечно такое и предполагал, не совсем дурак...
Но бывают разные задачи - для другой задачи мой код вполне подходил. Например под Ваш пример ![]() А так всё поправимо - и строки пустые можно игнорировать, и дополнять. А с "Первая пустая ячейка в ряду" думаю Вы не подумав написали. Ведь может быть таких два ряда: www www www www www Так куда нужно писать эти вытянутые данные? Ладно занудствовать ![]() Вот с минимальными переделками под переделанную задачу: Код:
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 15.08.2013 в 22:17. |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 13.08.2013
Сообщений: 10
|
![]()
Был в отпуске. Большое спасибо за помощь.
Ваш код выше выдает ошибку 1004 application-defined or object-defined error a = .Range(.[A1], Range("D" & .Rows.Count).End(xlUp)).Value Попытаюсь еще раз объяснить задачу. На лист2 будут периодически вручную вноситься новые данные, а старые удаляться. Т.е. лист2 как бы существует только ради одного нажатия кнопки, ради сравнения данных с него с остальными листами во всей книге. Данные на лист2 могут быть вразнобой, т.е. не в том порядке, в каком они на остальных листах. При совпадении значения с листа2 и значения на любом другом листе происходит следующее: закрашиваются совпавшая ячейка и 3(например) справа от нее(столбцы B,C,D), а также добавляется значение из столбца "B" с листа2 в столбец E справа от совпавшей ячейки. Вот моя кнопка, которая работает медленно, данные в итоге будут под 30000 строк. Может быть, этот код внесет ясность. Код:
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
1) как перетащить несколько модулей с одной книги на другую одним скопом? 2)можно ли открыть несколько книг сразу? | БАХТИ | Microsoft Office Excel | 17 | 26.09.2011 18:11 |
«Найти и заменить» сразу несколько значений. | Smile2007 | Microsoft Office Excel | 9 | 09.12.2010 00:36 |
Как выделить несколько листов сразу? | frantic150 | Microsoft Office Excel | 3 | 25.06.2009 01:25 |
Как вставить столбик с формулами сразу на 50 листов? | Катик7 | Microsoft Office Excel | 2 | 01.05.2009 16:26 |
Снятие Защиты с листов, сразу со всех | valerij | Microsoft Office Excel | 2 | 02.11.2007 21:19 |