Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA If语句和For循环移动到下面的单元格_Excel_Vba_If Statement_For Loop - Fatal编程技术网

Excel VBA If语句和For循环移动到下面的单元格

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")

我的工作表中有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”),但出现类型不匹配错误。我还尝试在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