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

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


person Dan    schedule 06.06.2012    source источник


Ответы (7)


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

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

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

ПОСЛЕДУЮЩИЕ

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

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

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
person Siddharth Rout    schedule 06.06.2012
comment
Привет, просто быстрое уточнение, я должен был включить его раньше. Электронная таблица содержит несколько тысяч записей (строк). Есть ли способ написать макрос для чтения номеров строк из списка и выделения строк? Это ежедневный отчет, который я просматриваю. Я хотел бы автоматизировать столько, сколько я могу. Затем я могу фильтровать по цвету и просто видеть те, которые мне нужны. - person Dan; 07.06.2012
comment
Да, вы можете это сделать. Обновление поста. - person Siddharth Rout; 07.06.2012

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

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

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

person Tim Williams    schedule 06.06.2012

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

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

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

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

Добавление в строку множественного выбора:

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

Резюме:

  • Записать макрос
  • Посмотреть версию Excel
  • Используйте/редактируйте код, который вам нужен
person Steve Konves    schedule 06.06.2012
comment
+1 за подробный ответ :) - person Siddharth Rout; 07.06.2012

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

так далее

person Motes    schedule 06.06.2012

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

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

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

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

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
person Ray    schedule 28.06.2016

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

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