|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.07.2013, 11:31 | #1 |
Пользователь
Регистрация: 18.06.2013
Сообщений: 57
|
FindFormat
Всем привет!
Подскажите, пожалуйста, как записать макрос: Необходимо найти все ячейки на листе определенного формата, например Application.FindFormat.NumberFormat = "#,##0.00;#,##0.00-" Application.FindFormat.Font.FontSty le = "Полужирный" выделить их, и вставить в определенный диапазон. Пробовала записать макрос проделав вручную операции в книги (excel2010) (разработчик -> записать макрос): - Ctrl+F - Options - Format - задаю необходимый мне формат - Find all - Ctrl + A - активирую лист в котором работаю - Ctrl + C - и вставляю значения куда необходимо Однако, повторить записанный макрос с необходимым результатом Excel не может, копируется только первая ячейка данного формата (а нужны все!). Плиз, скажите как можно добиться нужного результата. |
30.07.2013, 15:40 | #2 |
Форумчанин
Регистрация: 21.10.2012
Сообщений: 208
|
Может цикл какой прикрутить?
|
30.07.2013, 16:37 | #3 |
Пользователь
Регистрация: 18.06.2013
Сообщений: 57
|
думала об этом,
но там сложность в том, что ячейки находятся поочередно, и каждый раз становится активной новая ячейка, а нужно все сразу. что-то ничего в голову не приходит... |
30.07.2013, 17:07 | #4 |
Форумчанин
Регистрация: 21.10.2012
Сообщений: 208
|
Может от Вас пример "поочерёдности" увидим в .xls например?
|
30.07.2013, 17:14 | #5 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
отметьте одну ячейку, нажмите Ctrl отметьте другую несмежную ячейку (не имеющую общей границы с первой), а теперь нажмите Ctrl+C, читайте надпись.
найти все нужные ячейки и обединить их в диапазон не проблема (это диапазон составленый из множества областей), а вот потом скопировать...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 30.07.2013 в 17:16. |
31.07.2013, 00:33 | #6 |
Пользователь
Регистрация: 18.06.2013
Сообщений: 57
|
Kalbasiatka,
была идея написать: Sub vv() Dim x As Integer For x = 1 To 1000 If Cells(x, "B").NumberFormat = "#,##0.00;#,##0.00-" Then Cells(x, "B").Copy Range("H1").End(xlDown).Offset(1, 0).Activate ActiveSheet.Paste End If Next x End Sub однако объемы большие и такой код занимает очень много времени (особенно если нужно переносить на другой лист), Классно было бы если в нижеследующем коде каждый раз прибавлялся бы к выбранному диапазону новый, а не скидывался старый и выбирался новый: Sub vv() Dim x As Integer For x = 1 To 1000 If Cells(x, "B").NumberFormat = "#,##0.00;#,##0.00-" Then Cells(x, "B").Select End If Next x End Sub |
31.07.2013, 00:43 | #7 |
Пользователь
Регистрация: 18.06.2013
Сообщений: 57
|
IgorGO,
а как такое сделать, ссылаясь не на конкретные ячейки, а именно на те, которые подходят под определенный формат? |
31.07.2013, 08:21 | #8 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
31.07.2013, 08:30 | #9 |
Форумчанин
Регистрация: 21.10.2012
Сообщений: 208
|
Взял 10 000 ячеек, из них 9000 подходящих под условие, заняло 5 секунд:
Код:
Последний раз редактировалось kalbasiatka; 31.07.2013 в 08:33. |
31.07.2013, 15:48 | #10 |
Пользователь
Регистрация: 18.06.2013
Сообщений: 57
|
IgorGO,
идея интересная, ее мне нужно додумать: может очень подойти для другого проекта. Единственное что, я боюсь писать коды с Do While. Kalbasiatka, в данном случае код вполне подходит. Спасибо Вам Большое за уделенное время! |