Function 将If语句例程转换为函数

Function 将If语句例程转换为函数,function,excel,if-statement,office-2013,vba,Function,Excel,If Statement,Office 2013,Vba,也许你能帮我解决这个问题。ckuhn203建议我将所有重复的if语句分解为函数。我正在努力,但我不知道我做错了什么。 我有一艘潜艇: Sub st_verdelen() Worksheets("totaallijst").Activate lastRtot = Sheets("totaallijst").Cells.SpecialCells(xlCellTypeLastCell).row counter_all = 0 For a = 1 To lastRtot

也许你能帮我解决这个问题。ckuhn203建议我将所有重复的
if语句
分解为
函数
。我正在努力,但我不知道我做错了什么。 我有一艘潜艇:

Sub st_verdelen()
    Worksheets("totaallijst").Activate
    lastRtot = Sheets("totaallijst").Cells.SpecialCells(xlCellTypeLastCell).row
    counter_all = 0

    For a = 1 To lastRtot
        slbkoppeling = Sheets("totaallijst").Cells(a, 8).Value
        slbAanwezig = Sheets("totaallijst").Cells(a, 9).Value

        If Sheets("totaallijst").Cells(a, 7).Value = "2A2" And SLBers = "Mvs" And slbstdperklas = Sheets("StdntKlas").Cells(15, 5).Value And slbkoppeling = "" And slbAanwezig = "" Then
            If counter_all <= slbstdperklas And UUU = 0 Then
                Sheets("totaallijst").Cells(a, 9).Value = SLBers
                counter_all = counter_all + 1
                If counter_all = slbstdperklas Then
                    UUU = 1
                End If
            End If
        End If

        If Sheets("totaallijst").Cells(a, 7).Value = "1B4C" And SLBers = "htp" And slbstdperklas = Sheets("StdntKlas").Cells(16, 5).Value And slbkoppeling = "" And slbAanwezig = "" Then
            If counter_all <= slbstdperklas And VVV = 0 Then
                Sheets("totaallijst").Cells(a, 9).Value = SLBers
                counter_all = counter_all + 1
                If counter_all = slbstdperklas Then
                    VVV = 1
                End If
            End If
        End If

        If Sheets("tot_list").Cells(a, 7).Value = "2G4" And blsers = "htp" And blsstdperklas = Sheets("StdntKlas").Cells(16, 6).Value And blskoppeling = "" And blsAanwezig = "" Then
            If counterW <= blsstdperklas And WWW = 0 Then
                Sheets("tot_list").Cells(a, 9).Value = blsers
                counter_all = counter_all + 1

                If counterW = blsstdperklas Then
                    WWW = 1
                End If
            End If
        End If
next a
end sub
我不知道我做错了什么。有什么建议吗

需要
计数器\u all
,这样它就不会再次重复此部分。如果我不使用它,则无法激活
noneactief
,这样在激活If语句之后,If语句就不会被激活。

函数扫描slb(value1、value2、row、col、noneactief)似乎有一些问题,或者上下文不够。使用“row”作为参数名不是好的做法,因为它是一个属性名。有时会修改传递给函数的noneactief的值。这很好,因为excel vba默认值是通过引用传递的;但是调用代码并没有使用noneactief,所以您需要编写代码来处理它。我将做一些假设,并尝试一下:

counter_all = 0

For a = 1 To lastRtot
    slbkoppeling = Sheets("totaallijst").Cells(a, 8).Value
    slbAanwezig = Sheets("totaallijst").Cells(a, 9).Value

    If scan_slb(sheets("totaallijst").Cells(a, 7).Value, "2A2",  _ 
      SLBers, "Mvs", slbstdperklas, Sheets("StdntKlas").Cells(15, 5).Value, _ 
      slbkoppeling, "", slbAanwezig, "") Then
        If counter_all <= slbstdperklas And UUU = 0 Then
            Sheets("totaallijst").Cells(a, 9).Value = SLBers
            counter_all = counter_all + 1
            If counter_all = slbstdperklas Then
                UUU = 1
            End If
        End If
    End If

    If scan_slb(Sheets("totaallijst").Cells(a, 7).Value, "1B4C", _ 
      SLBers, "htp", slbstdperklas, Sheets("StdntKlas").Cells(16, 5).Value, _ 
      slbkoppeling, "", slbAanwezig, "") Then
        If counter_all <= slbstdperklas And VVV = 0 Then
            Sheets("totaallijst").Cells(a, 9).Value = SLBers
            counter_all = counter_all + 1
            If counter_all = slbstdperklas Then
                VVV = 1
            End If
        End If
    End If

    If scan_slb(Sheets("tot_list").Cells(a, 7).Value, "2G4", _ 
      blsers, "htp", blsstdperklas, Sheets("StdntKlas").Cells(16, 6).Value, _ 
      blskoppeling, "", blsAanwezig, "") Then
        If counterW <= blsstdperklas And WWW = 0 Then
            Sheets("tot_list").Cells(a, 9).Value = blsers
            counter_all = counter_all + 1

            If counterW = blsstdperklas Then
                WWW = 1
            End If
        End If
    End If
next a
End Sub

function scan_slb(a1,a2,b1,b2,c1,c2,d1,d2)
    scan_slb = (a1 = a2 and b1 = b2 and c1 = c2 and d1 = d2)  
End Function
计数器\u all=0
对于a=1至lastRtot
slbkoppeling=Sheets(“totaallijst”).单元格(a,8).值
slbAanwezig=Sheets(“totaallijst”).单元格(a,9).值
如果扫描slb(表(“totaallijst”)。单元格(a,7)。值,“2A2”,则
SLBers,“Mvs”,slbstdperklas,Sheets(“StdntKlas”)。单元格(15,5)。值,\u
slbkoppeling,“,slbAanwezig,”)然后

如果counter\u all我正在努力理解你的
counter\u all
应该做什么?
counter_all = 0

For a = 1 To lastRtot
    slbkoppeling = Sheets("totaallijst").Cells(a, 8).Value
    slbAanwezig = Sheets("totaallijst").Cells(a, 9).Value

    If scan_slb(sheets("totaallijst").Cells(a, 7).Value, "2A2",  _ 
      SLBers, "Mvs", slbstdperklas, Sheets("StdntKlas").Cells(15, 5).Value, _ 
      slbkoppeling, "", slbAanwezig, "") Then
        If counter_all <= slbstdperklas And UUU = 0 Then
            Sheets("totaallijst").Cells(a, 9).Value = SLBers
            counter_all = counter_all + 1
            If counter_all = slbstdperklas Then
                UUU = 1
            End If
        End If
    End If

    If scan_slb(Sheets("totaallijst").Cells(a, 7).Value, "1B4C", _ 
      SLBers, "htp", slbstdperklas, Sheets("StdntKlas").Cells(16, 5).Value, _ 
      slbkoppeling, "", slbAanwezig, "") Then
        If counter_all <= slbstdperklas And VVV = 0 Then
            Sheets("totaallijst").Cells(a, 9).Value = SLBers
            counter_all = counter_all + 1
            If counter_all = slbstdperklas Then
                VVV = 1
            End If
        End If
    End If

    If scan_slb(Sheets("tot_list").Cells(a, 7).Value, "2G4", _ 
      blsers, "htp", blsstdperklas, Sheets("StdntKlas").Cells(16, 6).Value, _ 
      blskoppeling, "", blsAanwezig, "") Then
        If counterW <= blsstdperklas And WWW = 0 Then
            Sheets("tot_list").Cells(a, 9).Value = blsers
            counter_all = counter_all + 1

            If counterW = blsstdperklas Then
                WWW = 1
            End If
        End If
    End If
next a
End Sub

function scan_slb(a1,a2,b1,b2,c1,c2,d1,d2)
    scan_slb = (a1 = a2 and b1 = b2 and c1 = c2 and d1 = d2)  
End Function