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

我是新来的优秀的VBA,我一直在寻找几个小时,我无法弄清楚这一点。 R1C1方法令我感到困惑(我一直在研究它),但这是record macro如何启动公式的。

我在Column 1有名字,我需要将Column 4所有值average ,但是只对每个Name进行average ,然后重复其他名称。 我想从“购买日”的Column 5 ,偏移(0,1)的输出。 我一直在网上search,并把我发现的其他例子的一些代码放在一起,但我仍然无法得到它。 任何帮助,将不胜感激! 谢谢!

示例表(注意:是否有任何方法来插入表?)

在这里输入图像说明

期望的结果

在这里输入图像说明

代码(到目前为止)

 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])" 

基本上我试图重新在顶部平均公式是什么在底部是什么,除了dynamic,不是特定于一个单元格。 当它现在运行它只是拉一个值,它不会做任何平均。 在单元格E6中显示=AVERAGE(D$5:D$5)

我看到你已经理解你在问题描述中混合了行和列。 所以我会告诉你做你想做的事情的习惯用Excel方式:

在这里输入图像说明

您可以在Data> Outline> Subtotal中find小计工具。

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

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

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