Я предполагаю, что целые строки не являются зелеными, и что каждый столбец должен просматриваться независимо.
Циклически перебирает каждый столбец от H до U. Циклически перебирает каждую ячейку в каждом столбце.Создайте объединение зеленых ячеек и среднее объединение.Перейдите к следующему столбцу.
Нет смысла создавать формулу для каждого столбца, поскольку любое изменение потребует повторного запуска подпроцедуры.Они будут работать как с ручными, так и с условно отформатированными цветами ячеек.
.DisplayFormat не работает в определяемой пользователем функции.
dim c as long, r as long, rng as range
with worksheets("sheet1")
for c =8 to 21
for r=2 to 103
if .cells(r, c).displayformat.interior.color = vbgreen then
if rng is nothing then
set rng = .cells(r, c)
else
set rng = union(rng, .cells(r, c))
end if
end if
next r
if not rng is nothing then _
.cells(104, c) = application.average(rng)
'alternate
'if not rng is nothing then _
'.cells(104, c).formula = "=average(" & rng.address(0,0) & ")"
next c
end with
Alternate,
dim c as long
with worksheets("sheet1")
if .autofiltermode then .autofiltermode = false
for c =8 to 21
with .range(.cells(1, c), .cells(103, c))
.AutoFilter Field:=1, Criteria1:=vbgreen, Operator:=xlFilterCellColor
.cells(104, c) = application.subtotal(101, .cells)
.AutoFilter
end with
next c
end with