Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Colors Excel VBA中基于单元格颜色的值计算_Colors_Formula_Average_Calculation - Fatal编程技术网

Colors Excel VBA中基于单元格颜色的值计算

Colors Excel VBA中基于单元格颜色的值计算,colors,formula,average,calculation,Colors,Formula,Average,Calculation,代码显示了基于定义单元格中的值的简单平均值计算。这些单元格以三种颜色高亮显示。目的是将数值纳入计算中,以确定哪种单元格颜色为绿色。我知道需要“if”命令,但我不知道该放在哪里: 我将假设整行不是绿色的,并且需要独立地查看每一列 从H到U循环遍历每列。循环遍历每列中的每个单元格。构建绿色单元格的并集,并平均该并集。转到下一列 没有必要为每列构建公式,因为任何更改都需要重新运行子过程。这些将用于手动设置和条件格式的单元格颜色 .DisplayFormat在用户定义的函数中不起作用 dim c as

代码显示了基于定义单元格中的值的简单平均值计算。这些单元格以三种颜色高亮显示。目的是将数值纳入计算中,以确定哪种单元格颜色为绿色。我知道需要“if”命令,但我不知道该放在哪里:


我将假设整行不是绿色的,并且需要独立地查看每一列

从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