我的IF / ELSE IF语句在VBA中不起作用

我有麻烦执行以下if语句到我的代码中:

IF(O3<0,"Y",N") 

有人可以帮助改变我的代码,包括这个if语句吗? 这是我试过的:

  If Range("O3:O4183") < 0 Then Range("P3").Value = "Y" Worksheets("Sample File").Range("P3:P4183").FillDown ElseIf Range("O3:O4183") > 0 Then Range("P3").Value = "N" Worksheets("Sample File").Range("P3:P4183").FillDown End If 

完整代码:

 Sub stackoverflow() Dim rng As Range ''sample file creation ''values Range("A3").Value = "CSH" ''hardcode Worksheets("Sample File").Range("A3:A4183").FillDown Set rng = Worksheets("File").Range("C2:C4182") Worksheets("Sample File").Range("B3").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value Set rng = Worksheets("File").Range("D2:D4182") Worksheets("Sample File").Range("C3").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value Range("D3").Value = "1" ''hardcode Worksheets("Sample File").Range("D3:D4183").FillDown Set rng = Worksheets("File").Range("E2:E4182") Worksheets("Sample File").Range("E3").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value Set rng = Worksheets("File").Range("E2:E4182") Worksheets("Sample File").Range("F3").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value Range("G3").Value = "USD" ''hardcode Worksheets("Sample File").Range("G3:G4183").FillDown Set rng = Worksheets("File").Range("K2:K4182") Worksheets("Sample File").Range("H3").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value Set rng = Worksheets("File").Range("F2:F4182") Worksheets("Sample File").Range("I3").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value Range("J3").Value = "DEALT" ''hardcode Worksheets("Sample File").Range("J3:J4183").FillDown Set rng = Worksheets("File").Range("H2:H4182") Worksheets("Sample File").Range("M3").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value Range("N3").Value = "0" ''hardcode Worksheets("Sample File").Range("N3:N4183").FillDown Set rng = Worksheets("File").Range("J2:J4182") Worksheets("Sample File").Range("O3").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value ''If statement: IF(O3<0,"Y",N") End Sub 

试试这个

 Option Explicit ' Sub stackoverflow() Dim src As Range Set src = Worksheets("File").Range("2:4182") Dim dst As Range Set dst = Worksheets("Sample File").Range("3:4183") ' sample file creation ' values dst.Columns("A") = "CSH" ' hardcode dst.Columns("D") = "1" dst.Columns("G") = "USD" dst.Columns("J") = "DEALT" dst.Columns("N") = "0" dst.Columns("B") = src.Columns("C").Value dst.Columns("C") = src.Columns("D").Value dst.Columns("E") = src.Columns("E").Value dst.Columns("F") = src.Columns("E").Value dst.Columns("H") = src.Columns("K").Value dst.Columns("I") = src.Columns("F").Value dst.Columns("M") = src.Columns("H").Value dst.Columns("O") = src.Columns("J").Value dst.Columns("P") = "=IF(RC[-1]<0,""Y"",""N"")" End Sub 

在VBA中有一个If语句有两个有效的语法。

语句语法

 If {bool-expression} Then {statement} 

这就是你在这里:

 If Range("O3:O4183") < 0 Then Range("P3").Value = "Y" Worksheets("Sample File").Range("P3:P4183").FillDown 

缩进误导 – 无论If语句中{bool-expression}的结果如何,第二行都将无条件地执行。

块语法

 If {bool-expression} Then {statements} [ElseIf {bool-expression} Then] {statements} [Else] {statements} End If 

当你想要Else / ElseIf逻辑时,或者如果你想有条件地执行多于一个的语句,使用这种语法*。

有些方法可以使用语句语法有条件地执行多个语句,但它们对可读性不利; 远离简单的错误,喜欢块语法。

能够拿出这个,

  Set range1 = Worksheets("Sample File").Range("P3:P4183") range1.Cells.Value = "=IF(RC[-1]<0,""Y"",""N"")" Worksheets("Sample File").Range("P3:P4183").FillDown 

似乎工作。