【问题标题】:VBA complex vlookup between worksheets to get average of relative cells工作表之间的 VBA 复杂 vlookup 以获得相对单元格的平均值
【发布时间】:2015-02-10 06:53:05
【问题描述】:

我有一个包含 2 个工作表的工作簿。在 Sheet1 上是 ColC 中的名称列表,在 Sheet2 上的 C 列中是相同的名称列表,但与 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

【问题讨论】:

    标签: vba excel vlookup


    【解决方案1】:

    我认为最好在新模块中定义一个公共函数,例如:

    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 行),则循环对每个值求和。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2020-05-14
      • 2014-03-18
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      相关资源
      最近更新 更多