gpt4 book ai didi

excel - VBA excel函数

转载 作者:行者123 更新时间:2023-12-04 21:29:32 25 4
gpt4 key购买 nike

我需要制作一个 Excel 宏,它采用三角形边长并确保它存在,如果它需要输出它是什么类型的三角形。

每当我输入值 a = 2 , b = 2c = 2 ,它应该是一个等边三角形,但它输出为一个等腰三角形。

任何帮助表示赞赏!

Public Function triangle(a, b, c) As String
Select Case True
Case a + b <= c Or a + c <= b Or c + b <= a
triangle = "Doesnt exist"
Case a = b Or c = b Or a = c
triangle = "Isosceles"
Case (a + b) ^ 2 = c ^ 2 Or (b + c) ^ 2 = b ^ 2 Or (c + a) ^ 2 = a ^ 2
triangle = "right triangle"
Case a = b = c
triangle = "Equilateral"
Case Else
triangle = "Regular triangle"

End Select

MsgBox triangle

End Function

最佳答案

Case block 从上到下评估,首先匹配条件的分支(即第一个成为 True 的分支)将成为获胜条件。

因此,您应该首先评估约束最大的规则,最后评估约束较少的规则 - 这意味着您需要在检查等腰三角形之前检查等边三角形,因为等边三角形也是等腰三角形,as Warcupine already noted .

但是等边条件有一个问题:

Case a = b = c

VBA 将评估 a = b作为 Boolean表达式,然后将其结果与 c 进行比较- 所以如果 c是任何非零值, a = b = c将是 True无论 c 的值如何(假设非零)如果两个 ab是平等的。

如果函数打算用作 UDF,请考虑避免使用 MsgBox调用,并返回 Variant这样您就可以在给定无效输入的情况下生成实际的 Excel 单元格错误值 - 请注意,您所谓的“正三角形”可能属于 scalene triangle 的定义。 :
Public Function TriangleType(ByVal a As Double, ByVal b As Double, ByVal c As Double) As Variant
If a <= 0 Or b <= 0 Or c <= 0 Then
TriangleType = CVErr(xlErrValue)
Exit Function
End If

Select Case True
Case a + b <= c Or a + c <= b Or c + b <= a
TriangleType = CVErr(xlErrValue)

Case a = b And b = c And c = a
TriangleType = "Equilateral"
Case a = b Or c = b Or a = c
TriangleType = "Isosceles"
'Case (a + b) ^ 2 = c ^ 2 Or (b + c) ^ 2 = b ^ 2 Or (c + a) ^ 2 = a ^ 2
Case a ^ 2 + b ^ 2 = c ^ 2 Or b ^ 2 + c ^ 2 = a ^ 2 Or c ^ 2 + a ^ 2 = b ^ 2
TriangleType = "Right Triangle"

Case Else
TriangleType = "Scalene Triangle"
End Select

End Function

关于excel - VBA excel函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57858819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com