Эту проблему легко решить с помощью Условное форматирование , VBA не требуется.
Отметьте ячейки B1 + B2, выберите Условное форматирование (из Home-Tab)), Новое правило, выберите «Использовать формулу ...», введите =$A$1=ROW()
в качестве формулы и установите для параметра Формат все, что вам нужно.
ОБНОВЛЕНИЕ (после вашего комментария, что вы хотитедля форматирования) Если диапазоны, которые вы хотите отформатировать, всегда имеют одинаковый размер и одинаковое расстояние, вы можете использовать формулу, такую как
=AND(MOD(COLUMN()-1,4)>0,INT((COLUMN()-1)/4)+1=$A$1,ROW()>=5,ROW()<=10)
. Это проверяет, находится ли строка между 5 и 10, и делит столбецна 4, чтобы проверить, в каком «блоке» вы находитесь.Mod
-часть предотвращает форматирование col A
, E
...
Если блоки, которые вы хотите отформатировать, являются более сложными, вы можете решить это с помощью UDF:
Public Function calcFormattingVal(r As Range) As Integer
If Not Intersect(Range("B5:D10"), r) Is Nothing Then
calcFormattingVal = 1
ElseIf Not Intersect(Range("F5:H10"), r) Is Nothing Then
calcFormattingVal = 2
Else
calcFormattingVal = -999
End If
End Function
Теперь поместите следующую формулу в качестве условного форматирования.Помните, что вы должны передать адрес верхней левой ячейки, с которой начинается форматирование, в качестве параметра функции.Поэтому, если вы отметите диапазон "B5:H12"
, используйте B5
в качестве параметра.
=calcformattingval(B5)=$A$1