AFAIR Вы не можете работать с worksheet_change, потому что он не срабатывает, если вы только измените цвет фона. Самое простое решение - добавить кнопку с надписью «матрица выделения», которая просматривает ваши сенсорные данные и выделяет найденные строки в матрице.
Private Sub highlightMatrix()
Dim SensorData As Range
Dim Matrix As Range
Dim yellowRows As Collection
Dim isYellow As Boolean
Dim iColumn As Integer
Set SensorData = Worksheets.Item(1).Cells(3, 1).CurrentRegion
Set Matrix = Worksheets.Item(1).Cells(3, 10).CurrentRegion
Set yellowRows = New Collection
For Each Row In SensorData.Rows ' walk the used rows of sensordata '
isYellow = False
iColumn = 3
While iColumn >= 3 And iColumn <= 8 And isYellow = False ' identify rows with yellow marked sensordata '
If Row.Cells(1, iColumn).Interior.ColorIndex = 6 Then
isYellow = True
yellowRows.Add (Row.Row)
End If
iColumn = iColumn + 1
Wend
Next Row
Matrix.Interior.ColorIndex = xlNone ' set matrix background to default '
For Each Item In yellowRows
For Each Row In Matrix.Rows
If Row.Cells(1, 1) = Worksheets.Item(1).Cells(Item, 1) And Row.Cells(1, 2) = Worksheets.Item(1).Cells(Item, 2) Then ' color found rows red '
Row.Cells(1, 1).Interior.ColorIndex = 3
Row.Cells(1, 2).Interior.ColorIndex = 3
Row.Cells(1, 3).Interior.ColorIndex = 3
End If
Next Row
Next Item
Set yellowRows = Nothing
End Sub
Это не самый эффективный способ решения этой проблемы, но он подходит для небольших рабочих листов.
Добавление дополнительных датчиков:
Массив / коллекция yellowRows хранит порядковые номера каждой комбинации ключ1 / ключ2, которая имеет хотя бы одно значение датчика желтого цвета. Если вы хотите добавить другие датчики, вы можете добавить столбцы после текущих 6 строк датчиков (C - H) и установить строку матрицы в новую позицию столбца e. г. 13 вместо 10 и установите iColumn <= 11 вместо 8, если вы добавите 1 новый датчик с 3 столбцами. </p>
Добавление дополнительных матриц:
Чтобы добавить больше матриц, вам просто нужно добавить матрицу в заданный макет в любом месте и определить новый диапазон для матрицы, например,
Set Matrix2 = Worksheets.Item(1).Cells(100, 1).CurrentRegion 'Matrix 2 starts in the 100. row on the 1. spreadsheet in the 1. column'
затем просто скопируйте + вставьте цикл for вашей исходной матрицы (и измените Matrix.Rows в Matrix2.Rows) в циклах yellowRows (теперь у вас есть 2 цикла в цикле yellowRows)
Относительно вашего образца файла:
- Был "Конец Sub" в начале
Саб, который нужно было удалить
- Диапазон матрицы установлен неправильно
- сенсордата должна начинаться с колонки
Поскольку у вас есть столбец идентификатора, строка
If Row.Cells(1, 1) = Worksheets.Item(1).Cells(Item, 1) And Row.Cells(1, 2) = Worksheets.Item(1).Cells(Item, 2) Then ' color found rows red '
изменяется на
If Row.Cells(1, 1) = Worksheets.Item(1).Cells(Item, 2) And Row.Cells(1, 2) = Worksheets.Item(1).Cells(Item, 3) Then ' color found rows red '
цикл столбцов должен начинаться с 5 и
конец в 16
Вот модифицированный пример файла: http://www.mediafire.com/?vkbyv1n4m0t