VBA如果声明和For循环移动到下面的单元格

我有我的xlSheet 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") 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”),但我得到一个types不匹配的错误。 我也尝试在for循环中添加activecell.offset(1,0)来移动activecell,但是cell 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 

只是做一个循环不会改变你硬编码的variables。

 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