0 / 0 / 0 Регистрация: 08.06.2016 Сообщений: 2 |
|
1 |
|
Выделение всей строки по условию26.06.2016, 14:20. Показов 14014. Ответов 9
Доброго времени суток.
0 |
Burk 1813 / 1135 / 346 Регистрация: 11.07.2014 Сообщений: 4,002 |
||||
26.06.2016, 15:49 |
2 |
|||
eQyes, вы это тоже можете, включив запись макроса в меню СЕРВИС (2003) или Разработчик(2007). Затем делаете вручную, нужные вам действия. Затем ОСТАНОВИТЬ ЗАПИСЬ и в макросах смотрите, сформированный экселем макрос. Пользуйтесь этим почаще быстрее научитесь делать такие простые вещи самостоятельно. А пока получите макрос. Считаем, что «недвижимость» в первом столбце.
0 |
МВТ 45 / 45 / 15 Регистрация: 14.04.2016 Сообщений: 128 |
||||
26.06.2016, 17:05 |
3 |
|||
Burk, на значительных объемах применение массивов даст существенную прибавку в скорости
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. Кстати, при переборе ячеек не лишним будет использовать :
1 |
МВТ 45 / 45 / 15 Регистрация: 14.04.2016 Сообщений: 128 |
||||||||
26.06.2016, 20:04 |
7 |
|||||||
pashulka, пардон, код не прикрепил
Добавлено через 1 час 21 минуту
0 |
snipe 4038 / 1423 / 394 Регистрация: 07.08.2013 Сообщений: 3,541 |
||||
27.06.2016, 03:40 |
8 |
|||
а просто макрос записать макрорекордером не пробовали
0 |
1813 / 1135 / 346 Регистрация: 11.07.2014 Сообщений: 4,002 |
|
27.06.2016, 07:30 |
9 |
Господа, вы рассуждаете о такой пустяковой задаче, как о проблеме века. Судя по всему, автор темы мало чего знает о VBA и, когда я пишу ответы на вопрос, то стараюсь наметить возможные пути (далеко не все) для решения задачи и достаточно простые, надеясь, что это станет толчком к самостоятельным действиям автора. Я думаю, что сейчас он оценивает ваши алгоритмы с точки зрения «работает-не работает». А у вас этот «пустячок» как зеркало, чтобы полюбоваться на себя. Алгоритмы мне понравились, надеюсь, что и автор темы в них разберётся. С наилучшими пожеланиями. Burk
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
27.06.2016, 08:38 |
10 |
del, уже реализовано
0 |
bedvit Пользователь Сообщений: 2477 Виталий |
#1 11.09.2015 12:45:49 Как выделить по условию (удалить разом) несколько тысяч строк не связанных между собой.
Если For строка = 52 To 1 Step -1-не работает ‘если строка = 51 To 1 Step -1 — работает. Прикрепленные файлы
Изменено: bedvit — 11.09.2015 15:43:11 «Бритва Оккама» или «Принцип Калашникова»? |
||
bedvit, строка-аргумент Range обрезается до 256 символов. Об’единяйте сами диапазоны, а не их адреса: поищите по форуму Union. Изменено: Казанский — 11.09.2015 13:02:12 |
|
У меня оба модуля отработали. |
|
bedvit Пользователь Сообщений: 2477 Виталий |
StepanWolkoff, а поставьте, например «строка = 100», отрабатывает? Цель провести одни действия сразу со всем массивом. т.к. нужно удалить эти строки, а данных много и построчно удаляются дольше, чем одним разом (удаляется вся строка, а не данные со строки). «Бритва Оккама» или «Принцип Калашникова»? |
bedvit Пользователь Сообщений: 2477 Виталий |
Казанский, хороший совет, сейчас попробую через Union. «Бритва Оккама» или «Принцип Калашникова»? |
TSN Пользователь Сообщений: 217 |
Почитайте http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=69336&TITLE_SEO=69336-skryt-s… На днях возникал такой же вопрос. В последнем посте реализовано как набрать большое количество не смежных строк для удаления с книги. |
bedvit Пользователь Сообщений: 2477 Виталий |
TSN, я так понял по вашей сылке, там как раз реализуется принцип, о котором писал Казанский. в циклах — обрезается по 240 символов в строке. Как вариант неплох, но хочу попробовать и через Union. У меня строки не скрываются, а удаляются, а это очень долго , все же хотелось разом удалить. Изменено: bedvit — 11.09.2015 14:48:53 «Бритва Оккама» или «Принцип Калашникова»? |
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
bedvit, если строки удаляются, то в доп. столбце поставьте им признак удаления, например, символ «-» или 0, отсортируйте по нему так, чтобы удаляемое было внизу таб. и удаляйте одним массивом строк без разрывов. <#0> |
TSN Пользователь Сообщений: 217 |
#9 11.09.2015 14:58:27
Нет не обрезается по 240 символов, набирается Range из несвязанных строк, а 240 — это контроль Range до 256 символов для Ексель 2010 т.к. при переполнении более 256 символов возникает ошибка 1004. Удалить, вырезать, скрыть строки не имеет значения. Вариант рабочий достаточно понять принцип формирования Range и доработать под свои нужды.
Я Вам показал готовое решение (которое нужно всеголишь доработать под себя) и Вы его не увидили, поэтому в дебрях инета ничего и не нашли. Изменено: TSN — 11.09.2015 15:01:03 |
||||
bedvit Пользователь Сообщений: 2477 Виталий |
#10 11.09.2015 15:06:29 TSN, ваше решение прочитал, вполне хороший вариант- спасибо! Много полезного узнал.
Изменено: bedvit — 11.09.2015 15:13:36 «Бритва Оккама» или «Принцип Калашникова»? |
||
bedvit Пользователь Сообщений: 2477 Виталий |
JayBhagavan, к сожалению сортировать не могу, там условное форматирование, примечания, формулы и т.д. короче гемор. Только через удалением со сдвигом вверх выходит корректнее всего. «Бритва Оккама» или «Принцип Калашникова»? |
TSN Пользователь Сообщений: 217 |
Все работает на Вашем примере отлично. Заменил последнюю строку кода на строки2.Delete отработало удаление строк без проблем. Только Debug.Print строки2.Address закомментируйте будет пошустрей работать. Изменено: TSN — 11.09.2015 15:19:07 |
bedvit Пользователь Сообщений: 2477 Виталий |
#13 11.09.2015 15:23:36 TSN, да, это я специально вывел, для отслеживания адресов (для участников форума). В рабочем варианте задокументировано. Спасибо)
Изменено: bedvit — 11.09.2015 15:26:15 «Бритва Оккама» или «Принцип Калашникова»? |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#14 11.09.2015 15:40:25 Я бы проверку добавил:
и вот это:
можно записать проще:
или
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||||
bedvit Пользователь Сообщений: 2477 Виталий |
#15 11.09.2015 15:57:59 The_Prist, дельные замечания. Единственное если нужно выделятьудалять не всю строку, а например 10 первых столбцов можно оставить
Добавил проверку на пустые строки в условия отбора Range (здесь каждый решает сам, нужны ли ему пустые строки/диапазоны)
Изменено: bedvit — 11.09.2015 16:05:03 «Бритва Оккама» или «Принцип Калашникова»? |
||||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#16 11.09.2015 15:59:37
с советом. Более важная часть как раз про Is Nothing. Т.к. если не будет ни одного соответствия условию и строки2 будет пустым — получите ошибку. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
bedvit Пользователь Сообщений: 2477 Виталий |
#17 11.09.2015 16:06:55 The_Prist, понял, не обратил сразу внимания. Это в случаях, когда например, пустой столбец с условиями. Так бывает редко, но все равно добавил проверку. Спасибо! см.выше. Изменено: bedvit — 11.09.2015 16:44:28 «Бритва Оккама» или «Принцип Калашникова»? |
Макрос выделения строк с указанным словом |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
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.
asked Jun 6, 2012 at 22:12
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
8,2505 gold badges49 silver badges81 bronze badges
answered Jun 6, 2012 at 23:25
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 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 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
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
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
Автор 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 Макросы: Выделение строк через переменные