IF Excel语句在Excel VBA中

我一直试图让一个macros在我正在构build的电子表格中为我创build一个新的列。 它将从K列中select是或否,并根据是或否来填充新列以待处理或pipe道。

以下是我一直在使用的代码 – 但是这只是将一切标记为Pipeline:

  Dim KR As Long KR = ActiveSheet.Range("K" & Rows.Count).End(xlUp).Row Range("M1").EntireColumn.Insert Range("M1").Select ActiveCell.FormulaR1C1 = "Status" If Range("K2").Value = "No" Then Range("M2").Value = "Pipeline" ElseIf Range("K2").Value = "Yes" Then Range("M2").Value = "Pending" End If Range("M2").Copy Destination:=Range("M3:M" & KR) 

我去哪里错了?

看来问题在于你复制了M2的

您使用的是if =if(K2="NO";"Pipeline";"Pending") function (设置为M2 =if(K2="NO";"Pipeline";"Pending") ,然后粘贴值。

Range("M2").Value = "=IF(K2=""No"",""Pipeline"",""Pending"")"

你在VBA和Excel公式之间混淆了一些概念。 您的VBA代码If Then Else语句不会转换为Excel中的IF()公式。 所以你最终只能根据你的If语句设置第一个单元格的值,然后复制这个值。

如果您想使用Excel公式来做到这一点,您可以在VBA中设置M列,如下所示:

 Range("M2:M" & KR).Formula = "=IF(K2=""No"", ""Pipeline"", IF(K2=""Yes"", ""Pending"", """"))" 

如果要使用VBA设置M列中的值而不使用公式,则需要循环访问VBA中的单元格,然后在循环中使用“ If在代码中使用”,如下所示:

 For i = 2 To KR If Range("K" & i).Value = "No" Then Range("M" & i).Value = "Pipeline" ElseIf Range("K" & i).Value = "Yes" Then Range("M" & i).Value = "Pending" End If Next 

您正在使用的if语句正在使用的VBA代码中运行,因此input到单元格M2的值只是“pipe道”或“待定”。 因此,当您复制Range("M2").Copy Destination:=Range("M3:M" & KR)行上的单元格Range("M2").Copy Destination:=Range("M3:M" & KR)相同的结果复制到每个单元格(而不是条件公式)。

纠正最简单的方法是更换

 If Range("K2").Value = "No" Then Range("M2").Value = "Pipeline" ElseIf Range("K2").Value = "Yes" Then Range("M2").Value = "Pending" End If 

有:

 Range("M2").Formula = "=IF(K2=""No"",""Pipeline"",""Pending"")" 

这将意味着当您的代码复制单元格时,它将复制公式。

但是,如果您希望避免使用Excel公式,则可以select使用循环,这意味着您的代码将变为:

 Dim KR As Long, x As Long KR = ActiveSheet.Range("K" & Rows.Count).End(xlUp).Row Range("M1").EntireColumn.Insert Range("M1").Select ActiveCell.FormulaR1C1 = "Status" For x = 0 To (KR - 2) If Range("K2").Offset(x, 0).Value = "No" Then Range("M2").Offset(x, 0).Value = "Pipeline" ElseIf Range("K2").Offset(x, 0).Value = "Yes" Then Range("M2").Offset(x, 0).Value = "Pending" End If Next x