平均只有细胞的数字部分,避免任何字母

时间:2017-08-07 11:18:45

标签: excel vba formula average

我正在尝试使用公式来告诉我包含数字和字母的单元格的平均值。

Price
$486.5/mt,
$287/mt,
$286.75/mt,
$286.5/mt,
$286.75/mt,

所以每个单元格包含上面的一个,例如单元格F2包含'$ 486.5 / mt'。我的问题是我可以使用什么公式来返回数字平均值。目前,平均公式甚至不起作用。我尝试使用“LEFT”公式,但这不起作用,因为$符号在值之前。

请帮忙!

由于

3 个答案:

答案 0 :(得分:2)

你可以在没有VBA的情况下使用像这样的array formula来做到这一点:

=AVERAGE(VALUE(MID(K18:K22,2,LEN(K18:K22)-5)))  

(K18中的值:K22)

答案 1 :(得分:0)

您可以使用此功能:

Public Function NumbersOnly(str As String) As Single
  Dim c As String
  Dim nIndex As Integer
  Dim sResult As String

  For nIndex = 1 To Len(str)
    If IsNumeric(Mid$(str, nIndex, 1)) Or Mid$(str, nIndex, 1) = "." Then
      sResult = sResult & Mid$(str, nIndex, 1)
    End If
  Next
  NumbersOnly = Val(sResult)
End Function

然后单元格F3的公式为:

=NumbersOnly(F2)

答案 2 :(得分:0)

采用与braX类似的方法,此函数将显式转换预定义格式的字符串($ ... / ...),这将防止格式不正确(或其他无效)字符串的任何问题。这样可以更好地控制回报。

Public Function GetAmountFromString(ByVal InputString As String) As Variant
    If InputString Like "$*/*" Then
        Dim ProcessedString As String
        ProcessedString = Replace(InputString, "$", vbNullString)

        Dim SplitString As Variant
        SplitString = Split(ProcessedString, "/")

        ' Explicitly convert String to Currency.
        GetAmountFromString = CCur(SplitString(0))
    Else
        GetAmountFromString = vbNullString
    End If
End Function

此功能将首先检查格式。只要输入格式正确,它就会用空字符串替换'$'符号。最后,它将使用'/'将字符串分成两部分。它将在'/'符号前返回Currency版本的值。

如果输入不正确,它将返回一个空字符串。这可以根据需要进行自定义(您可以将vbNullString替换为"ThisIsAnInvalidInput",它仍可以正常使用。

要使用此功能,请将其添加到VBProject,然后使用工作表中的=GetAmountFromString(Cell)功能。

您也可以在其他子程序中使用此函数(例如,如果您想在子程序中使用仅平均有效值的函数)。