2017-08-25 91 views
1

我試圖檢查當前行中包含唯一ID(連續的幾列)的單元格,並將它與其唯一ID上方的行進行比較。如果值相同,我想複製當前行並將此副本插入位於當前行上方兩行的新行中。如果ID不一樣,我不想做任何事情,並移動到工作表上的下一行。當IF語句爲真時,「Next」不能在循環中工作

下面的代碼運行沒有錯誤,並且正常工作,直到找到ID匹配。代碼根據我的需要複製和插入,但它的行爲就像它在同一行再次啓動「IF」語句(「下一個」不會分析下一行)。所以我最終得到無盡的副本並插入第一行,並在其上面有一個匹配的唯一ID。

Sub CopyAndInsert 
    Dim LastRow As Long 
    LastRow = Worksheets("Orders").Range("A" & Rows.Count).End(xlUp).Row 

    Set SelectionRNG = Worksheets("Orders").Range("A2:CX" & LastRow) 
    For Each rngrow In SelectionRNG.Rows 
     rngrow.Copy 
     If rngrow.Cells(1, 102) = rngrow.Cells(0, 102) Then 'checks if row CX is equal to the row above it (same column) 
      rngrow.Cells(2, 1).Offset(-2, 0).EntireRow.Insert 
     End If 
    Next 
End Sub 

請注意,如果行在唯一ID列(CX)中不匹配,則「下一個」按預期工作並繼續到下一行。只有當ID匹配並插入複製的行時,纔會發生不前進的問題。

在此先感謝您的幫助!

+3

因爲你在那裏插入行,並隨後改變循環的初始範圍。 – cyboashu

+1

插入或刪除行時,最好從底部到頂部遍歷列表。 –

+0

在if循環中寫'Next'。在外面也是 –

回答

1

綁循環到一個變量,並手動增加1它跳過添加的行似乎工作:

Sub CopyAndInsert() 
Dim lastRow As Long, x As Long 
lastRow = Worksheets("Orders").Range("A" & Rows.Count).End(xlUp).Row 

For x = 3 To lastRow 
    If Cells(x, 102) = Cells(x - 1, 102) Then 
     Cells(x - 1, 1).EntireRow.Insert 
     Range("A" & x + 1 & ":" & "CX" & x + 1).Copy Cells(x - 1, 1) 
     x = x + 1 
    End If 
Next x 

End Sub 
+0

這是行不通的,但是拋出了我原來的問題中沒有包含的代碼。代碼(如下所示)用於添加列CK中找到的「匹配」行的值,並將總和值放入新插入的「複製」行中。 (0,89)+ rngrow.Cells(1,89)' 我很難將我的rngRow格式化爲您的「範圍」格式 - 任何建議? – RugsKid

+1

在'x = x + 1'之前的行上放置'Cells(x-1,89).Formula = Cells(x,89).Value + Cells(x + 1,89).Value'應該訣竅 –

+0

我遇到了一個代碼問題,如果數據有4行ID與行匹配,它最終會插入三個新行,但它應該只添加2.我不確定,但這可能是可以解決的從底部循環到頂部並在兩條匹配線下面添加「複製」行 - 您怎麼看? – RugsKid