我是excel VBA的新手,我已经搜索了几个小时,但我无法解决这个问题。 R1C1
方法令我感到困惑(我一直在研究它),但这就是record macro
启动公式的方式。
我在Column 1
中有姓名,我需要average
Column 4
中的所有值,但仅针对每个Name
,然后重复其他名称。我希望输出Column 5
,偏移(0,1)来自"购买日"。我一直在网上搜索并汇总我发现的其他例子中的一些代码,但我仍然无法得到它。任何帮助,将不胜感激!谢谢!
示例表(注意:有没有办法插入表格?)
期望的结果
代码(目前为止)
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)
。
答案 0 :(得分:1)
我知道你已经明白你在问题描述中混淆了行和列。因此,我只会向您展示您想做的事情的惯用Excel方式:
您可以在数据>中找到小计工具。概要>小计。
答案 1 :(得分:1)
之前我没有回答过两次问题,但我觉得即使我的第一个答案仍然有效,这个一个更好。您需要在单元格E2中使用此公式,然后向下复制整个列:
=IF(D2 = "Buy Day", AVERAGEIF($A:$A, A2, $D:$D), "")
仅取D列中的那些数字的平均值,其中A列中的相应符号与“购买日”行中的符号相同。它会给你你想要的结果。