Использование VBA для выбора и выделения строк Excel

Как указать Excel выделять строки по их номеру. Например, скажем, я хотел выделить строки 6, 10, 150, 201. Спасибо.


Вот еще один, основанный на .EntireRow.Interior.ColorIndex

Mote. ‘не ограничивает вас вводом номеров строк, но дает пользователю гибкость в выборе строк во время выполнения.

  Option ExplicitSub Sample () Dim Ret As Range On Error Resume Next Set  Ret = Application.InputBox («Пожалуйста, выберите строки, которые вы хотите раскрасить», «Цветные строки», Тип: = 8) При ошибке GoTo 0 Если нет Ret Is Nothing, то Ret.EntireRow.Interior.ColorIndex = 6End Sub  

FOLLOWUP

Есть ли способ написать макрос для чтения номеров строк из список и выделить строки?

Да, есть способ. Скажем, список в ячейках от A1 до A10, тогда вы можете использовать этот код

  Option ExplicitSub Sample () Dim i As Long, sh As Worksheet On Error GoTo Whoa Application.ScreenUpdating =  False '~~> Установите это на лист, на котором нужно раскрасить строки. Set sh = Sheets ("Sheet2")' ~~> Измените Sheet1 на лист, который имеет список With Sheets ("Sheet1") For i = 1  До 10 Если не Len (Trim (.Range ("A" & i) .Value)) = 0 And _ IsNumeric (.Range ("A" & i) .Value) Then _ sh.Rows (.Range ("A  "& i) .Value) .Interior.ColorIndex = 3 ' 

5

В качестве альтернативы ответу Motes вы можете использовать условное форматирование.

Например: выберите A1: J500, Условное форматирование >> Новое правило >> Использовать формулу …

Для формулы введите: = OR (ROW () = 6, ROW () = 10, ROW () = 150, ROW () = 201)

ответил 06 июня ’12 в 22:38
добавить комментарий |

В качестве альтернативы ответу Моутса вы можете использовать условное форматирование.

Например: выберите A1: J500, Условное форматирование >> Новое правило >> Использовать формулу …

Для формулы введите: = OR (ROW () = 6, ROW () = 10, ROW () = 150, ROW () = 201)


4

Для базового кода VBA вы всегда можете начать запись макроса, выполнить действие, остановить запись, посмотреть, какой код был сгенерирован, а затем очистить его, чтобы сделать то, что вы хотите. Например, запись действия выделения строки (установка значения Interior.Color) дает вам:

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

Команды выбора и посторонние внутренние свойства могут быть удалены дает вам:

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

Добавление в строку нескольких выберите:

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

Сводка:

  • Запись макроса
  • Просмотр версии Excel
  • Используйте/редактируйте нужный код
ответил 6 июня ’12 в 22:36
  • +1 за подробный ответ 🙂 – Siddharth Rout 6 июня 2012, 23:18
добавить комментарий |

Для базового кода VBA вы всегда можете начать запись макроса, выполнить действие, остановить запись, посмотреть, какой код был сгенерирован, и затем очистите это, чтобы делать то, что вы хотите. Например, запись действия выделения строки (установка значения Interior.Color) дает вам:

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

Команды выбора и посторонние внутренние свойства могут быть удалены дает вам:

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

Добавление в строку нескольких выберите:

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

Сводка:

  • Запись макроса
  • Просмотр версии Excel
  • Используйте/редактируйте нужный код

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

и т. Д.

отредактировано 24 февраля ’17 в 06:54
ответил 06 июня ’12 в 22:16
добавить комментарий |

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

и т. Д.


0

Обновление: не понял дату на этом, но подумал, что добавлю это, поскольку это имеет отношение к выбранному ответу.

В дополнение к Ответ Сиддхарта Роута, поскольку у меня пока недостаточно комментариев для комментариев, вы можете динамически определить, сколько строк на вашем листе с этими двумя строками. xlCellTypeConstants можно изменить на другую константу XlCellType, которая вам нужна, а диапазон всегда можно изменить в соответствии с таблицей.

  Dim numRows  Как IntegernumRows = Range ("A2", Range ("A1048576"). End (xlUp)). SpecialCells (xlCellTypeConstants) .Cells.Count  

ответил 17 марта 2015, в 19:56
комментировать |

Обновление: не понял дату на этом, но подумал, что добавлю это, так как это имеет отношение к выбранному ответу.

В дополнение к ответу Сиддхарта Роута, поскольку у меня еще недостаточно репутации для комментариев, вы можете динамически вычислить, сколько строк на вашем листе с этими двумя строками. xlCellTypeConstants можно изменить на другую константу XlCellType, которая вам нужна, а диапазон всегда можно изменить в соответствии с таблицей.

  Dim numRows  Как IntegernumRows = Range ("A2", Range ("A1048576"). End (xlUp)). SpecialCells (xlCellTypeConstants) .Cells.Count  

0

Извините, если он не такой краткий или элегантный, как другие ответы, но он выполняет свою работу. Когда я писал код для своего собственного приложения, мне нужно было перебрать мой код в цикле. Кроме того, вместо выделения всей строки мне нужно было выделить только часть строк.

  Sub Highlight () Dim ThisWB As WorkbookDim ThisWS As WorksheetDim rows (0 to 3  ) As IntegerDim test As StringSet ThisWB = ActiveWorkbookSet ThisWS = ThisWB.Sheets ("Sheet1") rows (0) = 6rows (1) = 10rows (2) = 150rows (3) = 201For i = 0 To 3 test = "A"  & rows (i) & ": H" & rows (i) ThisWS.Range (test) .Interior. ColorIndex = 15Next iEnd Sub  

ответил 28 июня ‘ 16, 19:45
добавить комментарий |

Извините, если он не такой краткий или элегантный, как другие ответы, но он выполняет свою работу. Когда я писал код для своего собственного приложения, мне нужно было перебрать мой код в цикле. Кроме того, вместо выделения всей строки мне нужно было выделить только часть строк.

  Sub Highlight () Dim ThisWB As WorkbookDim ThisWS As WorksheetDim rows (0 to 3  ) As IntegerDim test As StringSet ThisWB = ActiveWorkbookSet ThisWS = ThisWB.Sheets ("Sheet1") rows (0) = 6rows (1) = 10rows (2) = 150rows (3) = 201For i = 0 To 3 test = "A"  & rows (i) & ": H" & rows (i) ThisWS.Range (test) .Interior.ColorIndex = 15Next iEnd Sub  

0

Вы можете добиться того же, используя условное форматирование

  • помещаю список значений в столбец (я использую отдельную вкладку и даю списку имя)
  • в условном форматировании – Новое правило – «использовать формулу для определения с ячейками для форматирования»
  • прочтите эту статью http://www.howtogeek.com/howto/45670/how-to-highlight-a-row-in-excel-using-conditional-formatting/
  • правило использует vlookup в формуле- = $ A2 = VLOOKUP ($ A2, list, 1, FALSE)

ответил 5 августа 2016 в 14:43
добавить комментарий |

Вы могли бы добиться того же, используя условное форматирование

  • put list значений в столбце (я использую отдельную вкладку и даю списку имя)
  • при условном форматировании – Новое правило – «использовать формулу для определения с ячейками для форматирования»
  • прочтите эту статью http://www.howtogeek.com/howto/45670/how-to-highlight-a-row-in-excel-using-conditional-formatting/
  • правило использует vlookup в формуле- = $ A2 = VLOOKUP ($ A2, list, 1, FALSE)


Макрос VBA – выделение Строка для дополнений ИЛИ ячейка для изменений

Привет всем!

Хорошо, у меня есть шаблон для другого отдел, который я развиваю. Мне нужно добавить условное форматирование через VBA. Мне удалось найти код на форумах и модифицировать его. Он как есть соответствует одному из двух моих требований, но есть одно изменение, которое я хотел бы (диапазон). Мне просто нужен второй код или модификация этого кода. Я все еще новичок в кодировании Worksheet_Change. Код, который я нашел, работает для «часть 2 ниже»

Часть 1 – Любая НОВАЯ запись потребует выделения всей строки (я рекомендую оранжевым или желтым … без предпочтений).
– Диапазон данных – столбцы A – DD
– Количество строк будет меняться от недели к неделе, поскольку это глобальная книга (поэтому я бы предпочел не указывать конкретный диапазон)
– Ключевая ячейка, которая будет указывать на запись, в столбце C находится идентификатор сотрудника.
– Например, сейчас у меня 1377 строк данных
– Если я добавлю что-то в ячейку A1378 или B1378, моя “Часть 2 “VBA включится и выделит ячейку (цвет # 38) розовым или чем-то еще. Если данные были введены в ячейку C1378, то вся строка (A1378: DD1378) будет выделена желтым (или оранжевым).
– Я хочу, чтобы сценарий «добавления» запускался изначально
– Многие из этих ячеек являются формулами в других столбцах, вероятно, что другая ячейка в диапазоне AA: DD, хотя строка была добавлена, может потребовать от пользователя перезаписать ее.
– В этом случае строка будет желтый (или оранжевый), чтобы указать, что это была добавленная строка, но тогда он также может содержать несколько ячеек lpink для обозначения перезаписанных ячеек

Часть 2 – отдельные ячейки меняются на розовый (цвет # 38) при изменении.
– Во второй строке кода, мне бы хотелось это, если диапазон не ограничен
– Этот процесс существенно растет
– Расчет заработной платы за две недели имеет в отличии 25000 строк
– Диапазон может зависеть от того, имеет значение в столбце C
– Столбец C – это идентификатор сотрудника, который является движущей силой всех транзакций

Код
  1. Private Sub Worksheet_Change (ByVal Целевой как диапазон)
  2. Const WS_RANGE As String = “A2: DD2500”
  3. При ошибке GoTo ws_exit:
  4. Application.EnableEvents = False
  5. Если не пересекается (Target, Me.Range (WS_RANGE)), то ничего не значит
  6. С целью
  7. .Interior.ColorIndex = 38
  8. Завершить на
  9. End If
  10. ws_exit:
  11. Application.EnableEvents = True
  12. End Sub

Показать больше


Привет ,

Может вы публикуете образец файла от 10 до 15 строк … (с анонимными данными …)

Мне кажется, что весь процесс необходимо пересматривать в свете ваших 650 000 записей в год …


Карим —-

Я создал частичный файл … не со всеми столбцами. Я думаю, что попал в колонку AD. Имена, адреса, имя сотрудников, ставки заработной платы … это все фиктивные данные, но они представляют собой тип даты, которая будет заполнена. Большинство типов данных, которые будут отображаться на этом листе, представляют собой числовые значения и суммы в долларах, а около 75% рабочего листа – формулы.. Теперь этот рабочий лист называется Sheet3 (хотя и не в этом примере), а кодовое имя также Sheet3. Я хотел бы иметь возможность использовать кодовое имя, а не имя листа, так как я не могу контролировать, решит ли пользователь переименовать лист.


Привет, Шерри,

Прикреплен ваш тестовый файл …

Быстро добавил щелчок правой кнопкой мыши, чтобы очистить все внутренние цвета …


Carim,

Работает отлично. Я скорректировал скрипт для

Code
  1. Target .Row, 30

, которые у вас есть для моего файла примера до 108 столбцов для моего фактического файла. Он по-прежнему работал отлично. Но потом я понял, что когда люди добавляются, у меня есть сценарий, который копирует формулы во все строки с данными. И это работает отлично … за исключением того, что теперь у меня есть ваш замечательный скрипт выделения, форматирование было перезаписано, потому что мой скрипт “формулы” использует для этого это “Автозаполнение”. Есть ли лучший способ, чтобы этот сценарий мог копировать формулы (первая строка данных всегда – это строка 2, заголовки в строке 1) и копировать полностью вниз? Мне нравится ваш сценарий, и это именно то, что мне нужно. Как и этот скрипт для формул … Мне просто нужен способ, чтобы мой скрипт UpdateFormulas НЕ перезаписывал форматы, созданные вашим выделением. Как я, возможно, уже упоминал, этот шаблон предназначен для другого отдела, поэтому такие вещи должны быть на месте. Ниже мой код для обновления всех формул при добавлении данных. Пожалуйста, простите за грубое кодирование, поскольку я еще новичок.

Код
  1. Sub UpdateFormulas ()
  2. ‘Оптимизация скорости макросов
  3. Application.ScreenUpdating = False
  4. Application.EnableEvents = False
  5. Application.Calculation = xlCalculationManual
  6. ‘Имя листа и расположение столбца, которые нужно удалить
  7. Sheet3.Select
  8. ‘Диапазон ячеек, в которых находятся формулы
  9. ‘ Должен существовать столбец для обозначения формулы.
  10. Диапазон (“I2”) .AutoFill Destination: = Range (“I2: I” & Cells (Rows.Count, “B”). End (xlUp) .Row)
  11. Range (“AC2”). Назначение автозаполнения: = Range (“AC2: AC” & Cells (Rows.Count, “B”). End (xlUp) .Row)
  12. Range (“AJ2″). Назначение автозаполнения: = Range (” AJ2: AJ “& Cells (Rows.Count,” B “). End (xlUp) .Row)
  13. Range (” AL2 “). Назначение автозаполнения: = Range (” AL2: AL ” & Ячейки (Rows.Count, “B”). End (xlUp) .Row)
  14. Range (“AT2”). Автозаполнение места назначения ция: = Range (“AT2: AT” & Cells (Rows.Count, “B”). End (xlUp) .Row)
  15. Range (“BH2: CH2”). Назначение автозаполнения: = Диапазон (“BH2: CH” & Cells (Rows.Count, “B”). End (xlUp) .Row)
  16. Range (“CJ2: DD2”). Назначение автозаполнения: = Диапазон («CJ2: DD» и ячейки (Rows.Count, «B»). Конец (xlUp). Строка)
  17. ‘Имя листа и расположение столбца для удаления
  18. Sheet4.Select
  19. ‘Диапазон ячеек, в которых находятся формулы
  20. ‘ Должен существовать столбец для обозначения формулы.
  21. Диапазон (“I2”). Назначение автозаполнения : = Range (“I2: I” & Cells (Rows.Count, “B”). End (xlUp) .Row)
  22. Range (“AC2”). Назначение автозаполнения: = Range ( «AC2: AC» и ячейки (Rows.Count, «B»). End (xlUp) .Row)
  23. Range («AJ2»). Назначение автозаполнения: = Range («AJ2: AJ “& Cells (Rows.Count,” B “). End (xlUp) .Row)
  24. Range (” AL2 “). Назначение автозаполнения: = Range (” AL2: AL “& Cells ( Rows.Count, “B”). End (xlUp) .Row)
  25. Range (“AT2”). Назначение автозаполнения: = Range (“AT2: AT” & Cells (Rows.Count, “B”). End (xlUp) .Row)
  26. Range (“BH2: CH2”). Назначение автозаполнения: = Range (“BH2: CH” & Cells (Rows.Count, “B “) .End (xlUp) .Row)
  27. Range (” CJ2: DE2 “). Назначение автозаполнения: = Range (” CJ2: DE “& Cells (Rows.Count,” B “) .End (xlUp) .Row)
  28. ‘активирует лист с определенным именем
  29. ‘Activ Включает вкладку «Основные» (Sheet2)
  30. Sheet2.Activate
  31. ResetSettings:
  32. ‘Сбросить настройки макрооптимизации
  33. Application.EnableEvents = True
  34. Application.Calculation = xlCalculationAutomatic
  35. Application.ScreenUpdating = True
  36. End Sub

Показать больше

ПРИМЕЧАНИЕ. Я просто проводил дополнительное тестирование кода выделения “добавить” и заметил кое-что, что я не знаю, сможете ли вы добавить. Если мы добавим Джона Смита, все его данные и формулы, строка будет оранжевой … но если одна ячейка должна быть перезаписана, она все равно должна измениться на розовый (эта одна ячейка), несмотря на то, что строка будет оранжевой. Перезапись отдельных ячеек в основном происходит, когда в ячейке есть формула, которая заменяется значением или другой формулой. Мы должны видеть их визуально, отсюда и розовый цвет. Я должен был это указать. Очевидно, вы не можете знать, о чем я думаю, извините за это.


Рад слышать, что вы движетесь в правильном направлении …

Что касается макроса UpdateFormulas … есть несколько возможностей …

Вы могли бы преобразовать свою базу данных в таблицу

Однако почему вы копируете из строки 2 полностью вниз?

Все существующие строки уже обновлены …

Запуск с последней использованной строки повысит производительность вашего листа …

Относительно вашего способа добавления новых записей: как это сделано …?


Мне нужно сохранить вещи в основном в том же формате, поскольку этот шаблон будет использоваться несколькими другими пользователями. В моей компании есть строгие протоколы.. даже глупые вещи. Чтобы преобразовать базу данных в таблицу, мне нужно получить разрешение от «сильных мира сего». Я мелкий подрядчик, поэтому мне сейчас нужно «раскрашивать между строк».

– Почему я копирую из строки 2 вниз для формул? Честно говоря, потому что я не знаю, как закодировать его для копирования из последней строки, содержащей формулы, вниз. Это был бы лучший способ. Но поскольку я еще новичок, а объем данных постоянно меняется, я просто понятия не имел. Я бы предпочел вставить формулы из последней строки существующей строки формул. Я согласен, начиная с последнего ряда формул была бы лучшая производительность, это сводится к недостатку знаний с моей стороны.
– Добавляя новые записи, я, честно говоря, не знаю, это не процесс, я полностью знаком с. Я – ОЧЕНЬ подробный процесс расчета заработной платы для государственных контрактов. Существует множество переменных, и иногда расчет формулы требует перезаписи в виде значения или исправленной формулы. Я просмотрел предыдущие книги, и там есть множество выделенных ячеек и строк, которые были раскрашены вручную для этой цели. Это происходит постоянно (и пользователи всегда выбирают ВСЮ строку, а не только 103 фактических столбца в пределах диапазона).

Моя роль – оптимизировать и автоматизировать процесс. Конечный пользователь тратит так много времени на форматирование, вставку столбцов, копирование и вставку формул из предыдущей книги, и этот список можно продолжить! Выделение измененных ячеек и строк


Честно говоря … мне вас очень жаль … !!!

Очень грустно (и почти невероятно …) слышать, что вы не имеете права использовать Excel таким образом, чтобы каждый мог работать более продуктивно …

Хочу пожелать вам удачи в попытках оптимизировать ваш процесс … в рамках наложенных на вас глупых ограничений …: smash:


Спасибо, Карим, за вашу помощь. Это очень ценится. И я согласен … Я тоже не мог в это поверить, когда я попытался внести некоторые простые изменения (по крайней мере, я так думал), и был отключен.


Не стесняйтесь приходить назад на форум … для новых вопросов … надеюсь, с меньшими ограничениями …: wink:


Карим,
Большое спасибо! Некоторые вещи требуют одобрения нашей штаб-квартиры в другой стране … и, честно говоря, это просто глупо! Но мне нужна зарплата. И да, я вернусь. Еще раз спасибо за вашу помощь!

~~ Шерри


Карим,

Надеюсь, вы можете помочь. Был изменен запрос на этот макрос выделения. Код ниже – это то, что вы мне предоставили в последний раз. Мне нужно, чтобы эти макросы выполнялись ТОЛЬКО, когда пользователь делает что-то ВРУЧНУЮ с книгой. Если пользователь запускает макрос для импорта или копирования данных на листы в книге, ничего не должно выделяться. Однако, если пользователь вручную добавляет новую строку в книгу, эта строка (столбцы A-DD) будет выделена оранжевым цветом (индекс цвета 46). Я провел UAT с пользователем сегодня, и мне посоветовали, что пользователь выберет похожую строку и скопирует/вставит эту строку в 1-ю пустую строку, чтобы пользователь вручную изменил любые особенности. В этом случае вся строка (A-DD) должна быть оранжевой, а затем, когда каждая ячейка будет изменена пользователем, только эти ячейки будут розовыми.
Пользователь копирует запись сотрудника, вставляет в новую строка. Затем меняет имя сотрудника, emp #, дату начала, должность и т. Д. Только те измененные ячейки розового цвета, остальные остаются оранжевыми. Возможно ли это?

Код
  1. Option Explicit
  2. Private Sub Worksheet_Change (ByVal Target As Range)
  3. Если Target.Row = 1, то выйдите из Sub
  4. Dim i As Double
  5. i = ActiveSheet.Cells (Application.Rows.Count , “A”). End (xlUp) .Row
  6. Application.Calculation = xlCalculationManual
  7. Application.EnableEvents = False
  8. Если Target.Row> i Then
  9. Range (Cells (Target.Row, 1), Cells (Target.Row, 108)). Interior.ColorIndex = 46
  10. ElseIf Target.Row
  11. Target.Interior.ColorIndex = 38 ‘
  12. End If
  13. Application.EnableEvents = True
  14. Application.Calculation = xlCalculationAutomatic
  15. End Sub
  16. Private Sub Worksheet_BeforeRightClick (ByVal Target As Range, Cancel As Boolean)
  17. ‘Щелкните правой кнопкой мыши, чтобы очистить цвета
  18. Если Target.Row = 1 Затем выйдите из Sub
  19. Dim i As Double
  20. i = ActiveSheet.Cells (Application.Rows.Count, “A”). End (xlUp) .Row
  21. Application.Calculation = xlCalculationManual
  22. Application.EnableEvents = False
  23. If Target.Row> i Then
  24. Range (Cells (Target.Row, 1), Cells (Target.Row, 108)). Interior.ColorIndex = xlNone
  25. ElseIf Target.Row
  26. Target.Interior.ColorIndex = xlNone
  27. End If
  28. Application.EnableEvents = True
  29. Application.Calculation = xlCalculationAutomatic
  30. Cancel = False
  31. End Sub

Показать больше


Шерри,

Как вы очень хорошо знаете, есть два типа макросов:

1. Стандартные макросы

2. Макросы событий

Стандарт требует, чтобы пользователь запускал запрос через меню, ярлык или кнопку

Макрос события запускается действием, выполняемым пользователем

Итак, самое первое решение, которое вы должны принять, – какой маршрут вы хотите выбрать …

Затем второе решение связано с тем, что именно вам нужно отслеживать … и, следовательно, выделять …

Надеюсь, это поможет

Оцените статью
futurei.ru
Добавить комментарий