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 是否包含数字
  3. 填写剩余一栏

另外,我将在某些行中输入名称,因此必须忽略这些。我知道我可以将方程式拖下来并以这种方式实现,但话又说回来,这会给我#DIV/0!.

有没有聪明的方法来做到这一点?我正在使用 Excel 2010。

4

1 回答 1

1
  • 打开 VBE(Visual Basic 编辑器ALT+F11
  • 项目资源管理器中右键单击并插入Module
  • 粘贴以下代码

UDF 函数

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()将公式向下拖动

结束了 结果

更新:

自动插入和计算

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

工作表代码

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 列中输入一个数字,另一个公式应该被计算并且结果应该出现在相邻的单元格中。

于 2013-08-16T09:51:43.163 回答