Excel VBA If语句和For循环移动到下面的单元格
我的工作表中有3列Excel VBA If语句和For循环移动到下面的单元格,excel,vba,if-statement,for-loop,Excel,Vba,If Statement,For Loop,我的工作表中有3列 Year GapYear Col3 Year 13 Yes 2018 Year 12 No Year 13 Yes Year 12 No 我希望vba根据我的if语句逻辑计算col3中的开始年份: Sub startYear() Dim Year As Range Set Year = Range("A2") Dim GapYear As Range Set GapYear = Range("B2")
Year GapYear Col3
Year 13 Yes 2018
Year 12 No
Year 13 Yes
Year 12 No
我希望vba根据我的if语句逻辑计算col3中的开始年份:
Sub startYear()
Dim Year As Range
Set Year = Range("A2")
Dim GapYear As Range
Set GapYear = Range("B2")
Dim Col3 As Range
Set Col3 = Range("C2")
lastRow = ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count
For Row = 1 To lastRow
If Year = "Year 13" And GapYear = "Yes" Then Col3 = "2018"
If Year = "Year 13" And GapYear = "No" Then Col3 = "2017"
If Year = "Year 12" And GapYear = "Yes" Then Col3 = "2019"
If Year = "Year 12" And GapYear = "No" Then Col3 = "2018"
Next Row
End Sub
代码只计算单元格C2,不向下移动计算其他行。我曾尝试将范围更改为整列,例如范围(“C:C”),但出现类型不匹配错误。我还尝试在for循环中添加activecell.offset(1,0),该循环向下移动activecell,但单元格C3仍然为空
我在A(年份)和B(GapYear)列中有数百个条目,如何让代码遍历每一行并在col3中给出正确答案
谢谢每当行增加时,您需要重新定义要检查的范围。您这样做的方式如下所示:
Sub startYear()
Dim Year As Range, GapYear As Range, Col3 As Range
lastRow = ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count
For Row = 1 To lastRow
Set Year = Range("A" & Row)
Set GapYear = Range("B" & Row)
Set Col3 = Range("C" & Row)
If Year = "Year 13" And GapYear = "Yes" Then Col3 = "2018"
If Year = "Year 13" And GapYear = "No" Then Col3 = "2017"
If Year = "Year 12" And GapYear = "Yes" Then Col3 = "2019"
If Year = "Year 12" And GapYear = "No" Then Col3 = "2018"
Next Row
End Sub
每次行增加时,需要重新定义要检查的范围。您这样做的方式如下所示:
Sub startYear()
Dim Year As Range, GapYear As Range, Col3 As Range
lastRow = ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count
For Row = 1 To lastRow
Set Year = Range("A" & Row)
Set GapYear = Range("B" & Row)
Set Col3 = Range("C" & Row)
If Year = "Year 13" And GapYear = "Yes" Then Col3 = "2018"
If Year = "Year 13" And GapYear = "No" Then Col3 = "2017"
If Year = "Year 12" And GapYear = "Yes" Then Col3 = "2019"
If Year = "Year 12" And GapYear = "No" Then Col3 = "2018"
Next Row
End Sub
仅仅做一个循环并不会改变硬编码的变量
Sub startYear()
Dim rw As Long
With ActiveWorkbook.ActiveSheet
LastRow = .UsedRange.Rows.Count
For rw = 2 To LastRow
If .Cells(rw, 1) = "Year 13" And .Cells(rw, 2) = "Yes" Then .Cells(rw, 3) = "2018"
If .Cells(rw, 1) = "Year 13" And .Cells(rw, 2) = "No" Then .Cells(rw, 3) = "2017"
If .Cells(rw, 1) = "Year 12" And .Cells(rw, 2) = "Yes" Then .Cells(rw, 3) = "2019"
If .Cells(rw, 1) = "Year 12" And .Cells(rw, 2) = "No" Then .Cells(rw, 3) = "2018"
Next Row
End With
End Sub
仅仅做一个循环并不会改变硬编码的变量
Sub startYear()
Dim rw As Long
With ActiveWorkbook.ActiveSheet
LastRow = .UsedRange.Rows.Count
For rw = 2 To LastRow
If .Cells(rw, 1) = "Year 13" And .Cells(rw, 2) = "Yes" Then .Cells(rw, 3) = "2018"
If .Cells(rw, 1) = "Year 13" And .Cells(rw, 2) = "No" Then .Cells(rw, 3) = "2017"
If .Cells(rw, 1) = "Year 12" And .Cells(rw, 2) = "Yes" Then .Cells(rw, 3) = "2019"
If .Cells(rw, 1) = "Year 12" And .Cells(rw, 2) = "No" Then .Cells(rw, 3) = "2018"
Next Row
End With
End Sub