首页 文章

Excel,如果值出现在任何列中,则平均参考列

提问于
浏览
0

如果在工作表的任何其他列中找到特定值,我需要找到F列中找到的数字的平均值 .

例如:我在一个范围内有以下内容......

A        B         C         D         E        F
  • Red Bill Jack Ruby Bill 250

  • Blue Ruby Ivan Raul Ted 350

  • Green Ted James Rick Ted 125

  • Red Ted Phil Ruby Bill 300

在这个工作表中,我想找到名称Bill的任何实例,并获得在F列中找到的数字的平均值 . 在这种情况下,275的答案因为Bill的名字显示在两行中 . 同样,如果我选择查看Ted的数字,答案应该是258,因为Ted的名字显示在三行中 .

如果公式在计算答案的过程中忽略任何空白单元格,我也将不胜感激 .

提前致谢!

3 回答

  • -1

    我会使用下面的函数,假设数据放在 Sheet1 中 .

    Function my_average(strName As String) As Variant
     Dim varArrayNames As Variant
     Dim varValues As Variant
     Dim dblInSum(1 To 4) As Double '~~> change to "1 To 40"
     Dim lngCnt As Long
     Dim strRow As String
     Dim dblSum As Double
    
     varArrayNames = Sheet1.Range("B1:E4").Value '~~> change to "B1:G40"
     varValues = Sheet1.Range("F1:F4").Value    '~~> change to "H1:H40"
    
     For lngCnt = LBound(varArrayNames, 1) To UBound(varArrayNames, 1)
         strRow = Join(WorksheetFunction.Index(varArrayNames, lngCnt, 0))
         If InStr(strRow, strName) > 0 Then
           dblInSum(lngCnt) = 1
         End If
     Next lngCnt
    
     dblSum = WorksheetFunction.Sum(dblInSum)
    
     If dblSum > 0 Then
       my_average = WorksheetFunction.SumProduct(dblInSum, Application.Transpose(varValues)) / dblSum
     Else
      my_average = 0
    End If
    
    End Function
    

    测试:

    =my_average("Bill") 放在任何工作簿(或单元格引用而不是"Bill")中 .

    公式:
    enter image description here

    结果:

    enter image description here

  • 0

    因此,如果Bill在任何col-e中,那么这个数字正在进入大道...如果是这样,取决于你的数据大小,为什么不这样做呢......:

    Sub simplesearch()
        cnt = 0
        tot = 0
        srchval = InputBox("What are we looking for?")
        lr = Range("A1000000").End(xlUp).Row
        For i = 1 To lr
            For j = 1 To 5
                If Cells(i, j).Value = srchval Then
                    tot = tot + Cells(i, 6).Value
                    cnt = cnt + 1
                End If
            Next j
        Next i
        If Not (cnt = 0) Then
            MsgBox (tot / cnt)
        Else
            MsgBox ("0")
        End If
    End Sub
    
  • 0

    假设查找值(Bill等)在单元格C7中,在G1中添加以下公式,然后向下复制其他行 .

    =IF(ISERROR(MATCH($C$7,A1:E1,0)),"",F1)
    

    然后做

    =AVERAGE(G1:G4)
    

相关问题