说我有公式:V = IR
在Excel中,我需要计算这种可能的任何组合。
例如,
之前的Excel表格:
+------+---------+------+
| V | I | R |
+------+---------+------+
| 0 | 1 | 10 |
+------+---------+------+
Excel表格之后:
+------+---------+------+
| V | I | R |
+------+---------+------+
| 10 | 1 | 10 |
+------+---------+------+
之前的Excel表格:
+------+---------+------+
| V | I | R |
+------+---------+------+
| 10 | 0 | 10 |
+------+---------+------+
Excel表格之后:
+------+---------+------+
| V | I | R |
+------+---------+------+
| 10 | 1 | 10 |
+------+---------+------+
编写一个函数来检查一个单元格是否为0并更新另一个“回答”单元格(除了V,I,R;此单元格明确地调用此函数)与期望值没有问题。
挑战在于除了额外的“回答”单元格之外,还有空白单元格(我们需要从提供的其他变量计算的值)更新。
Excel不允许公式更新任何单元格,这需要一些解决方法 - 我无法想到。
我如何使这项工作?
答案 0 :(得分:1)
我会给你一个关于如何解决这个问题的提示......:^)不要试图在单元格中输入公式,而是编写一个VBA脚本,找出要应用的公式的三种排列中的哪一种给定V = IR,基于哪个单元格为空。所以你的逻辑的第一部分看起来像这样:
if cellV == "" and cellI <> "" and cellR <> "" then
cellV = cellI * cellR
elseif cellV <> "" and cell I = "" and cellR <> "" then
cellI = cellV/cellR
elseif cellV <> "" and cell I<> "" and cellR = "" then
cellR = cellV/cellR
else
alert("must provide at least two out of three values before evaluation");
并将此附加到您喜欢的任何事件。例如,一个事件检查是否指定了3个值中的2个(如onUpdate或其他)
请注意,这只是伪代码。
答案 1 :(得分:1)
据我所知,目前还没有Excel解决方案。你必须使用VBA。
这对我有用:
Option Explicit
Sub Electricity()
Dim nEmptyCells As Integer
nEmptyCells = -CInt(IsEmpty(Range("Voltage"))) _
- CInt(IsEmpty(Range("Current"))) _
- CInt(IsEmpty(Range("Resistance")))
If nEmptyCells = 1 Then
If IsEmpty(Range("Voltage")) Then
'Calculate voltage
Range("Voltage") = Range("Current") * Range("Resistance")
ElseIf IsEmpty(Range("Current")) Then
'Calculate current
Range("Current") = Range("Voltage") / Range("Resistance")
ElseIf IsEmpty(Range("Resistance")) Then
'Calculate resistance
Range("Resistance") = Range("Voltage") / Range("Current")
End If
Range("Notification") = "Calculation successful."
ElseIf nEmptyCells > 1 Then
Range("Notification") = "Insufficient input."
ElseIf nEmptyCells < 1 Then
Range("Notification") = "Too much input. Problem is overspecified."
End If
End Sub
请注意,我为与V,R和I对应的单元格以及向用户提供有用反馈的“通知”单元格指定了名称。如果您不想给他们起名字,那么您可以使用例如"B2"
代替Voltage"
等。此外,我只检查空白单元格而不是零值。我会把那部分留给你。
上述宏属于代码模块,必须手动运行。您可以在工作表上放置一个CommandButton,并使其在用户单击时运行宏。或者,如果您希望每次用户更改输入时自动运行它,您可以将其放在工作表模块中:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Voltage").Address _
Or Target.Address = Range("Current").Address _
Or Target.Address = Range("Resistance").Address Then
Electricity
End If
End Sub
这就是我想到的袖口。通过更多的工作,您可以使它更好,更用户友好。