我需要将以下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次。任何帮助,将不胜感激!
答案 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,但由于我不知道细节,我认为您有充分的理由。