将多个IF函数应用于每一行

时间:2014-11-10 18:40:45

标签: vba excel-vba excel

我需要将以下IF函数应用于J,L和S列中的每一行,以便在行T的相应单元格中打印正确的日期值。例如,单元格T2将在其中打印日期基于在J2,L2和S2上运行这些IF函数的结果;单元T3将根据在J3,L3和S3上运行这些IF函数的结果在其中打印日期;等等。这就是我所拥有的:

Sub Test1()
Set firstDate = Range("S2")
If Range("J2") = "GS/CA/SL/GW" Then
    If Range("L2") = "1" Or "2" Or "3" Then
        Range("T2") = DateAdd("ww", 52, firstDate)
    End If

    If Range("L2") = "4" Or "5" Or "6" Then
        Range("T2") = DateAdd("ww", 104, firstDate)
    End If

    If Range("L2") = "7" Or "8" Or "9" Then
        Range("T2") = DateAdd("ww", 156, firstDate)
    End If


End If
End Sub

如果我只重新定义所有范围,它一次可以在一组单元格上工作,但我认为必须有一种比粘贴和编辑代码更简单的方法〜我需要运行它的所有行的3500次。任何帮助,将不胜感激!

1 个答案:

答案 0 :(得分:0)

如果我正确地回答你的问题,我相信你只需要一个简单的循环来调整你当前的代码。

试试这个:

Sub loopDate()
    Application.ScreenUpdating = False
    Dim LastRow As Integer
    LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    Dim firstDate As Range
    Dim i As Long

    For i = 2 To LastRow
        If Range("J" & i) = "GS/CA/SL/GW" Then
            Set firstDate = Range("S" & i)
            Select Case Range("L" & i)
                Case 1 To 3
                    Range("T" & i) = DateAdd("ww", 52, firstDate)
                Case 4 To 6
                    Range("T" & i) = DateAdd("ww", 104, firstDate)
                Case 7 To 9
                    Range("T" & i) = DateAdd("ww", 156, firstDate)
            End Select
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

请注意,我在第2行开始循环,因为这是您的示例使用的内容,直到A列中最后一次使用的行。我还将if逻辑更改为select case语句以提高可读性

您可能只想在单元格T?中使用等式,而不是使用VBA,但由于我不知道细节,我认为您有充分的理由。