2013-08-16 90 views
1

我希望能夠做到以下幾點:填充剩餘的單元格中輸入

 D  E       F 
1 P  Q       pf 
2 100  =D2/F2*SIN(ACOS(F2))  =D2/SQRT((D2^2+E2^2)) 
3 200  =D3/F3*SIN(ACOS(F3))  =D3/SQRT((D3^2+E3^2)) 
4 
5 P  Q       pf 
6 100  =D6/F6*SIN(ACOS(F6))  =D6/SQRT((D7^2+E6^2)) 
7 200  =D7/F7*SIN(ACOS(F7))  =D7/SQRT((D7^2+E7^2)) 

也就是說,如果我進入F列的值,列E值應自動填入如果我在列E中輸入值,F列中的值應自動填入。

但是,在輸入值之前,我不想顯示#DIV/0!

目的:

  1. 檢查列d包含了一些。
  2. 檢查其中任何一列列 E或F包含在剩下的列

也有一些

  • 填充,我會在某些行中輸入名稱,因此這些必須被忽略。我知道我可以拖動方程式並以此方式實現,但是再次,這會給我#DIV/0!

    有沒有一個聰明的方法來做到這一點?我正在使用Excel 2010。

  • +0

    您可以使用兩個UDF,= E()和= F()。什麼是您要在E或F中輸入的樣本 – 2013-08-16 09:36:09

    +0

    某些正數。通常E爲67.3,或F爲0.85。 –

    回答

    1
    • 打開VBE(Visual Basic編輯器ALT + F11
    • 右鍵單擊Project Explorer中插入一個Module
    • 粘貼下面的代碼

    UDF f unctions

    Function E() 
    
        Dim D As Range, F As Range 
        Set D = ActiveCell.Offset(0, -1): Set F = ActiveCell.Offset(0, 1) 
    
        If Len(D) = 0 Or Len(F) = 0 Then E = "" 
        If Len(F) > 0 Then 
         Dim result As Double 
         result = Evaluate("=" & D & "/" & F & "*SIN(ACOS(" & F & "))") 
         E = result 
        End If 
    End Function 
    
    Function F() 
        Dim D As Range, E As Range 
        Set D = ActiveCell.Offset(0, -2): Set E = ActiveCell.Offset(0, -1) 
    
        If Len(D) = 0 Or Len(E) = 0 Then F = "" 
        If Len(E) > 0 Then 
         Dim result As Double 
         result = Evaluate("=" & D & "/SQRT((" & D & "^2+" & E & "^2))") 
         F = result 
        End If 
    End Function 
    
    • 回到您的電子表格,然後輸入新的公式
    • 細胞E2現在是=E()和細胞F2現在是=F()拖式 下來

    結束了 result

    更新:

    自動化插入和計算

    Project Explorer »右鍵單擊Sheet1 » View Code

    插入下面的代碼

    Private Sub Worksheet_Change(ByVal Target As Range) 
        If Target.Column = 5 Then 
         FillF Target 
        ElseIf Target.Column = 6 Then 
         FillE Target 
        End If 
    End Sub 
    

    code for worksheet

    Module1取代你有以下

    Option Explicit 
    
    Sub FillF(ByVal Target As Range) 
    
        Dim D As Range, E As Range, F As Range 
    
        Set E = Target 
        Set D = E.Offset(0, -1) 
        Set F = E.Offset(0, 1) 
    
        If Not IsError(E) Then 
         If Len(E) = 0 Then 
          Exit Sub 
         ElseIf Len(D) = 0 Then 
          Exit Sub 
         ElseIf Len(D) > 0 And Len(F) = 0 Then 
          F.Formula = "=" & D & "/SQRT((" & D & "^2+" & E & "^2))" 
          Exit Sub 
         Else 
          Exit Sub 
         End If 
        Else 
         F.ClearContents 
        End If 
    
    End Sub 
    
    Sub FillE(ByVal Target As Range) 
    
        Dim D As Range, E As Range, F As Range 
    
        Set F = Target 
        Set E = F.Offset(0, -1) 
        Set D = F.Offset(0, -2) 
    
        If Not IsError(F) Then 
         If Len(F) = 0 Then 
          Exit Sub 
         ElseIf Len(D) = 0 Then 
          Exit Sub 
         ElseIf Len(D) > 0 And Len(E) = 0 Then 
          E.Formula = "=" & D & "/" & F & "*SIN(ACOS(" & F & "))" 
          Exit Sub 
         Else 
          Exit Sub 
         End If 
        Else 
         E.ClearContents 
        End If 
    
    End Sub 
    

    現在的一個代碼,轉到您的電子表格,並輸入一個數字無論是在列E或F,其他公式應計算,並將結果顯示在相鄰的小區。

    +0

    謝謝!這是完美的,但有一件事:我無法讓它工作,我只得到空白單元格。也就是說,如果我在D和E/F中輸入數字,其餘的列仍然是空的(但在函數字段中有'E()'/'F()'):/我會再試一些,顯然是爲你工作的...... –

    +0

    按以下順序進行:輸入'D as 200',輸入'E = 67.3',輸入'F as = F()'看看是否有所不同。我認爲每次更新其中一個數字時,您都必須通過點擊具有公式的單元格並點擊輸入 – 2013-08-16 10:31:32

    +1

    @RobertP來刷新UDF。給我一秒鐘來解決這個問題 – 2013-08-16 10:37:32