2016-08-02 113 views
1

我在openclassroom上发现问题时遇到问题。 我们有3个数字,我们在我们的工作表中写入。 然后我们应该用3个不同的函数进行分类,这些函数是最大值,中值和最小值。Excel VBA:Loop逻辑与ElseIf

有关问题的更多信息,请参阅问题的底部。 这里是我的问题代码:

Sub Problem3() 
    Dim a, b, c As Double 
    Dim maxnum, midnum, minnum As Double 
    a = Range("A2").value 
    b = Range("A3").value 
    c = Range("A4").value 


    Range("C2").value = Findmax(a, b, c) 
    Range("C3").value = Findmid(a, b, c) 
    Range("C4").value = Findmin(a, b, c) 

End Sub 
____ 

Function Findmax(num1, num2, num3) As Double 
    If (num1 > num2 And num1 > num3) Then 
     Findmax = num1 
    ElseIf (num2 > num1 And num2 > num3) Then 
     Findmax = num2 
    ElseIf (num3 > num1 And num3 > num1) Then 
     Findmax = num3 
    End If 
End Function 
___ 

Function Findmid(x, y, z) As Double 
    If (y < x < z Or z < x < y) Then 
     Findmid = x 
    ElseIf (y < z < x Or x < z < y) Then 
     Findmid = z 
    ElseIf (z < y < x Or x < y < z) Then 
     Findmid = y 
    End If 
End Function 
____ 

Function Findmin(num1, num2, num3) As Double 
    If (num1 < num2 And num1 < num2) Then 
     Findmin = num1 
    ElseIf (num2 < num1 And num2 < num3) Then 
     Findmin = num2 
    ElseIf (num3 < num1 And num3 < num2) Then 
     Findmin = num3 
    End If 
End Function 

不过,我得到了Findmid的答案永远是错的(它或者等于最大数量或最低)。

这里的问题的细节:

输入三位数字为单元格A2,A3和A4。 确保所有三个数字都不相同。 在Sheet3上创建一个执行名为problem3的宏的运行按钮。该宏完成以下任务:

•从单元格A2,A3和A4中获取三个数字并将它们存储在变量中。

•使用名为FindMax的函数过程查找最高编号。这里是一个如何使用该函数过程的例子。 maxnum = FindMax(num1,num2,num3)

•使用名为FindMid的Function过程找到中间数字。

•使用名为FindMin的Function过程找到最小的数字。

•将最高的数字输入到单元格C2中,将中间的数字输入单元格C3,并将最小的数字输出到单元格C4中。

例如,假设您输入27到单元格A 2中,14输入到单元格A 3中,并将31输入到单元格A 4中。

当您单击运行按钮时,单元格C2中将显示31 ,单元格C3中将显示27,单元格C4中将显示14。 此问题需要您创建名为problem3的Sub过程,以及名为 FindMax,FindMid和FindMin的三个函数过程。您将在problem3中使用FindMax,FindMid和FindMin。 将所有程序写入一个模块。 **不要使用Excel工作簿环境中的内置最小和最大函数来解决此问题。 **

对此宏使用Option Explicit语句。

提示:在每个Function过程中使用一个If-Then-ElseIf结构。

回答

2

你的逻辑陈述,如x < y < z没有做你认为他们正在做的事情。

x < y < z相当于(x < y) < z所以,如果x < y,那就变成True < z。由于True-1是相同的东西,那么变成-1 < z。等等。

这些语句,使

(y < x < z Or z < x < y) 

成为

((y < x) And (x < z)) Or ((z < x) And (x < y)) 

(他们也许可以有很多更简化,但应该让你开始。)

-1

我改写认为它是Max函数,即使我认为它是一个application.Min函数,作为参数,该函数获取三个数字所在的单元格区域。否则使用Switch case,也许会得到结果,用三个数字就可以很容易地进行调试。