2011-10-31 90 views
1

說我有下式:V = IR更新從公式的任何細胞在Excel 2010

在Excel中,我需要計算任何這種可能的組合。

例如,

  • 如果我給定的I和R中的值,我需要顯示在單元V的結果,其中我有V(用戶保持它0或空白來表示這就是他想要找出)

Excel工作表前值:

+------+---------+------+ 
| V | I  | R | 
+------+---------+------+ 
| 0 | 1  | 10 | 
+------+---------+------+ 

Excel工作表後:

+------+---------+------+ 
| V | I  | R | 
+------+---------+------+ 
| 10 | 1  | 10 | 
+------+---------+------+ 
  • 如果我給V和R的值,我需要在我有電池,以顯示我的結果我(用戶保持其0或空白,以表示這就是他想要的價值找出)

Excel工作表之前:

+------+---------+------+ 
| V | I  | R | 
+------+---------+------+ 
| 10 | 0  | 10 | 
+------+---------+------+ 

Excel工作表後:

+------+---------+------+ 
| V | I  | R | 
+------+---------+------+ 
| 10 | 1  | 10 | 
+------+---------+------+ 

編寫一個函數來檢查單元格是否爲0,並更新另一個「答案」單元格(除了V,I,R;這個單元格明確地調用這個函數)與期望的值是沒有問題的。

挑戰是除了額外的「答案」單元之外,還有空白單元格(我們需要從其他變量提供的值計算)更新。

Excel不允許公式更新任何單元格,這需要一些解決方法 - 這是我想不出的。

我該如何做這項工作?

回答

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

據我所知,沒有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,和我,還有一個「通知」單元名稱的細胞,這將提供有用的反饋給用戶。如果你不想給他們名字,那麼你可以使用例如"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 

這是我想到的即興。多做一點工作就可以使它更好用,更方便用戶使用。