仅计算单元格数字部分的平均值,避免任何字母

average of only numerical part of cells, avoid any letters

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

Price
6.5/mt,
7/mt,
6.75/mt,
6.5/mt,
6.75/mt,

因此每个单元格都包含以上内容之一,例如单元格 F2 包含“$486.5/mt”。我的问题是什么公式只能用于 return 平均数。目前,平均公式甚至不起作用。我尝试使用 "LEFT" 公式,但这行不通,因为 $ 符号在值之前。

请帮忙!

谢谢

您可以使用这个功能:

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)

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

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

此函数将首先检查格式。只要输入的格式正确,它就会用空字符串替换“$”符号。最后,它会使用“/”将字符串分成两部分。它将 return 一个 Currency 版本的值在 '/' 符号之前。

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

要使用此函数,请将其添加到您的 VBProject,然后在您的工作表中使用函数 =GetAmountFromString(Cell)

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

您可以在没有 VBA 的情况下执行此操作,使用 array formula 像这样:

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

(K18:K22 中的值)