Подскажите пожалуйста, как можно с помощью макроса закрасить ячейки на пересечении 2 значений (одно по строке, другое по столбцу)? С помощью условного форматирования знаю как - но мне нужно сделать это макросом. Пример прилагаю - там описаны условия и как должно выглядеть на выходе (цвет не принципиален - мне бы понять принцип). Заранее благодарю за помощь!
Добрый день!
Подскажите пожалуйста, как можно с помощью макроса закрасить ячейки на пересечении 2 значений (одно по строке, другое по столбцу)? С помощью условного форматирования знаю как - но мне нужно сделать это макросом. Пример прилагаю - там описаны условия и как должно выглядеть на выходе (цвет не принципиален - мне бы понять принцип). Заранее благодарю за помощь!Dendibar
For i = 2 To 7 Select Case Cells(i, 1).Value Case "Ф1" strSearchText = "Значение 1" Case "Ф2" strSearchText = "Значение 2" End Select For j = 2 To 4 If Cells(1, j).Value = strSearchText Then Cells(i, j).Interior.ColorIndex = 6 End If Next Next
For i = 2 To 7 Select Case Cells(i, 1).Value Case "Ф1" strSearchText = "Значение 1" Case "Ф2" strSearchText = "Значение 2" End Select For j = 2 To 4 If Cells(1, j).Value = strSearchText Then Cells(i, j).Interior.ColorIndex = 6 End If Next Next
[/vba] почему-то полностью закрашивает весь 2ой столбец и всю первую строку не зависимо от того, выполняется условие, или нет. Подскажите, в каком месте криво делаю? [moder]Оформляйте коды тегами (кнопка #)[/moder]
Karataev, большое спасибо!
Если меняю диапазоны: [vba]
Код
С For i = 2 To 7 на For i = 1 To 50
[/vba] и [vba]
Код
С For j = 2 To 7 на For j = 1 To 50
[/vba] почему-то полностью закрашивает весь 2ой столбец и всю первую строку не зависимо от того, выполняется условие, или нет. Подскажите, в каком месте криво делаю? [moder]Оформляйте коды тегами (кнопка #)[/moder]Dendibar
Сообщение отредактировал Dendibar - Понедельник, 21.03.2016, 22:52
Обратите внимание, что у меня макрос работает, начиная со 2-ой строки и со 2-го столбца, т.к. в первом столбце и первой строке находятся заголовки.
Обратите внимание, что у меня макрос работает, начиная со 2-ой строки и со 2-го столбца, т.к. в первом столбце и первой строке находятся заголовки.Karataev
Public Sub test() lName = "Лист1" lastRow = 7 Call paint("Ф1", 2, VBA.RGB(255, 0, 0)) '2-й столбец и свой цвет Call paint("Ф2", 3, VBA.RGB(0, 255, 0)) '3-й столбец и свой цвет
End Sub
Public Sub paint(str1 As String, numCol As Integer, cellColor As Long) Dim c1 As Range
With Worksheets(lName) For Each c1 In .Range(.Cells(2, numCol), .Cells(lastRow, numCol)) If c1.Offset(0, 1 - numCol).Text = str1 Then c1.Interior.Color = cellColor Next End With End Function
[/vba]
так можно [vba]
Код
Dim lName As String Dim lastRow As Integer
Public Sub test() lName = "Лист1" lastRow = 7 Call paint("Ф1", 2, VBA.RGB(255, 0, 0)) '2-й столбец и свой цвет Call paint("Ф2", 3, VBA.RGB(0, 255, 0)) '3-й столбец и свой цвет
End Sub
Public Sub paint(str1 As String, numCol As Integer, cellColor As Long) Dim c1 As Range
With Worksheets(lName) For Each c1 In .Range(.Cells(2, numCol), .Cells(lastRow, numCol)) If c1.Offset(0, 1 - numCol).Text = str1 Then c1.Interior.Color = cellColor Next End With End Function
Согласно примера For i = 2 To 7 - Цикл прохода по строкам со 2-й по 7-ю For j = 2 To 4 - Цикл прохода по столбцам со 2-го по 4-й внутри цикла по строкам. Вы поставили For i = 1 To 50 и For j = 1 To 50 У вас там что 50 строк и 50 столбцов? Покажите, что вы там намудрили, автор макроса тоже не экстрасенс.
Согласно примера For i = 2 To 7 - Цикл прохода по строкам со 2-й по 7-ю For j = 2 To 4 - Цикл прохода по столбцам со 2-го по 4-й внутри цикла по строкам. Вы поставили For i = 1 To 50 и For j = 1 To 50 У вас там что 50 строк и 50 столбцов? Покажите, что вы там намудрили, автор макроса тоже не экстрасенс.Wasilich
Спасибо Всем огромное за помощь и подробные объяснения - очень выручили! Все варианты подошли. Отедельное спасибо al-Ex - самый удобный вариант, так как не привязан к конкретному диапазону)
Спасибо Всем огромное за помощь и подробные объяснения - очень выручили! Все варианты подошли. Отедельное спасибо al-Ex - самый удобный вариант, так как не привязан к конкретному диапазону)Dendibar