【问题标题】:VBA If Statement and For Loop moving to the cell belowVBA If 语句和 For 循环移动到下面的单元格
【发布时间】:2017-03-01 21:44:08
【问题描述】:

我的 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,不会向下移动计算其他行。我尝试将范围更改为整列,例如Range("C:C") 但我收到类型不匹配错误。我还尝试在 for 循环中添加 activecell.offset(1,0),这会将 activecell 向下移动,但单元格 C3 保持空白。

我在 A (Year) 和 B (GapYear) 列中有数百个条目,如何让代码遍历每一行并在 col3 中给出正确答案?

谢谢

【问题讨论】:

    标签: excel vba if-statement for-loop


    【解决方案1】:

    每次行增加时,您都需要重新定义要检查的范围。你这样做的方式如下:

    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
    

    【讨论】:

      【解决方案2】:

      仅仅做一个循环不会改变你硬编码的变量。

      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
      

      【讨论】:

        猜你喜欢
        • 2016-10-15
        • 1970-01-01
        • 1970-01-01
        • 2019-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-06
        • 1970-01-01
        相关资源
        最近更新 更多