VBA - 多次使用相同的if语句

时间:2014-11-14 13:59:49

标签: excel vba excel-vba

我有一个很长的If语句,我在多个for循环中使用,我想知道是否有办法缩短我的代码。

我知道在其他语言中你可以将if语句存储为函数并一次又一次地调用它,即函数age()然后将其称为age(),但是当我尝试在VBA中执行此操作时它不起作用。

有没有人有任何想法?我在Excel中使用VBA。

谢谢桑德拉

For Each var In pan8

        If (pan2.Item(var) <= 15) And (pan3.Item(var) = "F") Then
                If (pan.Item(var) = 21) Then
                    R21F1 = R21F1 + 1
               ElseIf (pan.Item(var) = 22) Then
                    R22F1 = R22F1 + 1
               ElseIf (pan.Item(var) = 23) Then
                    R23F1 = R23F1 + 1
              ElseIf (pan.Item(var) = 24) Then
                    R24F1 = R24F1 + 1
              ElseIf (pan.Item(var) = 25) Then
                   R25F1 = R25F1 + 1
             ElseIf (pan.Item(var) = 26) Then
                   R26F1 = R26F1 + 1
            ElseIf (pan.Item(var) = 27) Then
                   R27F1 = R27F1 + 1
            ElseIf (pan.Item(var) = 28) Then
                   R28F1 = R28F1 + 1
            ElseIf (pan.Item(var) = 29) Then
                   R29F1 = R29F1 + 1
            ElseIf (pan.Item(var) = 31) Then
                    R31F1 = R31F1 + 1
               End If

代码继续为15个不同的“If(pan2.Item(var)&lt; = 15)和(pan3.Item(var)=”F“)然后”

我用4个不同的时间调用这段长代码(大约5个字)。

所以我希望能够将它存储在某个东西中,朋友建议使用一个函数,以便能够调用而不是每次都重写它。

2 个答案:

答案 0 :(得分:1)

您绝对可以将代码存储在函数或其他子代码中(称为R22F1R32F1等变量,或者您可能意味着Range("R22F1")?)。

请注意我使用&#34; Sub&#34;而不是一个函数,因为(无论R22F1,R23F1等)你想要自动化一个动作而不返回一个值。假设它们是代码变量:

Sub Main()
     MyLongProcedure MyParameter
End Sub

Sub MyLongProcedure(ByVal MyParameter As Integer)
     Select Case MyParameter
         Case 21:
             R21F1 = R21F1 + 1
         Case 22:
             R22F1 = R22F1 + 1 
     End Select
End Sub 

请注意,您可以致电&#34; MyLongProcedure&#34;根据需要多次,无需复制和粘贴代码,只需编写Call MyLongProcedure()并传入要评估的参数,以便相应地执行操作。

<强>此外 如果它们是这样命名的范围,看到您评估的数字与示例代码中的变量之间的关联,为什么不编写类型Range("R" & pan & "F1") = Range("R" & pan & "F1") + 1的语句而不需要检查if或精选案例?

答案 1 :(得分:1)

如果我理解正确,那么您真正要求的是在VBA中调用函数/过程的语法。

要在VBA中调用过程,只需引用其名称,不带括号;所以Sub Foo()可以这样调用/执行:

Foo

如果Foo有参数,比如说Sub Foo(ByVal bar As String),那么您只需在程序名称后添加参数(如果有多个参数,则用逗号分隔):

Foo "bar"

现在,假设您希望返回值的过程,并且您希望在呼叫站点使用该值,那么您将使用函数相反:Function Foo(ByVal bar As String) As Boolean

使用括号将其命名为

Dim result As Boolean
result = Foo("bar")

如果函数没有参数,则括号是可选的。

在调用Sub时使用括号是非法的语法。