Colors Excel VBA中基于单元格颜色的值计算
代码显示了基于定义单元格中的值的简单平均值计算。这些单元格以三种颜色高亮显示。目的是将数值纳入计算中,以确定哪种单元格颜色为绿色。我知道需要“if”命令,但我不知道该放在哪里:Colors Excel VBA中基于单元格颜色的值计算,colors,formula,average,calculation,Colors,Formula,Average,Calculation,代码显示了基于定义单元格中的值的简单平均值计算。这些单元格以三种颜色高亮显示。目的是将数值纳入计算中,以确定哪种单元格颜色为绿色。我知道需要“if”命令,但我不知道该放在哪里: 我将假设整行不是绿色的,并且需要独立地查看每一列 从H到U循环遍历每列。循环遍历每列中的每个单元格。构建绿色单元格的并集,并平均该并集。转到下一列 没有必要为每列构建公式,因为任何更改都需要重新运行子过程。这些将用于手动设置和条件格式的单元格颜色 .DisplayFormat在用户定义的函数中不起作用 dim c as
我将假设整行不是绿色的,并且需要独立地查看每一列 从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
候补
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
因此,您需要独立地检查H:U中每列中的每个单元格。使用UDF可能更好。“颜色”是手动设置的还是有条件格式化的?颜色是预先有条件设置的。UDF代表什么?谢谢你的努力。“颜色”是手动设置的还是有条件的格式?它们是有条件的格式。为了清晰起见,我刚刚上传了一张图片。谢谢你的代码,我明天会试用的。非常感谢您将要确定您在CFR中使用的确切绿色色调。可能是vbGreen,可能是RGB(146,208,80),也可能是其他。我用过“vbGreen”。ThxHi开玩笑说,代码工作得很好。但是,我希望单元格中包含的公式不仅仅是计算值。我尝试了以下操作:。单元格(104,c)。公式=“=Average(rng)”,但效果不太好。您不能直接在工作表公式中使用vba范围。但是,您可以使用它的地址。
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