2015-05-04 201 views
1

我一直在試圖讓一個宏在我構建的電子表格中爲我創建一個新列。它將從列K中選擇是或否,並根據是或否來使用待定或管道填充新列。Excel中的IF語句VBA

下面是我一直使用的代碼 - 但這恰恰標誌着一切,管道:

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) 

我在哪裏了問題呢?

回答

0

看來問題在於你從M2複製的最後。

您使用的是if 函數,即設置M2 =if(K2="NO";"Pipeline";"Pending"),然後粘貼值。

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

+0

嗨, 本來我嘗試了以下,但我得到一個編譯「No」上的錯誤: Range(「M2」)。FormulaR1C1 =「= IF(K2 =」No「,」Pipeline「,」Pending「)」' 'Range(「M2」)。 :=範圍(「M3:M」&KR)' –

+0

哦,您只需要使用引號轉義引號內的引號: '範圍(「M2」)。值=「= IF(K2 =」「否」「」「管道」「」,「」待定「」)「' – JBiserkov

+0

非常感謝你 - 這個公式現在已被識別,但我遇到了另一個問題:將公式中的單元格保留爲K2不會將其鏈接到表格中的K2。 我已經在宏中使用以下代碼連接了一個月份公式,但我忘記了RC [-1]的來源。 'Dim MR As Long' 'MR = ActiveSheet.Range(「C」&Rows.Count).End(xlUp).Row' 'Range(「D2」)。FormulaR1C1 =「= TEXT(RC [ 1「,」「mmmm」「)」' '範圍(「D2」)複製目標:=範圍(「D3:D」&MR)' –

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

的,如果你正在使用的語句在VBA代碼運行時使用的是這樣的價值輸入到單元格M2的內容只是「管道」或「待定」。因此,當您複製行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