将所有单元格、数字和符号合并为一个总和

combine all cells, numbers and symbols to a sum

美好的一天,

我对这个问题一头雾水。

我有一组包含单词的单元格,比如苹果,这个单词就是值。它由完成数学的符号分隔。用户可以更改它们以进行自定义计算。

单元格A1是"apple",B1是“+”,单元格C1是"apple",单元格D1是“*”,单元格E1是"apple",调用F1是“=” " 单元格 G1 是建议的总数,在本例中为“6”。 它将被发布为 |苹果 | + |苹果 | * |苹果 | = | 6 |

图例包含单词的值,因此如果您在图例中输入 2,apple 就是 2。 逻辑将确定公式将是 2+2*2= 如果写成 excel,我想合并所有单元格并计算它。

我尝试使用 =sum、sumproduct、concate 等,但都无济于事。
不管我做了什么,我最终都把 BEDMAS 弄错了,因为它计算的是 2+2=4*2=8,而不是正确的 2*2=4+2=6.

有人知道合并这些单元格并将这些值正确求和到正确总数的方法吗?

感谢您的宝贵时间!

转到 Name manager 并创建命名范围 Eval,在 Refers to 字段中添加公式:

=EVALUATE(CONCATENATE(VLOOKUP(Sheet1!A1,Sheet1!$A:$B,2,0),Sheet1!B1,VLOOKUP(Sheet1!C1,Sheet1!$A:$B,2,0),Sheet1!D1,VLOOKUP(Sheet1!E1,Sheet1!$A:$B,2,0)))

在A3:B5范围内我有图例。 根据需要更改参考。然后在单元格 G1 中写入公式 =Eval.

样本:

这是一个基于 UDF 的解决方案。它的优势在于,如果您学习了它的代码元素,它会更通用并且更容易维护。缺点是你必须学习代码的元素,而且你有一个 xlsm 启用宏的工作簿,这在任何地方都不受欢迎。

设置很简单。我创建了一个包含 ItemValue 列的 table。我把它放在另一个 sheet 任务之外。事实上,您可以将 sheet 与 table VeryHidden 一起使用,这样用户无法在不访问 VBA 项目的情况下查看它,您可以对其进行密码保护。我调用了tableLegend。项目列的名称如 apple、pear、orange。值列具有与每个名称关联的数值。

请注意,由于这是一个 VBA 项目,因此可以将整个列表转移到 VBA,而不会在 sheet 上留下任何痕迹。你可以有一个函数来显示每个项目的值,当用户点击它时,它会在他点击其他地方时消失。

接下来,我在 A1 中创建了一个数据验证下拉列表,列表定义为 =INDIRECT("Legend[Item]")。将此单元格复制到 C1 和 E1。

然后我在 B1 中创建了另一个数据验证下拉列表,列表为 +,-,*,/。此下拉菜单必须复制到 D1。

现在下面的代码进入标准代码模块。找到创建它的方法,因为它不是任何 Excel 自动设置的。它的默认名称是 Module1。将代码粘贴到此处。

Function Evalue(Definition As Range) As Double

    Dim Task As String
    Dim Fact(2) As Double
    Dim C As Long
    Dim i As Long

    With Definition
        For C = 1 To 5 Step 2
            On Error Resume Next
            Fact(i) = Application.VLookup(.Cells(C).Value, Range("Legend"), 2, False)
            i = i + 1
        Next C

        Task = "(" & Fact(0) & .Cells(2).Value _
                   & Fact(1) & ")" & .Cells(4).Value _
                   & Fact(2)
    End With
    Evalue = Evaluate(Task)
End Function

现在您可以进行测试了。从 worksheet 中调用函数,例如 =Evalue(A1:E1)。您可以在 =IF(G6 = Evalue(A1:E1), "Baravo!", "Try again") 之类的比较中使用它。当您更改任何组件时,具有该功能的单元格将会更改。

如果复制包含范围的公式,请记住使用绝对寻址。如果您在测试时需要在 VBA 中获得结果,请使用此 sub 调用该函数。

Private Sub TestEvalue()
    Debug.Print Evalue(Range("A1:E1"))
End Sub

My Sheet 这是我所拥有的。

在单元格 M - U 中,我计算图例中单元格 E、G 和 I 中单词的所有实例。

=SUMPRODUCT((LEN(E3)-LEN(SUBSTITUTE(E3,$B,"")))/LEN($B))

在单元格 W - AE 中,每次出现单词时,我都会将实例乘以值得到总和。

=SUM(M3*$C)

在单元格 E8 - I8 中,我将三个可能的值相加。 =SUM(W3:Y3) 所以每个带字的单元格现在都是一个数字。

我想用 E8 - I8 单元格在 k8 中进行计算,依此类推。

因此,每个单元格放在一起构成一个

=SUM(E8:I8) 

语句,除了 E11 - I11 等于 26 而不是 43 之外,其他都有效。