我有一个包含2个工作表的工作簿。在Sheet1上是ColC中的名称列表,而在C列中的Sheet2上是相同的名称列表,但是与列D中的数据间隔开,每个名称几乎都与标题相关。即
Ben 678
700
450
200
Janet 9
23
所以我需要一个vlookup函数来查找ColC Sheet1中的名称,然后在ColC Sheet2中找到相应的名称,并在ColD中对该名称的值进行平均值,直到ColC中的值发生变化(以及下一个)名称出现)。每个名称的ColD中的值的数量在1到100之间变化,因此没有设置范围。
(我正在寻找一个解决方案来计算下一个出现之前每个名字的最后6个值的平均值 - 但是我可以尝试在我有一个结构后自己修改它。)
我熟悉VBA,但没有专家,这超出了我的能力 - 我已经尝试了几个小时但没有运气。我也有这个代码做类似的事情(我在论坛上发现它)但只粘贴一个值,我无法修改它以满足我的需要 - 它使用VBA将公式放在特定的单元格中。 (这很没用,但我认为这是一个开始)
Sub MCInternet()
'CODE OFF WEB FOR RETURNING VALUE IN COL ... AFTER A LOOKUP OF VALUE IN RANGE - DOESNT ADDRESS RANGE JUST SINGLE CELL
Dim Cll As Range
Dim lngLastRow As Long
lngLastRow = Cells(rows.count, "C:C").End(xlUp).Row
'Sheets("Unpaid List").Range("H2:H" & lngLastRow).ClearContents
For Each Cll In Sheets("Sheet2").Range("C1:C" & Sheets("Sheet2").Range("C1").End(xlDown).Row)
'Cll.Offset(, 6).Formula = "=Vlookup(" & Cll.Address & ", " & Sheets("Sheet1").Name & "!A:C,1,False)"
Cll.Offset(, 6).Formula = "=Vlookup(" & Cll.Address & ", " & Sheets(Sheets.count).Name & "!A:C,1,False)"
Next Cll
End Sub
答案 0 :(得分:0)
我认为在新模块中定义一个公共函数更好:
Public Function FindP(xx As Range) As Long
Application.Volatile
Dim FoundIndex
Dim SumFound, i As Long
Set FoundIndex = Sheets("Sheet2").Range("C:C").Find(xx.Value)
If (FoundIndex Is Nothing) = True Then
FindP = 0
Exit Function
Else
SumFound = 0
For i = 0 To 100
If (FoundIndex.Offset(i, 0) = "") Or (FoundIndex.Offset(i, 0) = xx.Value) Then
SumFound = SumFound + FoundIndex.Offset(i, 1).Value
Else
Exit For
End If
Next
FindP = SumFound
End If
End Function
并在sheet1的每个单元格中:
D1 -> =FindP(C1)
并自动完成。
函数在sheet2的C列中搜索名称,如果C列中的名称相等(第1行)或空(第2行...... n行),则循环后对每个值求和。