Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Заливка диапазона при выделении нескольких строк - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заливка диапазона при выделении нескольких строк (Макросы Sub)
Заливка диапазона при выделении нескольких строк
Alexei Дата: Суббота, 06.07.2013, 22:23 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте.
Сейчас у меня есть макрос:
[vba]
Код
Sub Отметить()
Intersect(Columns("A:N"), ActiveCell.EntireRow).Interior.Color = 15773696
End Sub
[/vba]

Его задача, при запуске макроса, заливать цветом диапазон A:N по одной строке.
Но, к сожалению, он и выделяет цветом только одну строку.
Помогите переделать его так, чтобы я, к примеру, выделял диапазон ячеек C1:C13, запускал макрос и он при запуске заливал цветом диапазон A1:N13.
И так при выделении любого диапазона (по любому столбцу в пределах A:N), от 1 ячейки до максимально возможного.
 
Ответить
СообщениеЗдравствуйте.
Сейчас у меня есть макрос:
[vba]
Код
Sub Отметить()
Intersect(Columns("A:N"), ActiveCell.EntireRow).Interior.Color = 15773696
End Sub
[/vba]

Его задача, при запуске макроса, заливать цветом диапазон A:N по одной строке.
Но, к сожалению, он и выделяет цветом только одну строку.
Помогите переделать его так, чтобы я, к примеру, выделял диапазон ячеек C1:C13, запускал макрос и он при запуске заливал цветом диапазон A1:N13.
И так при выделении любого диапазона (по любому столбцу в пределах A:N), от 1 ячейки до максимально возможного.

Автор - Alexei
Дата добавления - 06.07.2013 в 22:23
The_Prist Дата: Суббота, 06.07.2013, 22:30 | Сообщение № 2
Группа: Друзья
Ранг: Участник
Сообщений: 85
Репутация: 22 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub Отметить()
     Range("A" & Selection.Row).Resize(Selection.Rows.Count, 14).Interior.Color = 15773696
End Sub
[/vba]

Если будет выделен несмежный диапазон, код отработает не так, как Вы ожидаете, а закрасит количество строк, равное кол-ву строк в первой выделенной области.


Errare humanum est, stultum est in errore perseverare
 
Ответить
Сообщение[vba]
Код
Sub Отметить()
     Range("A" & Selection.Row).Resize(Selection.Rows.Count, 14).Interior.Color = 15773696
End Sub
[/vba]

Если будет выделен несмежный диапазон, код отработает не так, как Вы ожидаете, а закрасит количество строк, равное кол-ву строк в первой выделенной области.

Автор - The_Prist
Дата добавления - 06.07.2013 в 22:30
Alexei Дата: Суббота, 06.07.2013, 22:38 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
И эту проблему нельзя решить?
 
Ответить
СообщениеИ эту проблему нельзя решить?

Автор - Alexei
Дата добавления - 06.07.2013 в 22:38
The_Prist Дата: Суббота, 06.07.2013, 22:51 | Сообщение № 4
Группа: Друзья
Ранг: Участник
Сообщений: 85
Репутация: 22 ±
Замечаний: 0% ±

2010
А Вы как бы даже не упоминали про эту проблему.
[vba]
Код
Sub Отметить()
     Dim rArea As Range
     For Each rArea In Selection.Areas
         Cells(rArea.Row, 1).Resize(Selection.Rows.Count, 14).Interior.Color = 15773696
     Next rArea
End Sub
[/vba]


Errare humanum est, stultum est in errore perseverare
 
Ответить
СообщениеА Вы как бы даже не упоминали про эту проблему.
[vba]
Код
Sub Отметить()
     Dim rArea As Range
     For Each rArea In Selection.Areas
         Cells(rArea.Row, 1).Resize(Selection.Rows.Count, 14).Interior.Color = 15773696
     Next rArea
End Sub
[/vba]

Автор - The_Prist
Дата добавления - 06.07.2013 в 22:51
Alexei Дата: Суббота, 06.07.2013, 23:09 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Извините, но выделяет некорректно.
Выделяю диапазоны, а макрос в одном диапазоне выделяет меньше строк, а в другом диапазоне захватывает не выделенные ячейки и тоже заливает.
 
Ответить
СообщениеИзвините, но выделяет некорректно.
Выделяю диапазоны, а макрос в одном диапазоне выделяет меньше строк, а в другом диапазоне захватывает не выделенные ячейки и тоже заливает.

Автор - Alexei
Дата добавления - 06.07.2013 в 23:09
SkyPro Дата: Суббота, 06.07.2013, 23:10 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Вот
[vba]
Код
Sub otmet()
Dim rRow As Range
            For Each rRow In Selection
                Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696
            Next
End Sub
[/vba]

Я ведь правильно понял задачу?
Вы выделяете несколько ячеек, и все строки, в которых находятся выделенные ячейки нужно закрасить от столбца А до N ?

С проверкой диапазона. Заливает только строки выделенные в диапазоне A:N
[vba]
Код
Sub otmet()
Dim rRow As Range
         For Each rRow In Selection
             If rRow.Column <= 14 Then
             Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696
             End If
         Next
End Sub
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Суббота, 06.07.2013, 23:20
 
Ответить
СообщениеВот
[vba]
Код
Sub otmet()
Dim rRow As Range
            For Each rRow In Selection
                Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696
            Next
End Sub
[/vba]

Я ведь правильно понял задачу?
Вы выделяете несколько ячеек, и все строки, в которых находятся выделенные ячейки нужно закрасить от столбца А до N ?

С проверкой диапазона. Заливает только строки выделенные в диапазоне A:N
[vba]
Код
Sub otmet()
Dim rRow As Range
         For Each rRow In Selection
             If rRow.Column <= 14 Then
             Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696
             End If
         Next
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 06.07.2013 в 23:10
Alexei Дата: Суббота, 06.07.2013, 23:15 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
SkyPro, Вы правильно поняли задачу.
Макрос работает.
Спасибо Вам, большое.
 
Ответить
СообщениеSkyPro, Вы правильно поняли задачу.
Макрос работает.
Спасибо Вам, большое.

Автор - Alexei
Дата добавления - 06.07.2013 в 23:15
The_Prist Дата: Воскресенье, 07.07.2013, 00:17 | Сообщение № 8
Группа: Друзья
Ранг: Участник
Сообщений: 85
Репутация: 22 ±
Замечаний: 0% ±

2010
Никакой тяги к изучению...А еще говорят, что лень - двигатель прогресса. Врут.
[vba]
Код
Sub Отметить()
      Dim rArea As Range
      For Each rArea In Selection.Areas
          Cells(rArea.Row, 1).Resize(rArea.Rows.Count, 14).Interior.Color = 15773696
      Next rArea
End Sub
[/vba]


Errare humanum est, stultum est in errore perseverare
 
Ответить
СообщениеНикакой тяги к изучению...А еще говорят, что лень - двигатель прогресса. Врут.
[vba]
Код
Sub Отметить()
      Dim rArea As Range
      For Each rArea In Selection.Areas
          Cells(rArea.Row, 1).Resize(rArea.Rows.Count, 14).Interior.Color = 15773696
      Next rArea
End Sub
[/vba]

Автор - The_Prist
Дата добавления - 07.07.2013 в 00:17
SkyPro Дата: Воскресенье, 07.07.2013, 00:24 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
The_Prist,
До этой темы не был знаком с Resize, и, соответственно не мог применять (хотя и сейчас не совсем понимаю, как этот метод работает). Поэтому предложил вариант с перебором всех ячеек выделенного диапазона.
Прекрасно понимаю, что при большом кол-ве макрос будет работать дольше.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Воскресенье, 07.07.2013, 00:31
 
Ответить
СообщениеThe_Prist,
До этой темы не был знаком с Resize, и, соответственно не мог применять (хотя и сейчас не совсем понимаю, как этот метод работает). Поэтому предложил вариант с перебором всех ячеек выделенного диапазона.
Прекрасно понимаю, что при большом кол-ве макрос будет работать дольше.

Автор - SkyPro
Дата добавления - 07.07.2013 в 00:24
The_Prist Дата: Воскресенье, 07.07.2013, 11:06 | Сообщение № 10
Группа: Друзья
Ранг: Участник
Сообщений: 85
Репутация: 22 ±
Замечаний: 0% ±

2010
SkyPro, в принципе моя цитата про лень была адресована не Вам :-)
Resize - если дословно, то и перевод будет "переопределение размерности". Иными словами данный метод изменяет границы диапазона на указанное кол-во сток и столбцов. Если какой-либо из параметров опущен, то он не изменяется. Небольшие примеры:
Range("A1").Resize(5) - получим диапазон "A1:A5"
Range("A1").Resize(5,3) - получим диапазон "A1:C5"
Range("A1").Resize(,3) - получим диапазон "A1:C1"

Метод Resize может быть применен только к диапазону.


Errare humanum est, stultum est in errore perseverare
 
Ответить
СообщениеSkyPro, в принципе моя цитата про лень была адресована не Вам :-)
Resize - если дословно, то и перевод будет "переопределение размерности". Иными словами данный метод изменяет границы диапазона на указанное кол-во сток и столбцов. Если какой-либо из параметров опущен, то он не изменяется. Небольшие примеры:
Range("A1").Resize(5) - получим диапазон "A1:A5"
Range("A1").Resize(5,3) - получим диапазон "A1:C5"
Range("A1").Resize(,3) - получим диапазон "A1:C1"

Метод Resize может быть применен только к диапазону.

Автор - The_Prist
Дата добавления - 07.07.2013 в 11:06
SkyPro Дата: Воскресенье, 07.07.2013, 16:41 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
С Resize разобрался более-менее.
Спасибо вам огромное за разьяснение.
Но теперь у меня еще один вопрос smile
Почему этот код:
[vba]
Код
Sub otmet()
Dim rRow As Range
          For Each rRow In Selection.Areas
              If rRow.Column <= 14 Then
              'Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696
              Cells(rRow.Row, 1).Resize(rRow.Rows.Count, 14).Interior.Color = 15773696
              End If
          Next
End Sub
[/vba]
Работает быстрее, чем этот:
[vba]
Код
Sub otmet()
Dim rRow As Range
          For Each rRow In Selection '.Areas
              If rRow.Column <= 14 Then
              'Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696
              Cells(rRow.Row, 1).Resize(rRow.Rows.Count, 14).Interior.Color = 15773696
              End If
          Next
End Sub
[/vba]
?
может кто-нибудь простым языком обьяснить, чем Areas так сокращает кол-во итераций?


skypro1111@gmail.com
 
Ответить
СообщениеС Resize разобрался более-менее.
Спасибо вам огромное за разьяснение.
Но теперь у меня еще один вопрос smile
Почему этот код:
[vba]
Код
Sub otmet()
Dim rRow As Range
          For Each rRow In Selection.Areas
              If rRow.Column <= 14 Then
              'Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696
              Cells(rRow.Row, 1).Resize(rRow.Rows.Count, 14).Interior.Color = 15773696
              End If
          Next
End Sub
[/vba]
Работает быстрее, чем этот:
[vba]
Код
Sub otmet()
Dim rRow As Range
          For Each rRow In Selection '.Areas
              If rRow.Column <= 14 Then
              'Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696
              Cells(rRow.Row, 1).Resize(rRow.Rows.Count, 14).Interior.Color = 15773696
              End If
          Next
End Sub
[/vba]
?
может кто-нибудь простым языком обьяснить, чем Areas так сокращает кол-во итераций?

Автор - SkyPro
Дата добавления - 07.07.2013 в 16:41
_Boroda_ Дата: Воскресенье, 07.07.2013, 17:10 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Ареас (если не вдаваться в подробности, на пальцах) в данном случае работает сразу с блоками неразрывных диапазонов. То есть, если выделить А1:А3 и А5:А9, то он сначала сделает нужную операцию над А1:А3 (сразу на 3 строки), потом над А5:А9 (сразу на 5 строк). То есть, всего 2 операции.
А без него операции будут идти на каждую выделенную строчку, то есть, всего 8 операций.
С нижеследующей поправкой Сергея (конечно ячейку - быстро писал, не подумал).
А без него операции будут идти на каждую выделенную ячейку, то есть, всего 8 операций.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеАреас (если не вдаваться в подробности, на пальцах) в данном случае работает сразу с блоками неразрывных диапазонов. То есть, если выделить А1:А3 и А5:А9, то он сначала сделает нужную операцию над А1:А3 (сразу на 3 строки), потом над А5:А9 (сразу на 5 строк). То есть, всего 2 операции.
А без него операции будут идти на каждую выделенную строчку, то есть, всего 8 операций.
С нижеследующей поправкой Сергея (конечно ячейку - быстро писал, не подумал).
А без него операции будут идти на каждую выделенную ячейку, то есть, всего 8 операций.

Автор - _Boroda_
Дата добавления - 07.07.2013 в 17:10
KuklP Дата: Воскресенье, 07.07.2013, 17:22 | Сообщение № 13
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Тем, что Areas за раз просматривает всю выделенную область, а во втором случае просматривается КАЖДАЯ ячейка всех областей. Т.е. при выделееной А6:Н6 одна и таже область будет просмотрена и обработана 8 раз. А Areas обработает ее за раз. Можете убедиться, установив в watches watch - rRow.Address и прогнав оба макроса по шагам.
P.S. Надеюсь, это было "простым языком" wacko


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеТем, что Areas за раз просматривает всю выделенную область, а во втором случае просматривается КАЖДАЯ ячейка всех областей. Т.е. при выделееной А6:Н6 одна и таже область будет просмотрена и обработана 8 раз. А Areas обработает ее за раз. Можете убедиться, установив в watches watch - rRow.Address и прогнав оба макроса по шагам.
P.S. Надеюсь, это было "простым языком" wacko

Автор - KuklP
Дата добавления - 07.07.2013 в 17:22
KuklP Дата: Воскресенье, 07.07.2013, 17:24 | Сообщение № 14
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Цитата (_Boroda_)
каждую выделенную строчку
Ячейку, Саш smile


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Цитата (_Boroda_)
каждую выделенную строчку
Ячейку, Саш smile

Автор - KuklP
Дата добавления - 07.07.2013 в 17:24
SkyPro Дата: Воскресенье, 07.07.2013, 17:29 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Да, доступно и понятно. Спасибо за обьяснения.
Тоесть Areas можно использовать везде, где диапазон обьявляется переменной?
Имею вииду, если нужно сделать переборку по диапазону.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Воскресенье, 07.07.2013, 17:31
 
Ответить
СообщениеДа, доступно и понятно. Спасибо за обьяснения.
Тоесть Areas можно использовать везде, где диапазон обьявляется переменной?
Имею вииду, если нужно сделать переборку по диапазону.

Автор - SkyPro
Дата добавления - 07.07.2013 в 17:29
KuklP Дата: Воскресенье, 07.07.2013, 17:32 | Сообщение № 16
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Цитата (SkyPro)
Areas можно использовать везде, где диапазон обьявляется переменной?
Везде, где это целесообразно. smile


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Цитата (SkyPro)
Areas можно использовать везде, где диапазон обьявляется переменной?
Везде, где это целесообразно. smile

Автор - KuklP
Дата добавления - 07.07.2013 в 17:32
SkyPro Дата: Воскресенье, 07.07.2013, 17:53 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Спасибо еще раз )


skypro1111@gmail.com
 
Ответить
СообщениеСпасибо еще раз )

Автор - SkyPro
Дата добавления - 07.07.2013 в 17:53
Alexei Дата: Пятница, 12.07.2013, 21:47 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
И возвращаться к теме приходиться.
[vba]
Код
Sub otmet()
Dim rRow As Range
For Each rRow In Selection
Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696
Next
End Sub
[/vba]
Данный код как переделать, чтобы в выделенном диапазоне заливал только отфильтрованные строки?
Оформление исправил.


Сообщение отредактировал Alexei - Пятница, 12.07.2013, 21:58
 
Ответить
СообщениеИ возвращаться к теме приходиться.
[vba]
Код
Sub otmet()
Dim rRow As Range
For Each rRow In Selection
Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696
Next
End Sub
[/vba]
Данный код как переделать, чтобы в выделенном диапазоне заливал только отфильтрованные строки?
Оформление исправил.

Автор - Alexei
Дата добавления - 12.07.2013 в 21:47
KuklP Дата: Пятница, 12.07.2013, 21:51 | Сообщение № 19
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Здесь почитайте:
http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=49663
сегодня обсуждалось.
P.S. и пользуйтесь тегами оформления кода.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Пятница, 12.07.2013, 21:52
 
Ответить
СообщениеЗдесь почитайте:
http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=49663
сегодня обсуждалось.
P.S. и пользуйтесь тегами оформления кода.

Автор - KuklP
Дата добавления - 12.07.2013 в 21:51
Alexei Дата: Пятница, 12.07.2013, 22:09 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
KuklP, я ничего не понимаю в макросах. И не могу соединить коды((
Не могли бы помочь с этим новичку?
 
Ответить
СообщениеKuklP, я ничего не понимаю в макросах. И не могу соединить коды((
Не могли бы помочь с этим новичку?

Автор - Alexei
Дата добавления - 12.07.2013 в 22:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заливка диапазона при выделении нескольких строк (Макросы Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!