Excel-VBA:仅在单元格包含值时才进行计算

时间:2013-12-17 19:10:46

标签: excel-vba average vba excel

我有很好的计算我想要的平均值的代码。但是现在我希望它只在引用的单元格包含值时才运行计算。我完全不知道如何将条件提供给我的代码。

Dim i%
Dim rng As Range
Dim last&
last = Range("A65536").End(xlUp).Row
    For i = 2 To last
        Range("F" & i).FormulaR1C1 = _ 
            "=AVERAGE(R[-4]C[-2],R[-2]C[-2],RC[-2],R[2]C[-2],R[5]C[-2],)"
    Next i
End Sub

我尝试过使用AVERAGEIF,但我也无法让它工作。每当我尝试使用函数向导设置它时,范围给出了范围内的#Value。所以我不知道如何让它在VBA中运行。

任何和所有帮助将不胜感激。

*编辑 - 我只希望平均线出现在单元格中,但我想在进行计算之前测试单元格的值。 (Siddharth,无论如何,谢谢你的回答!)澄清:

Dim i%
Dim rng As Range
Dim last&
last = Range("A65536").End(xlUp).Row
    For i = 2 To last
     'test for all cells having values here   
        Range("F" & i).FormulaR1C1 = _ 
            "=AVERAGE(R[-4]C[-2],R[-2]C[-2],RC[-2],R[2]C[-2],R[5]C[-2],)"
    Next i
End Sub

***编辑2:为了更清楚我正在寻找什么,我想要这样的事情:

Dim i%
Dim last&

last = Range("A65536").End(xlUp).Row
For i = 2 To last
    While Range("D" & i - 4).Value <> "" And Range("D" & i + 4).Value <> ""
        Range("F" & i).FormulaR1C1 = _ 
                 "AVERAGE(R[-4]C[-2],R[-2]C[-2],RC[-2],R[2]C[-2],R[5]C[-2]))"
    Wend
Next i

但我的同时声明给了我麻烦,因为当我在代码中达到这一点时,我一直收到错误。我也试过了:

While Range("D" & i - 4 And "D" & i + 4).Value <> ""

这给了我运行时错误13:类型不匹配。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您需要检查范围内的单元格数是否等于填充值的数量。例如

Sub a()
    Dim i%
    Dim rng As Range
    Dim last&
    last = Range("A65536").End(xlUp).Row

    For i = 2 To last
        Range("F" & i).FormulaR1C1 = "=if(" & _
                     "Rows(R[-4]C[-2])+Rows(R[-2]C[-2])+Rows(RC[-2])+Rows(R[5]C[-2])<>" & _
                     "COUNTA(R[-4]C[-2],R[-2]C[-2],RC[-2],R[2]C[-2],R[5]C[-2],)-2,""Blank""," & _
                     "AVERAGE(R[-4]C[-2],R[-2]C[-2],RC[-2],R[2]C[-2],R[5]C[-2],))"
    Next i
End Sub