【问题标题】:Add unknown variables to Excel将未知变量添加到 Excel
【发布时间】:2016-04-17 23:37:53
【问题描述】:

这是我的 TI CAS 的屏幕截图:

我想在 Excel 文件中做同样的事情。我想把“x”放在一个单元格中,让其他单元格用它计算。

有没有办法在 Excel 中添加“未知变量”?我不希望它解决任何问题,但我需要有如下值:0.06*x+66000

编辑

例如,如果 D2 = x 且 E3 = 2,如果我在单元格中输入“=D2-E3”,我希望有“x-2”。

编辑

“x”必须是求值的,而不仅仅是连接。它必须简化下一个方程,如屏幕截图所示。例如,如果你有:A1: x-2A2: 3,如果你有:A3: =A1*A2,你应该有:3x-6

【问题讨论】:

  • 您的意思是要输入一个等式作为文字文本吗?如果是这样,只需在前面加上'。否则,请详细说明您要做什么,
  • 例如,如果 D2 = x 和 E3 = 2,如果我在单元格中输入“=D2-E3”,我希望有“x-2”。是不是更清楚了?前置 ' 不起作用。
  • 谢谢你的链接,但这不是我要找的!它需要保持文本而不是数字。
  • 您可以通过使用 VBA 的自定义构建公式来做到这一点。根据你的功能变得多么复杂,这可以实现。对于像 0.06x + 66000 这样的函数,这可能相当简单。 UDF 只需要返回那个字符串。

标签: excel excel-formula excel-2011


【解决方案1】:

这里是一个用户定义的函数。

还有代码……

Public Function MakeEqn(inputStr As String) As String
Dim tempStr As String
Dim rngStr As String

Dim myRng As Range
Dim iLoop As Long, jLoop As Long

    Application.Volatile

    tempStr = ""
    Set myRng = Nothing
    iLoop = 1
    Do While iLoop + 1 <= Len(inputStr)
        On Error Resume Next
        For jLoop = 2 To 4
            rngStr = Mid(inputStr, iLoop, jLoop)
            Set myRng = Range(rngStr)
            If Not myRng Is Nothing Then Exit For
        Next jLoop
        On Error GoTo 0
        If myRng Is Nothing Then
            tempStr = tempStr & Mid(inputStr, iLoop, 1)
        Else
            tempStr = tempStr & myRng.Value
            Set myRng = Nothing
            iLoop = iLoop + jLoop - 1
        End If
        iLoop = iLoop + 1
    Loop

    MakeEqn = tempStr
    Set myRng = Nothing
End Function

【讨论】:

  • 如果你能做MakeEqn(inputStr as Range) as String然后将 inputStr 转换为 String 会更好
  • 如果我在 B2 中执行 =MakeEqn("2*A3+A2") 并在 B3 中执行 =MakeEqn("A1*(B2)"),我得到:4*2*x+2。如果是 4*(2*x+2),我想要 8x+2 或 8x+4。我的 TI 可以做到这一点,而无需特别做任何事情,但无法让 Excel 做到这一点......
  • @KSSheon - 'Application.Volatile' 在工作表上的某些内容发生更改时强制重新计算。我同意,如果输入不包含在引号中会更好。
  • @AnnieCaron - 在这一点上,添加更多处理是相当直接的。例如- 每当运算符两侧出现两个“数字”时,执行该操作。我会对你的想法感兴趣。
  • @OldUgly 好吧,我认为如果没有开箱即用的解决方案,我们可以添加很多东西来处理每个可能的配置......我认为 Excel 能够处理代数公式并做一些像 TI 计算器一样对它们进行计算。似乎数字是强制性的!我不是 VBA 开发人员,所以我想我现在会坚持我的 TI,因为我没有太多时间学习和开发一些东西。感谢您的帮助。
【解决方案2】:

为您编辑案例,在 E4 中放置此公式

=D2&"-"E3

写出您的公式并将其与您将随单元格值更改的部分连接起来 (&)。单元格值可以是数字或文本(即 X)以满足您的需求。

以下是用两种方式完成的直线基本方程的示例。

在第一种方法中,我只是重写了将数学运算符和变量 x 保留为文本的方程式,并将常量 M 和 B 替换为它们的单元格值。

=D4&"*x+"&D3

另一种方法是用单元格值替换文本,这是我在 F 到 H 列中所做的。我在 G6 中使用了以下公式:

=SUBSTITUTE(SUBSTITUTE(G2,G3,H3),G4,H4)

使用替代方法并非没有一些潜在的坑。您需要在较短的变量之前替换较长的变量。 IE。您需要在替换 A 之前替换 Ay。如果在公式 Ay+A 中先将 A 替换为 9,则最终会得到 9y+9,这不是您想要发生的。

如果您需要首先计算某个值,如 F9 区域中的第三个示例所示,请注意单元格 G14 的等式如何与发生的一些数学计算以及一些保留的字符串值混合在一起。

=(B11-B10)/(C11-C10)&"*x+"&C10-(B11-B10)/(C11-C10)*B10

更新

在 G14 中,我们现在有了只包含 x 的公式。假设我们在这个阶段知道 X 是什么,我们想求解 Y。让 X 放入 G15 并将其值放入 H15 并在 G16 中执行以下操作:

=SUBSTITUTE(G14,G15,H15)

这将得到替换 X 值并只看到数字的公式。选择单元格 G17,使其成为活动单元格,然后转到公式功能区并选择定义名称。

将公式的名称放在顶部,我使用“答案”,在底部输入以下内容

=evaluate(G16)

然后在单元格 G17 中使用您新定义的名称,所以在我的例子中,我使用了:

=answer

答案的作用是评估我输入它的正上方的单元格。我可以在这张纸上的任何地方使用“答案”来评估它上面的单元格。

【讨论】:

  • 它确实连接了字符串,但它不计算它。如果将“x”值更改为“8”,它只会:“8*45000”而不是“x*45000”。如果您查看我的屏幕截图,它必须一路简化值...除了串联之外还有其他方法吗?
  • 有趣的是你应该提到这一点,我最终开发了一个用户定义的函数来做一些非常相似的事情。您在问题中表示您不想解决任何问题,只想将 X 保留在公式中。如果你想进行下一步并用一个值替换你的 X,你可以像你已经拥有的那样使用 Excel 中一个名为 EVALUATE 的内置函数。 EVALUATE 将接受一个字符串,该字符串是数字和数学运算符,其格式为 excel 通常会读取并返回值。评估的诀窍是,如果我没记错的话,你需要在命名范围内使用它。我会更新的。
  • 这与您发布的内容不同,但它是我处理通用公式、代入值并解决它们的方式。这样,任何在纸上查看的人都可以了解所使用的数字。它使用上面显示的替换技术,评估中间变量并使用上面答案中显示的评估方法评估方程。 Example,如果有帮助请告诉我
  • 为了简化步骤之间的操作,您要么必须通过连接来完成,要么使用 Mathcad 等其他程序...有一些网站可以为您简单地计算方程式。但这将涉及一些剪切和粘贴。我想我使用wolfram alpha 并让它为我做了一些积分,因为我的微积分有点生疏。
  • 这就是为什么我说:I want to put "x" in a cell and make other cells compute with it.。我补充说,我不希望解决任何问题而不会收到任何答案,例如:使用 Excel Solver 或 What-if。如果不清楚,您可以提出问题,因为很难解释。我编辑了我的答案,今晚我会阅读并尝试您的解决方案,感谢您的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多