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

时间:2017-04-12 19:19:57

标签: excel excel-vba vba

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

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

     A        B         C         D         E        F  
  1. 红色比尔杰克鲁比尔250
  2. 蓝红宝石伊凡劳尔泰德350
  3. 绿色泰德詹姆斯瑞克泰德125
  4. 红色泰德菲尔红宝石比尔300
  5. 在这个工作表中,我想找到名称Bill的任何实例,并获得在F列中找到的数字的平均值。在这种情况下,275的答案因为Bill的名字显示在两行中。同样,如果我选择查看Ted的数字,答案应该是258,因为Ted的名字显示在三行中。

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

    提前致谢!

3 个答案:

答案 0 :(得分:0)

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

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

然后做

=AVERAGE(G1:G4)

答案 1 :(得分:0)

我会使用下面的函数,假设数据放在<div class="flex"> <div>1</div> <div>2</div> <div class="pancakes">3</div> </div>

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 放在任何工作簿中(或单元格引用而不是“Bill”)。

公式: enter image description here

结果:

enter image description here

答案 2 :(得分:-1)

因此,如果Bill在任何col-e-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