在单个Excel单元格中提取值以在forumla中使用

时间:2016-06-26 14:07:25

标签: excel math excel-formula cell

我正在创建一个Excel电子表格,我想根据单元格的内容创建一个公式。一个基本的例子如下:

enter image description here

因此,单元格1,2和3具有值YxZ。我想使用Y值和Z值,并根据每个值进行计算。我不想为Y和Z分别设置单元格。

所以我想挑出Y并做一个简单的加法来得到11.然后我想得到Z的平均值,在这种情况下为225.

可以这样做吗?我绝不是一个Excel向导!

3 个答案:

答案 0 :(得分:2)

以下是@ScottCraner的一个很好的答案:

Function Apply(Formulas As Range, operator As String, operand As Long, func As String) As Variant
    Dim terms As Variant
    Dim cell As Range
    Dim expression As String
    Dim i As Long

    ReDim terms(1 To Formulas.Cells.Count)
    i = 1

    For Each cell In Formulas.Cells
        terms(i) = Split(cell, operator)(operand - 1)
        i = i + 1
    Next cell

    expression = func & "(" & Join(terms, ",") & ")"
    Apply = Application.Evaluate(expression)

End Function

传递一系列operand operator operand形式的表达式,一个表示运算符的字符串,以及表示操作数之前的操作数或操作符之后的操作数的整数1或2,以及表示该函数的字符串您想要应用于相应的操作数。

它的工作原理如下:

enter image description here

在第一列中,我使用operand = 1,在第二列中,我使用operand = 2

答案 1 :(得分:1)

您需要数组公式来提取每个单元格中x周围的文本,转换为数字然后将这些值相加在一起=>在复制和粘贴到单元格I2(Y的总和)和J2(Z的总和 - 除以之后,用 Ctrl + Shift + 输入进行确认Y)的总和:

=SUM(IFERROR(VALUE(LEFT($A2:$H2,FIND("x",$A2:$H2)-1)),0))
=SUM(IFERROR(VALUE(LEFT($A2:$H2,FIND("x",$A2:$H2)-1)) * VALUE(MID($A2:$H2,FIND("x",$A2:$H2)+1,255)),0)) / $I2

答案 2 :(得分:1)

vba选项。

此用户定义函数将返回两个数字:

Function sumaver(rng As Range, dm As String)
Dim sm As Double
Dim avg As Double
Dim cnt As Long
Dim r As Range
Dim str() As String
Dim tmp(1 To 2)

For Each r In rng
    str = Split(r.Value, dm)
    If UBound(str) = 1 Then
        sm = sm + str(0)
        avg = avg + str(1)
        cnt = cnt + 1
    End If
Next r

tmp(1) = sm
tmp(2) = avg / cnt

sumaver = tmp

End Function

将其放在附加到所需工作簿的模块中。 不要将其放在工作表或ThisWorkbook代码中。

由于它返回两个数字的数组,因此可以通过两种方式调用它。

第一个是突出显示两个连续的水平单元格,并在第一个输入:

=sumaver(A2:H2,"x")

然后按Ctrl-Shift-Enter而不是Enter。如果操作正确,Excel将自动将{}放在公式周围并填充第二个单元格。第一个是平均值的第二个总和。

但是,如果您将各个部分放在不同的非连续水平单元格中,那么您可以使用以下公式调用总和:

=INDEX(sumaver(A2:H2,"x"),1,1)

和平均值:

=INDEX(sumaver(A2:H2,"x"),1,2)

sumaver()函数的参数是sumaver(Range, character on which to split)

您可以在范围中包含空单元格,它们将被忽略。

enter image description here