如果语句里面有for循环

我对VBA很陌生,在这里我想要做的事情可能是完全疯狂的,但是请对我温柔:-)

所以有点背景。 我有一个项目清单(TLD)和价目表。 用下面的代码,我试图从价目表中扣除价格,如果项目的名称,产品和期限是正确的(我希望这是有道理的)。

当我运行它我得到“编译错误:否则没有如果”

Sub add_prices() Dim startnumber As Long Dim endnumber As Long Dim TLD As String Dim Listtld As String endnumber = Sheets("Pricelist").Application.WorksheetFunction.CountF(Range("F2:F40000")) - 1 For startnumber = 0 To endnumber TLD = Cells(3 + startnumber, 2) Listtld = Sheets("pricelist").Cells(2 + startnumber, 7) Product = Sheets("pricelist").Cells(2 + startnumber, 8) Period = Sheets("pricelist").Cells(2 + startnumber, 9) If TLD = Listtld Then If Product = "auto renewal" Then If Period = "1 year" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(2 + startnumber, 2) Else If Period = "2 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(3 + startnumber, 2) End If Else If Period = "3 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(4 + startnumber, 2) End If Else If Period = "4 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(5 + startnumber, 2) End If Else If Period = "5 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(6 + startnumber, 2) End If End If End If End If Next startnumber End Sub 

我们欢迎所有的build议

改变ElseElse

 If TLD = Listtld Then If Product = "auto renewal" Then If Period = "1 year" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(2 + startnumber, 2) ElseIf Period = "2 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(3 + startnumber, 2) ElseIf Period = "3 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(4 + startnumber, 2) ElseIf Period = "4 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(5 + startnumber, 2) ElseIf Period = "5 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(6 + startnumber, 2) End If End If End If 

绝对切换到Select Case ,而不是多个If s:

 Select Case Period Case "1 year" Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(2 + startnumber, 2) Case "2 years" Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(3 + startnumber, 2) Case "3 years" Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(4 + startnumber, 2) Case "4 years" Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(5 + startnumber, 2) Case "5 years" Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(6 + startnumber, 2) End Select 

这是固定的:

 Sub add_prices() Dim startnumber As Long Dim endnumber As Long Dim TLD As String Dim Listtld As String Dim Product As String Dim Period As String endnumber = Sheets("Pricelist").Application.WorksheetFunction.CountF(Range("F2:F40000")) - 1 For startnumber = 0 To endnumber TLD = Cells(3 + startnumber, 2) Listtld = Sheets("pricelist").Cells(2 + startnumber, 7) Product = Sheets("pricelist").Cells(2 + startnumber, 8) Period = Sheets("pricelist").Cells(2 + startnumber, 9) If TLD = Listtld Then If Product = "auto renewal" Then If Period = "1 year" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(2 + startnumber, 2) ElseIf Period = "2 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(3 + startnumber, 2) ElseIf Period = "3 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(4 + startnumber, 2) ElseIf Period = "4 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(5 + startnumber, 2) ElseIf Period = "5 years" Then Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(6 + startnumber, 2) End If End If End If Next startnumber End Sub 

我犹豫添加另一个解决scheme,但是可以缩短代码

 Sub add_prices() Dim startnumber As Long Dim endnumber As Long Dim TLD As String Dim Listtld As String endnumber = Sheets("Pricelist").Application.WorksheetFunction.CountF(Range("F2:F40000")) - 1 For startnumber = 0 To endnumber TLD = Cells(3 + startnumber, 2) Listtld = Sheets("pricelist").Cells(2 + startnumber, 7) Product = Sheets("pricelist").Cells(2 + startnumber, 8) Period = Sheets("pricelist").Cells(2 + startnumber, 9) If TLD = Listtld Then If Product = "auto renewal" Then Select Case Period Case "1 year", "2 years", "3 years", "4 years", "5 years" Cells(3 + startnumber, 3).Value = Sheets("pricelist").Cells(1 + startnumber + CLng(Left(Period, 1)), 2) Case Else 'perhaps nothing to do here End Select End If End If Next startnumber End Sub