Excel 2010 VBA - 根据A列中的名称计算平均值

时间:2014-02-20 01:10:05

标签: excel vba excel-vba

我是excel VBA的新手,我已经搜索了几个小时,但我无法解决这个问题。 R1C1方法令我感到困惑(我一直在研究它),但这就是record macro启动公式的方式。

我在Column 1中有姓名,我需要average Column 4中的所有值,但仅针对每个Name,然后重复其他名称。我希望输出Column 5,偏移(0,1)来自"购买日"。我一直在网上搜索并汇总我发现的其他例子中的一些代码,但我仍然无法得到它。任何帮助,将不胜感激!谢谢!

示例表(注意:有没有办法插入表格?)

enter image description here

期望的结果

enter image description here

代码(目前为止)

Dim LastRow2 As Long
Dim rng As Range
Dim r1 As Long, r2 As Long
Dim lNoRows As Long

LastRow2 = Sheets("Sheet2").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Set rng = Sheets("Sheet2").Range("A2:D" & LastRow2)
lNoRows = rng.Rows.Count

For r1 = 1 To lNoRows
    If rng(r1, 4) = "Buy Day" Then
        For r2 = 1 To lNoRows
            If rng(r1, 1) = rng(r2, 1) And r1 = r2 Then _
                rng(r2, 5).FormulaR1C1 = "=AVERAGE(R" & r2 & "C[-1]:R" & r2 & "C[-1])"
        Next r2
    End If
Next r1

Range("K9").FormulaR1C1 = "=Average(R[-7]C[-7]:R[1]C[-7])"

基本上我尝试在顶部平均公式中重新创建的是底部的公式,除了动态,不是特定于一个单元格。当它现在运行它只是拉入一个值,它没有做任何平均。在单元格E6中,它显示=AVERAGE(D$5:D$5)

2 个答案:

答案 0 :(得分:1)

我知道你已经明白你在问题描述中混淆了行和列。因此,我只会向您展示您想做的事情的惯用Excel方式:

enter image description here

您可以在数据>中找到小计工具。概要>小计。

答案 1 :(得分:1)

之前我没有回答过两次问题,但我觉得即使我的第一个答案仍然有效,这个一个更好。您需要在单元格E2中使用此公式,然后向下复制整个列:

=IF(D2 = "Buy Day", AVERAGEIF($A:$A, A2, $D:$D), "")

仅取D列中的那些数字的平均值,其中A列中的相应符号与“购买日”行中的符号相同。它会给你你想要的结果。