2015-11-07 60 views
0

我需要一些相對簡單的宏的幫助。我需要檢查列i中的值是否大於列N中的值,如果是,那麼檢查它是否低於列O中的值,打印出列k中相應列P的數量。我寫了一個我認爲會起作用的宏,但是當它運行時,什麼也沒有發生。有任何想法嗎?我需要編寫一個具有多個條件的嵌套if語句

Sub CountP() 
Dim cell As Range 
Dim ws As Worksheet 
Dim i As Integer 
Dim j As Integer 


Set ws = Sheets("Bulk Add") 

For Each cell In ws.Range("I2:I2377") 
For i = 2 To 49 
If cell.Value > ws.Range("N" & i) Then 
    For j = 2 To 49 
    If cell.Value < ws.Range("O" & i) Then 
     ws.Range("J" & j) = ws.Range("P" & i) 
    End If 
     Next j 
    End If 
     Next i 
Next cell 

End Sub 

Screenshot of the values and columns;

+0

爲什麼這些嵌套循環?你不想比較同一行上的值嗎? –

回答

1

據我明白問題說明的代碼不需要循環n * n次。這足以找到在查找表(N1:O49)所述一對含有所研究的值:

Sub CountP() 
    Dim cell As Range 
    Dim ws As Worksheet 
    Dim i As Integer 
    Dim x 

    Set ws = Sheets(1) 
    With ws 
     For Each cell In .Range("I2:I2377") 
      x = cell.Value 
      For i = 2 To 49 
       If x > .Range("N" & i) And x <= .Range("O" & i) Then 
        .Range("J" & cell.Row) = .Range("P" & i) 
        Exit For 
       End If 
      Next i 
     Next cell 
    End With 
End Sub 

結果:到其中的值落在打印右旁的值的範圍內的數目,在列J.
仔細觀察間隔是如何測試的:數值需要大於下限和上限。這在您的示例數據中不一致。

+0

謝謝@ user1016274這段代碼工作得很好!感謝你的幫助。以前的嘗試並沒有在運行時拋出錯誤,但它們也沒有對實際結果進行任何更改,所以我不確定發生了什麼。 – NLourme

+0

如果您發現代碼很有用,並且感謝它與時間線性運行,而不是二次方程式,請將我的帖子標記爲「答案」。 – user1016274

2

記住設置單元格的值時使用的Value屬性。我假設你的意思是將J列作爲將列P中的值粘貼到的目標列(這就是代碼中的內容)。 這應該工作和比較,對於每一行X,在列中的單元的我X到在列N和O的所有對的值的值。如果第I X值是至少一對之間的列中的N個值和O它拷貝ĴX的值爲P X

Sub CountP() 
Dim ws As Worksheet 
Dim i As Integer, j As Integer  

Set ws = Sheets("Bulk Add") 
For i=2 To 2377 
    For j=2 To 2377 

    If ws.Range("I" & i) > ws.Range("N" & j).Value _ 
    And ws.Range("I" & i).Value < ws.Range("O" & j).Value Then 
     ws.Range("J" & i).Value = ws.Range("P" & i).Value 

     ' Once you've found one pair of N and O that satisfies the condition, 
     'you move on to the next row, by forcing the j loop to end. 

     Exit For 
    End If 
    Next j 
Next i 

End Sub 
+0

嗨@alfymbohm,我認爲你正在做的事情,但是當我運行宏沒有任何反應。我認爲這是因爲如果I2不在N2和O2之間,那麼如果I3在N3和O3之間等等,那麼它會繼續前進。這就是爲什麼我使用兩個整數i和j來保持列I中的值不變,同時檢查列N和O中的每個值。 – NLourme

+0

因此,如果我理解正確,對於每一行你想檢查列I中的值是否在列N和O中的至少一對值之間?那是I2你想看看是否N2 alfymbohm

+0

嗨,是的,就是這樣。對此感到抱歉。 – NLourme