【问题标题】:Excel-VBA: Do a calculation only if cells involve contain valuesExcel-VBA:仅当单元格包含值时才进行计算
【发布时间】:2013-12-17 19:10:46
【问题描述】:

我的代码可以很好地计算出我想要的平均值。但现在我希望它只在引用的单元格包含值时运行计算。我完全不知道如何将条件输入我的代码。

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 中工作。

我们将不胜感激。

*编辑 - 我只希望平均线出现在单元格中,但我想在计算之前测试单元格的值。 (悉达多,谢谢你的回答!)澄清一下:

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 语句给我带来了麻烦,因为当我到达代码中的那个点时,我不断收到错误消息。我也试过:

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

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

【问题讨论】:

  • 如果单元格没有值,您希望单元格保持空白(没有值或公式)?
  • 当 i 的值 R[-4] 有点混淆
  • 如果在Excel中直接把公式说F2,会是什么?
  • 蒂姆,没错。 Siddharth - 它循环到列的底部,该列也没有任何值。
  • 我删除了我的帖子。让我在里面返工并回帖

标签: excel average vba


【解决方案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

【讨论】:

  • 很高兴听到这个消息:)
  • 但是在平均值出现在单元格中之前,我怎么能做到这一点?
  • 我没有明白你的意思
  • 我只希望我的方程式以 "=AVERAGE(..." 开始
  • 你为什么不试试这个然后=AVERAGE(IF(Rows(rng)&lt;&gt;COUNTA(rng)-2,rng,"Blank")) 你可以从我上面的代码中获取rng
猜你喜欢
  • 2022-06-29
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
相关资源
最近更新 更多