2017-03-01 7 views
0
auf die Zelle bewegen

Ich habe 3 Spalten in meinem xlSheetVBA if-Anweisung und For-Schleife unter

Year  GapYear Col3 
Year 13 Yes  2018 
Year 12 No  
Year 13 Yes 
Year 12 No  

ich vba wollen das Startjahr in col3 arbeiten, basiert auf meiner if-Anweisung Logik:

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 

Der Code funktioniert nur Zelle C2 und bewegt sich nicht nach unten, um die anderen Zeilen zu berechnen. Ich habe versucht, die Bereiche auf die gesamte Spalte zu ändern, z. Range ("C: C"), aber ich bekomme einen Typenkonfliktfehler. Ich habe auch versucht, activecell.offset (1,0) in der for-Schleife hinzuzufügen, die die aktive Zelle nach unten bewegt, aber Zelle C3 bleibt leer.

Ich habe Hunderte von Einträgen in Spalten A (Jahr) und B (GapYear), wie kann ich den Code durch jede Zeile arbeiten und die richtige Antwort in Spalte 3 geben?

Dank

Antwort

2

Sie müssen die Bereiche Sie überprüfen jedes Mal die Zeile erhöht sich neu zu definieren. Die Art, wie Sie das tun, ist unten:

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 
0

Nur eine Schleife zu tun ändert nicht die Variablen, die Sie hart codiert haben.

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 
Verwandte Themen