如何查找单个单元格中的平均数

时间:2018-08-10 03:39:15

标签: excel split formula

我已经在这个问题上研究了一段时间了,我能够使用多个单元将其分解,并最终获得平均值。但是我无法构造一个公式来计算平均值。

数据将是动态的,从2到大于8。 想法是我可以将数据粘贴到一个单元格中,而平均值将在另一个单元格中进行计算。

如前所述,我能够使用多个单独的单元格和vba对其进行细分,但我正在考虑使用单个单元格将电子表格清除以完成这项工作。

使用它作为示例数据集:

ABC 106.375 / DF 106.99 / G 106.5 / JK 99.5 /

输出:平均值= 104.84125

只是试图检索数据中的第三个数字,这使我的公式陷入了混乱和不必要的复杂性。 = MID(G3,LEN(LEFT(G3,FIND(“ /”,G3)-1))+ LEN(MID(G3,LEN(LEFT(G3,FIND(“ /”,G3)-1))+ 2 ,FIND(“ /”,G3,LEN(LEFT(G3,FIND(“ /”,G3)-1)))-2)))+ 3,FIND(“ /”,G3,LEN(LEFT(G3,FIND (“ /”,G3)-1))+ LEN(MID(G3,LEN(LEFT(G3,FIND(“ /”,G3)-1))+ 2,FIND(“ /”,G3,LEN(LEFT (G3,FIND(“ /”,G3)-1)))-2)))+ 3)-(LEN(LEFT(G3,FIND(“ /”,G3)-1))+ LEN(MID(G3, LEN(LEFT(G3,FIND(“ /”,G3)-1))+ 2,FIND(“ /”,G3,LEN(LEFT(G3,FIND(“ /”,G3)-1)))-2 ))+ 2)-1)

我感到自己非常有限,以至于我无法保留变量,甚至在什么时候都无法将所有数字拉在一起以计算平均值。

1 个答案:

答案 0 :(得分:1)

这是一个基于正则表达式的用户定义函数。

Option Explicit

Function avgNumsOnly(str As String, _
                  Optional delim As String = ", ")
    Dim n As Long, nums() As Variant
    Static rgx As Object, cmat As Object

    'with rgx as static, it only has to be created once; beneficial when filling a long column with this UDF
    If rgx Is Nothing Then
        Set rgx = CreateObject("VBScript.RegExp")
    End If
    avgNumsOnly = vbNullString

    With rgx
        .Global = True
        .MultiLine = False
        .Pattern = "\d*\.?\d+"
        If .Test(str) Then
            Set cmat = .Execute(str)
            'resize the nums array to accept the matches
            ReDim nums(cmat.Count - 1)
            'populate the nums array with the matches
            For n = LBound(nums) To UBound(nums)
                nums(n) = CDbl(cmat.Item(n))
            Next n
            'average the nums array
            avgNumsOnly = Application.Average(nums)
        End If
    End With
End Function

enter image description here