2016-02-07 57 views
3

我有這樣的代碼,比較列A和B,並增加了1到B列,如果A是更大:添加新的聲明如果內的現有IF塊

Sub test07() 

    With Sheets("Sheet1") 

     Dim LastRow As Long, i As Long 

     LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

     For i = 12 To LastRow 

      If Range("A" & i).Value > Range("B" & i).Value Then 

       Range("B" & i).Value = Range("B" & i).Value + 1 

      End If 

     Next i 

    End With 

End Sub 

我想再次添加同樣的事情但列C和D,但我得到的語法錯誤,即:

Sub test07() 

    With Sheets("Sheet1") 

     Dim LastRow As Long, i As Long 

     LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

     For i = 12 To LastRow 

      If Range("A" & i).Value > Range("B" & i).Value Then 

       Range("B" & i).Value = Range("B" & i).Value + 1 

      If Range("C" & i).Value > Range("D" & i).Value Then 

       Range("D" & i).Value = Range("D" & i).Value + 1 

      End If 

     Next i 

    End With 

End Sub 

任何人都可以看到我要去哪裏錯了嗎?非常感謝

+1

在新的if語句之前添加一個End If。 –

+0

這是工作謝謝你! –

回答

0

你也應該熟悉elseif的元素 - elseif的是一樣的作爲End If如果後跟新的If語句,但只在第一個If語句導致False時才運行。即:假設A1 = 5,並且您想檢查A1的值以確定B1的值。如果下一個新的if語句

選項1,使用結束:

If Range("A1") > 3 Then 
    B1 = 2 
End If 
If Range("A1") > 4 Then 
    B1 = 1 
End If 'Because A1 = 5, both If statements are True, and therefore B1 will equal 1, because that is the last line of code which affects it 

選項2,使用elseif的:

If Range("A1") > 3 Then 
    B1 = 2 
ElseIf Range("A1") > 4 Then 
    B1 = 1 
End If 'Because A1 = 5, the first If statement is True, the ElseIf statement never runs, and therefore B1 will equal 2, because that is the only line of code which affects it. 

無論您可以通過以下兩種方式查詢值方法是有效的 - 你只需要理解你實際決定你想要使用的邏輯路徑。

5

正如評論中所述,您缺少End If。但是,您還沒有充分利用使用With ... End With statement來識別工作表的顯示父項。

Sub test07() 
    Dim lastRow As Long, i As Long 
    With Sheets("Sheet1") 
     lastRow = .Cells(Rows.Count, "A").End(xlUp).Row 
     For i = 12 To lastRow 
      If .Range("A" & i).Value > .Range("B" & i).Value Then 
       .Range("B" & i).Value = .Range("B" & i).Value + 1 
      End If '<~~might have to be three lines down depending upon how you want your logic to flow 
      If .Range("C" & i).Value > .Range("D" & i).Value Then 
       .Range("D" & i).Value = .Range("D" & i).Value + 1 
      End If 
     Next i 
    End With 
End Sub 

注意使用.Range.Cells;不是RangeCells。前綴時間段(也稱爲句號)將範圍和單元格與With ... End With中引用的工作表相關聯。

回到If ... End If的問題,如果您希望避免關閉If語句,您可以使用,如下所示。

Sub test07() 
    Dim lastRow As Long, i As Long 
    With Sheets("Sheet1") 
     lastRow = .Cells(Rows.Count, "A").End(xlUp).Row 
     For i = 12 To lastRow 
      If .Range("A" & i).Value > .Range("B" & i).Value Then _ 
       .Range("B" & i).Value = .Range("B" & i).Value + 1 
      If .Range("C" & i).Value > .Range("D" & i).Value Then _ 
       .Range("D" & i).Value = .Range("D" & i).Value + 1 
     Next i 
    End With 
End Sub 

此方法只適用於在If代碼行之後的單個相關代碼行。

1

你可以簡單地也複製/粘貼你的代碼並修改

Range("A" & i) --> Range("A" & i).Offset(#rows,#cols) 

甚至更​​好,但溝裏的「範圍」,並使用「電池」兩個迭代器和嵌套FOR循環...

With... 

for i in {#rowStart} To {#rowEnd} 
    for j in {#colstart} To {#Colend} 
     .Cells(i,j).Value = {put stuff here} 

使用UBOUND(範圍())來計算陣列中的大小和你我&Ĵ等....