Как выделить строки по условию vba excel

0 / 0 / 0

Регистрация: 08.06.2016

Сообщений: 2

1

Выделение всей строки по условию

26.06.2016, 14:20. Показов 14014. Ответов 9


Студворк — интернет-сервис помощи студентам

Доброго времени суток.
Может кто-нибудь написать макрос для заливки целой строки по условию?
Имеем таблицу, к примеру из 40 тысяч строк. Необходимо выполнить поиск по слову «недвижимость». Залить красным цветом все строки, где встретиться искомое слово. Заранее спасибо. Либо, может это можно как-то с помощью УФ выполнить. Выручите, пожалуйста.



0



Burk

1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

26.06.2016, 15:49

2

eQyes, вы это тоже можете, включив запись макроса в меню СЕРВИС (2003) или Разработчик(2007). Затем делаете вручную, нужные вам действия. Затем ОСТАНОВИТЬ ЗАПИСЬ и в макросах смотрите, сформированный экселем макрос. Пользуйтесь этим почаще быстрее научитесь делать такие простые вещи самостоятельно. А пока получите макрос. Считаем, что «недвижимость» в первом столбце.

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub RedBull()
 
' Макрос1 Макрос'
' Макрос записан 26.06.2016 (Burk)'
 
 
Dim I As Long
I = 1
Do While Cells(I, 1) <> ""
  If InStr(LCase(Cells(I, 1)), "недвижимость") > 0 Then Rows(I).Interior.ColorIndex = 3
  I = I + 1
Loop
End Sub



0



МВТ

45 / 45 / 15

Регистрация: 14.04.2016

Сообщений: 128

26.06.2016, 17:05

3

Burk, на значительных объемах применение массивов даст существенную прибавку в скорости

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub tt()
    Dim arr(), i As Long, s As String, LRow
    LRow = Cells(Rows.Count, "A").End(xlUp).Row
    If LRow = 1 Then If IsEmpty(Range("A1")) Then Exit Sub
    arr = Range("A1:A" & LRow).Value
    For i = 1 To UBound(arr)
        If StrComp(arr(i, 1), "íåäâèæèìîñòü", vbTextCompare) = 0 Then
            If Len(s) = 0 Then s = "A" & i Else s = s & ",A" & i
        End If
    Next
    If Len(s) > 0 Then Range(s).EntireRow.Interior.Color = vbRed
End Sub



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

26.06.2016, 17:55

4

МВТ, На значительном количестве ячеек, содержащих искомый текст, такой подход приведёт к возникновению ошибки, ибо Len(s) не должна превышать 255 символов.



0



45 / 45 / 15

Регистрация: 14.04.2016

Сообщений: 128

26.06.2016, 18:22

5

pashulka, да, что-то не подумал . Спасибо за замечание. Как вариант, можно в коллекцию строки собирать, все равно должно быть значительно быстрее, чем поячеечно перебирать данные или даже использовать Union



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

26.06.2016, 18:40

6

Если из 40000 — 10000 ячеек будут с недвижимостью, то тут Union не самый лучший вариант, а если 100, то можно его и помучить

P.S. Кстати, при переборе

ячеек

не лишним будет использовать :

Visual Basic
1
2
3
Application.ScreenUpdating = False
 
Application.ScreenUpdating = True



1



МВТ

45 / 45 / 15

Регистрация: 14.04.2016

Сообщений: 128

26.06.2016, 20:04

7

pashulka, пардон, код не прикрепил

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub tt()
    Dim arr(), i As Long, s As String, LRow As Long, Col As New Collection
    Application.ScreenUpdating = False
    LRow = Cells(Rows.Count, "A").End(xlUp).Row
    If LRow = 1 Then If IsEmpty(Range("A1")) Then Exit Sub
    arr = Range("A1:A" & LRow).Value
    For i = 1 To UBound(arr)
        If StrComp(arr(i, 1), "выбор", vbTextCompare) = 0 Then
            If Len(s) = 0 Then s = "A" & i Else s = s & ",A" & i
            If Len(s) > 47 Then
                Col.Add (s)
                s = ""
            End If
            If Len(s) > 0 Then Col.Add (s)
        End If
    Next
    If Col.Count = 0 Then Exit Sub
    For i = 1 To Col.Count
        Range(Col(i)).EntireRow.Interior.Color = vbRed
    Next
    Application.ScreenUpdating = False
End Sub

Добавлено через 1 час 21 минуту
Благодаря замечаниям уважаемого pashulka были выявлены несколько досадных неточностей в коде. Прикладываю исправленный вариант

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub tt()
    Dim arr(), i As Long, s As String, LRow As Long, Col As New Collection
    LRow = Cells(Rows.Count, "A").End(xlUp).Row
    If LRow = 1 Then
        If StrComp(Range("A1"), "выбор", vbTextCompare) = 0 Then Range("A1").EntireRow.Interior.Color = vbRed
        Exit Sub
    End If
    arr = Range("A1:A" & LRow).Value
    For i = 1 To UBound(arr)
        If StrComp(arr(i, 1), "выбор", vbTextCompare) = 0 Then
            If Len(s) = 0 Then s = "A" & i Else s = s & ",A" & i
            If Len(s) > 47 Then
                Col.Add (s)
                s = ""
            End If
            If Len(s) > 0 Then Col.Add (s)
        End If
    Next
    If Col.Count = 0 Then Exit Sub
    Application.ScreenUpdating = False
    For i = 1 To Col.Count
        Range(Col(i)).EntireRow.Interior.Color = vbRed
    Next
    Application.ScreenUpdating = True
End Sub



0



snipe

4038 / 1423 / 394

Регистрация: 07.08.2013

Сообщений: 3,541

27.06.2016, 03:40

8

а просто макрос записать макрорекордером не пробовали

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Макрос1()
    Rows("1:40000").Select
    Selection.AutoFilter
    ActiveSheet.Range("A1:A40000").AutoFilter Field:=1, Criteria1:="=*недвижимость*", _
        Operator:=xlAnd
    Rows("2:40000").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    ActiveSheet.Range("A1:A40000").AutoFilter Field:=1
End Sub



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

27.06.2016, 07:30

9

Господа, вы рассуждаете о такой пустяковой задаче, как о проблеме века. Судя по всему, автор темы мало чего знает о VBA и, когда я пишу ответы на вопрос, то стараюсь наметить возможные пути (далеко не все) для решения задачи и достаточно простые, надеясь, что это станет толчком к самостоятельным действиям автора. Я думаю, что сейчас он оценивает ваши алгоритмы с точки зрения «работает-не работает». А у вас этот «пустячок» как зеркало, чтобы полюбоваться на себя. Алгоритмы мне понравились, надеюсь, что и автор темы в них разберётся. С наилучшими пожеланиями. Burk
P.S. Вскоре создам новую, более серьёзную тему, если вам известно её решение В НУЖНОМ МНЕ АСПЕКТЕ буду признателен.



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

27.06.2016, 08:38

10

del, уже реализовано



0



 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

#1

11.09.2015 12:45:49

Как выделить по условию (удалить разом) несколько тысяч строк не связанных между собой.
Ребят столкнулся с одной интересной особенностью.

Код
Sub ВыделитьСтроки2() 'не работает
Dim строка, строки
     For строка = 52 To 1 Step -1 'если For строка = 51 To 1 Step -1  - работает
        If Cells(строка, 1) <> "Баранова О.В." Then
               If строки = "" Then строки = строки & строка & ":" & строка Else строки = строки & "," & строка & ":" & строка
        End If
     Next строка
     
Debug.Print строки
Range(строки).Select
End Sub

Если For строка = 52 To 1 Step -1-не работает ‘если  строка = 51 To 1 Step -1  — работает.
Видимо есть ограничение в коли-ве не связанных диапазонов? Хотя если делать через фильтр, и выделение через видимые ячейки — диапазонов по-моему да же больше.
Возникает вопрос — как без фильтра (выделения видимых ячеек), сортировки, программно выделить все строки по условию, когда строк более тысячи?
Немного гуглил, но мало чего нашел, решил может не только мне интересно, пусть будет на Планете.
От меня всем, кто заинтересовался + в карму и большое спасибо за разъяснение :)

Прикрепленные файлы

  • Пример.xlsb (32.67 КБ)

Изменено: bedvit11.09.2015 15:43:11

«Бритва Оккама» или «Принцип Калашникова»?

 

bedvit, строка-аргумент Range обрезается до 256 символов. Об’единяйте сами диапазоны, а не их адреса: поищите по форуму Union.
Или комбинируйте: копите строку, пока ее длина не превысит, скажем, 240, и добавляйте диапазон с этим адресом, очищайте строку и т.д.

Изменено: Казанский11.09.2015 13:02:12

 

У меня оба модуля отработали.
Ну и опять же, какова цель такого выделения? Может есть другое решение?

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

StepanWolkoff, а поставьте, например «строка = 100», отрабатывает? Цель провести одни действия сразу со всем массивом. т.к. нужно удалить эти строки, а данных много и построчно удаляются дольше, чем одним разом (удаляется вся строка, а не данные со строки).

«Бритва Оккама» или «Принцип Калашникова»?

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

Казанский, хороший совет, сейчас попробую через Union.

«Бритва Оккама» или «Принцип Калашникова»?

 

TSN

Пользователь

Сообщений: 217
Регистрация: 07.05.2014

Почитайте

http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=69336&TITLE_SEO=69336-skryt-s…

На днях возникал такой же вопрос. В последнем посте реализовано как набрать большое количество не смежных строк для удаления с книги.

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

TSN, я так понял по вашей сылке, там как раз реализуется принцип, о котором писал Казанский. в циклах — обрезается по 240 символов в строке. Как вариант неплох, но хочу попробовать и через Union. У меня строки не скрываются, а удаляются, а это очень долго :), все же хотелось разом удалить.

Изменено: bedvit11.09.2015 14:48:53

«Бритва Оккама» или «Принцип Калашникова»?

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

bedvit, если строки удаляются, то в доп. столбце поставьте им признак удаления, например, символ «-» или 0, отсортируйте по нему так, чтобы удаляемое было внизу таб. и удаляйте одним массивом строк без разрывов.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

TSN

Пользователь

Сообщений: 217
Регистрация: 07.05.2014

#9

11.09.2015 14:58:27

Цитата
bedvit написал: обрезается по 240 символов в строке

Нет не обрезается по 240 символов, набирается Range из несвязанных строк, а 240 — это контроль Range до 256 символов для Ексель 2010  т.к. при переполнении более 256 символов возникает ошибка 1004. Удалить, вырезать, скрыть строки не имеет значения. Вариант рабочий достаточно понять принцип формирования  Range и доработать под свои нужды.
Если реализуете через Union выложите решение, интересно посмотреть.

Цитата
Немного гуглил, но мало чего нашел

Я Вам показал готовое решение (которое нужно всеголишь доработать под себя) и Вы его не увидили, поэтому в дебрях инета ничего и не нашли.  ;)

Изменено: TSN11.09.2015 15:01:03

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

#10

11.09.2015 15:06:29

TSN, ваше решение прочитал, вполне хороший вариант- спасибо! Много полезного узнал.
Вот допилил свой вариант, покороче — через Union, представляю на ваш, так сказать, суд.

Код
Sub ВыделитьСтроки3() 'выделить все строки не содержащие значение "Баранова О.В." с 1 по 3000
Dim строка As LongPtr
Dim строки As Range
Dim строки2 As Range

     For строка = 3000 To 1 Step -1
        If Cells(строка, 1) <> "Баранова О.В." Then Set строки = Range(Cells(строка, 1), Cells(строка, Columns.Count))
            If строки2 Is Nothing Then Set строки2 = строки Else Set строки2 = Union(строки2, строки)
     Next строка
     
Debug.Print строки2.Address
строки2.Select
End Sub

Изменено: bedvit11.09.2015 15:13:36

«Бритва Оккама» или «Принцип Калашникова»?

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

JayBhagavan, к сожалению сортировать не могу, там условное форматирование, примечания, формулы и т.д. короче гемор. Только через удалением со сдвигом вверх выходит корректнее всего.

«Бритва Оккама» или «Принцип Калашникова»?

 

TSN

Пользователь

Сообщений: 217
Регистрация: 07.05.2014

Все работает на Вашем примере отлично. Заменил последнюю строку кода на

строки2.Delete

отработало удаление строк без проблем. Только

Debug.Print строки2.Address

 закомментируйте будет пошустрей работать.

Изменено: TSN11.09.2015 15:19:07

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

#13

11.09.2015 15:23:36

TSN, да, это я специально вывел, для отслеживания адресов (для участников форума). В рабочем варианте задокументировано. Спасибо)
Для удаления я последнюю строку поменял на

Код
строки2.Delete Shift:=xlUp '(со свигом вверх)

Изменено: bedvit11.09.2015 15:26:15

«Бритва Оккама» или «Принцип Калашникова»?

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#14

11.09.2015 15:40:25

Я бы проверку добавил:

Код
If Not строки2 Is Nothing Then строки2.Delete

и вот это:

Код
Set строки = Range(Cells(строка, 1), Cells(строка, Columns.Count))

можно записать проще:

Код
Set строки = Cells(строка, 1).EntireRow

или

Код
Set строки = Rows(строка)

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

#15

11.09.2015 15:57:59

The_Prist, дельные замечания. Единственное если нужно выделятьудалять не всю строку, а например 10 первых столбцов можно оставить

Код
Set строки = Range(Cells(строка, 1), Cells(строка, 10))

Добавил проверку на пустые строки в условия отбора Range (здесь каждый решает сам, нужны ли ему пустые строки/диапазоны)
Если построчно, то вот вариант через Union, с советами от The_Prist,

Код
Sub ВыделитьСтроки() 'выделить/удалить все НЕ пустые строки не содержащие значение "Баранова О.В."
Dim строка As LongPtr
Dim строки As Range
Dim строки2 As Range

     For строка = 3000 To 1 Step -1
        If Cells(строка, 1) <> "Баранова О.В." And Cells(строка, 1) <> "" Then Set строки = Rows(строка)
            If строки2 Is Nothing Then Set строки2 = строки Else Set строки2 = Union(строки2, строки)
     Next строка
 
'Debug.Print строки2.Address 'посмотреть диапазоны адресов
If Not строки2 Is Nothing Then строки2.Select 'выделить
'If Not строки2 Is Nothing Then строки2.Delete Shift:=xlUp 'удалить со свигом вверх
End Sub

Изменено: bedvit11.09.2015 16:05:03

«Бритва Оккама» или «Принцип Калашникова»?

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#16

11.09.2015 15:59:37

Цитата
bedvit написал:
с советами от The_Prist

с советом. Более важная часть как раз про Is Nothing. Т.к. если не будет ни одного соответствия условию и строки2 будет пустым — получите ошибку.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

#17

11.09.2015 16:06:55

The_Prist, понял, не обратил сразу внимания. Это в случаях, когда например, пустой столбец с условиями. Так бывает редко, но все равно добавил проверку. Спасибо! см.выше.

Изменено: bedvit11.09.2015 16:44:28

«Бритва Оккама» или «Принцип Калашникова»?

Макрос выделения строк с указанным словом

FirEx

Дата: Воскресенье, 20.07.2014, 22:17 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Добрый день, форумчане!
Не подскажите можно ли макросом выделить строку с указанным словом? Пытался в Разработчике вручную записать «Условное форматирование» выделение строки цветом, но почему-то макрос не воспроизводится или некорректно записывается. Помогите, пожалуйста. Слово «Солнце», например

 

Ответить

Валерьянка

Дата: Воскресенье, 20.07.2014, 22:54 |
Сообщение № 2

Группа: Пользователи

Ранг: Участник

Сообщений: 71


Репутация:

2

±

Замечаний:
0% ±


Excel 2010

Например так?
[vba]

Код

Sub Poisk()
         Columns(1).FormatConditions.Delete
PoiskSlov = InputBox(«Введите слово», «», «»)
         Columns(1).FormatConditions.Add Type:=xlTextString, String:=PoiskSlov, TextOperator:=xlContains
         Columns(1).FormatConditions(Columns(1).FormatConditions.Count).SetFirstPriority
         With Columns(1).FormatConditions(1).Interior
             .PatternColorIndex = xlAutomatic
             .Color = 65535 ‘ цвет по вкусу
         End With
         Columns(1).FormatConditions(1).StopIfTrue = False
End Sub

[/vba]

Выделяет ячейку в столбце1 (при помощи УФ) если содержатся искомые значения (н-р слово/часть слова или буквы — вне зависимости от используемого регистра)

Сообщение отредактировал ВалерьянкаВоскресенье, 20.07.2014, 23:57

 

Ответить

Hugo

Дата: Воскресенье, 20.07.2014, 23:12 |
Сообщение № 3

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Если задача «выделить строку с указанным словом» — то зачем УФ? Цикл по столбцу, проверка наличия слова, окраска. Или поиск слова в диапазоне find/findnext (см. помощь) и окраска.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Валерьянка

Дата: Воскресенье, 20.07.2014, 23:40 |
Сообщение № 4

Группа: Пользователи

Ранг: Участник

Сообщений: 71


Репутация:

2

±

Замечаний:
0% ±


Excel 2010

Или так?
[vba]

Код

Sub Poisk2()
        With Cells.Interior
            .Pattern = xlNone
        End With
znach = InputBox(«Введите слово», «», «»)
s = Range(«a» & Rows.Count).End(xlUp).Row
For st = 1 To s
If znach = Range(«a» & st).Text Then
        With Rows(st).Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 65535 ‘ цвет на Ваше усмотрение
        End With
Else
End If
Next
End Sub

[/vba]
Выделит строку если значение в ячейки столбца 1 равно указанному слову (Слово целиком с учетом регистра)

Сообщение отредактировал ВалерьянкаВоскресенье, 20.07.2014, 23:58

 

Ответить

zaranim

Дата: Среда, 17.04.2019, 10:42 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Добрый день!

Подскажите, как реализовать тот же макрос, только результатом должно быть не выделение ячеек цветом, а:
1 вариант: выбор всех ячеек с искомым словом;
2 вариант: удаление всех ячеек с искомым словом.

 

Ответить

Pelena

Дата: Среда, 17.04.2019, 12:07 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

zaranim, прочитайте Правила форума и создайте свою тему. Эта тема закрыта


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

How can I tell Excel to highlight rows by their row number. For instance, let’s say I wanted row 6, 10, 150, 201 highlighted. Thanks.

Siddharth Rout's user avatar

asked Jun 6, 2012 at 22:12

Dan's user avatar

Here is another one based on Mote’s .EntireRow.Interior.ColorIndex

This one doesn’t restrict you to enter the row numbers but gives the user the flexibility to choose the rows at runtime.

Option Explicit

Sub Sample()
    Dim Ret As Range

    On Error Resume Next
    Set Ret = Application.InputBox("Please select the rows that you would like to color", "Color Rows", Type:=8)
    On Error GoTo 0

    If Not Ret Is Nothing Then Ret.EntireRow.Interior.ColorIndex = 6
End Sub

FOLLOWUP

Is there a way to write the macro to read the row numbers from a list and highlight the rows?

Yes there is a way. Let’s say the list in Cell A1 to A10 then you can use this code

Option Explicit

Sub Sample()
    Dim i As Long, sh As Worksheet

    On Error GoTo Whoa

    Application.ScreenUpdating = False

    '~~> Set this to the sheet where the rows need to be colored
    Set sh = Sheets("Sheet2")

    '~~> Change Sheet1 to the sheet which has the list
    With Sheets("Sheet1")
        For i = 1 To 10
            If Not Len(Trim(.Range("A" & i).Value)) = 0 And _
            IsNumeric(.Range("A" & i).Value) Then _
            sh.Rows(.Range("A" & i).Value).Interior.ColorIndex = 3 '<~~ Red
        Next i
    End With

LetsContinue:
    Application.ScreenUpdating = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

Reafidy's user avatar

Reafidy

8,2505 gold badges49 silver badges81 bronze badges

answered Jun 6, 2012 at 23:25

Siddharth Rout's user avatar

Siddharth RoutSiddharth Rout

146k17 gold badges206 silver badges250 bronze badges

2

As an alternative to Motes’ answer, you can use conditional formatting.

Eg: select A1:J500, Conditional formatting >> New rule >> Use a formula…

For the formula enter: =OR(ROW()=6, ROW()=10, ROW()=150, ROW()=201)

answered Jun 6, 2012 at 22:38

Tim Williams's user avatar

Tim WilliamsTim Williams

150k8 gold badges96 silver badges124 bronze badges

0

For basic VBA code, you can always start recording a macro, perform the action, stop recording, look at what code was generated, and then clean that up to do what you want. For example, recording the action of highlighting a row (setting the value of Interior.Color) gives you:

Rows("13:13").Select
Range("C13").Activate
With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With

The selection commands and extraneous Interior properties can be removed giving you:

Rows("13:13").Interior.Color = 65535

Adding in the row multi-select:

Rows("6:6,10:10,150:150,201:201").Interior.Color = 65535

Summary:

  • Record macro
  • View Excel’s version
  • Use/Edit what code you need

answered Jun 6, 2012 at 22:36

Steve Konves's user avatar

Steve KonvesSteve Konves

2,6283 gold badges24 silver badges44 bronze badges

1

objWB.Cells(rowNum,201).EntireRow.Interior.ColorIndex = 6

etc

answered Jun 6, 2012 at 22:16

Motomotes's user avatar

MotomotesMotomotes

3,8941 gold badge25 silver badges24 bronze badges

1

Update: Didn’t realize the date on this, but thought I’d add this in since it was relevant to the chosen answer.

In addition to Siddharth Rout’s answer, since I don’t have enough rep to comment yet, you can dynamically figure out how many rows there are in your worksheet with these two lines. xlCellTypeConstants could be changed to another XlCellType constant that you need, and the range can always be changed to accommodate to your spreadsheet.

Dim numRows As Integer
numRows = Range("A2", Range("A1048576").End(xlUp)).SpecialCells(xlCellTypeConstants).Cells.Count

answered Mar 17, 2015 at 19:56

Kelsius's user avatar

KelsiusKelsius

4132 gold badges5 silver badges19 bronze badges

Sorry if it is not as concise or elegant as other answers, but it gets the job done. When I was writing code for my own application I needed to loop through my code. Also, instead of highlighting the entire row, I only needed to highlight a portion of the rows.

Sub Highlight()
Dim ThisWB As Workbook
Dim ThisWS As Worksheet
Dim rows(0 To 3) As Integer
Dim test As String

Set ThisWB = ActiveWorkbook
Set ThisWS = ThisWB.Sheets("Sheet1")

rows(0) = 6
rows(1) = 10
rows(2) = 150
rows(3) = 201

For i = 0 To 3
    test = "A" & rows(i) & ":H" & rows(i)
    ThisWS.Range(test).Interior.ColorIndex = 15
Next i

End Sub

answered Jun 28, 2016 at 19:45

Ray's user avatar

Автор moland, 04 октября 2017, 13:50

Подскажите как выделить  диапазон строк от a до b
Public a, b As Integer
Sub asd()

  a = Range(«диапазон»).Rows(Range(«диапазон»).Rows.Count).Row
  b= UsedRange.Rows.Count
    Rows(«a:b»).Select
End sub

Почему когда стоят переменные в скобках не выделяет строки, а скажем  Rows(a).Select работает.
a и b находит верно я проверял через msgbox.



Администратор

  • Administrator
  • Сообщения: 2,254
  • Записан

Не ответ на ваш вопрос, просто замечание по коду.

В VBA нужно указывать тип данных для каждой переменной. Правильно так:
Public a As Integer, b As Integer

В вашем же случае у переменной «a» тип данных «Variant», а не «Integer», как вы предполагали.



Администратор

  • Administrator
  • Сообщения: 2,254
  • Записан

Не ответ на ваш вопрос, просто замечание по коду.

В экселе 2007+ 1 млн строк на листе. Поэтому даже для цикла по строкам недостаточно типа данных Integer.
Поэтому правильно использовать тип данных Long:
Public a As Long, b As Long



Администратор

  • Administrator
  • Сообщения: 2,254
  • Записан

В VBA, всё, что попадает внутрь кавычек становится обычным текстом. В этом коде внутри скобок уже не переменные, как вы думаете, а просто буквы «a» и «b»:
rows(«a:b»).Select



Администратор

  • Administrator
  • Сообщения: 2,254
  • Записан

Можно так выделить строки:

Public a As Long, b As Long

Sub asd()
    a = Range(«диапазон»).rows(Range(«диапазон»).rows.Count).row
    b = UsedRange.rows.Count
    rows(a).Resize(b).Select
End Sub


Ок, спасибо.
В моем случае будет.
rows(a+1).Resize(b-а).Select


  • Форум по VBA, Excel и Word

  • VBA, Excel

  • VBA, макросы в Excel

  • Excel VBA Макросы: Выделение строк через переменные

Понравилась статья? Поделить с друзьями:
  • Как выделить столбец в excel макрос
  • Как выделить строки в excel с клавиатуры
  • Как выделить столбец в excel комбинация клавиш
  • Как выделить строки в excel программно
  • Как выделить столбец в excel кнопками