Excel VBA:使用ElseIf进行循环逻辑

时间:2016-08-02 00:05:22

标签: excel-vba vba excel

我遇到了在openclassroom上发现问题的问题。 我们在工作表中写了3个数字。 然后我们应该用3个不同的函数进行分类,其中数字是max,mid和min。

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

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的Function过程查找最大数字。以下是如何使用该Function过程的示例。    maxnum = FindMax(num1,num2,num3)

     

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

     

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

     

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

     

例如,假设您将27输入到单元格A2中,将14输入到单元格A3中,将31输入到单元格A4中。

     

单击运行按钮时,31       将出现在单元格C2中,27将出现在单元格C3中,而14将出现在单元格C4中。       此问题将要求您创建名为problem3的Sub过程,并命名三个Function过程       FindMax,FindMid和FindMin。您将在problem3中使用FindMax,FindMid和FindMin。   在一个模块中写入所有过程。   **不要使用Excel工作簿环境中的内置Min和Max函数来解决此问题。 **

     

对此宏使用Option Explicit语句。

     

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

2 个答案:

答案 0 :(得分:2)

您的逻辑陈述(例如x < y < z)没有按您认为的那样做。

x < y < z相当于(x < y) < z所以,如果x&lt; 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 :(得分:-1)

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