仅计算单元格数字部分的平均值,避免任何字母
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 中的值)
我正在尝试计算一个公式来告诉我包含数字和字母的单元格的平均值。
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 中的值)