Excel VBA中的IF语句

时间:2015-05-04 08:17:56

标签: excel vba excel-vba if-statement

我一直试图在我正在构建的电子表格中为我创建一个新列。它将从列K中获取“是”或“否”,并且根据是否为“是”,将使用“待定”或“管道”填充新列。

以下是我一直使用的代码 - 但这只是将所有内容标记为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)

我哪里出错?

3 个答案:

答案 0 :(得分:1)

您在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

答案 1 :(得分:1)

您正在使用的if语句正在您正在使用的VBA代码中运行,因此输入到单元格M2的值只是“Pipeline”或“Pending”。因此,当您复制行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公式,则可以选择使用循环,这意味着您的代码将变为:

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

答案 2 :(得分:0)

似乎问题是从M2复制的最后。

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

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