我正在创建一个Excel电子表格,我想根据单元格的内容创建一个公式。一个基本的例子如下:
因此,单元格1,2和3具有值YxZ。我想使用Y值和Z值,并根据每个值进行计算。我不想为Y和Z分别设置单元格。
所以我想挑出Y并做一个简单的加法来得到11.然后我想得到Z的平均值,在这种情况下为225.
可以这样做吗?我绝不是一个Excel向导!
答案 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,以及表示该函数的字符串您想要应用于相应的操作数。
它的工作原理如下:
在第一列中,我使用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)
您可以在范围中包含空单元格,它们将被忽略。