2017-08-12 200 views
-1

我試圖比較D列單元格對彼此。如果單元(d2,d3)具有相同的數據,則它將進入下一個單元(D4)並比較單元D3和D4。如果它是假的,那麼它應該在它們之間添加一行,並將數據放在新行中的較低單元格中。Excel VBA比較單元格與列

IE

ljsdahgfoshfv 
ljsdahgfoshfv 
ljsdahgfoshfv 
lldkjafsf;ksn 
dslkfndjlnvfs 
dslkfndjlnvfs 
dslkfndjlnvfs 

將轉化爲

ljsdahgfoshfv 
ljsdahgfoshfv 
ljsdahgfoshfv 
lldkjafsf;ksn 
lldkjafsf;ksn 
dslkfndjlnvfs 
dslkfndjlnvfs 
dslkfndjlnvfs 
dslkfndjlnvfs 
dslkfndjlnvfs 

示例表:

回答

-1

此代碼似乎做你的描述,但根據我的理解,你應該結果中最後一項的行數少一個。無論如何,通過逐步完成代碼,您應該能夠根據需要進行修改以獲得所需的結果。如果沒有,請提問。 .select聲明僅用於在您逐步執行代碼時遵循邏輯,並且在您瞭解代碼的工作方式後應該將其刪除。

Option Explicit 
Sub compareD() 
Dim r As Range 
Set r = ActiveSheet.Range("D1") 
While r <> "" 
    If r = r.Offset(1, 0) Then 
    r.Select 
    Set r = r.Offset(1, 0) 
    Else 
    Rows(r.Row + 1).Insert 
    r.Select 
    r.Offset(1, 0) = r.Offset(2, 0) 
    Set r = r.Offset(2, 0) 
    End If 
Wend 
End Sub 
+1

完美謝謝你! – scandune

+0

很高興聽到。如果您將其標記爲已回答,則會有幫助。 –

+0

有沒有辦法將數據添加到列b? – scandune

0
Sub insertRows() 

    ActiveSheet.Range("D1").Select 

    Do Until Not IsEmpty(ActiveCell) 

     Set curCell = ActiveCell 
     Set nextCell = ActiveCell.Offset(1, 0) 

     If nextCell.Value <> curCell.Value Then 

      ActiveCell.Offset(1, 0).EntireRow.Insert 
      ActiveCell.Offset(3, 0).Select 

     Else 

      ActiveCell.Offset(1, 0).Select 

     End If 
    Loop 

End Sub 

希望這有助於你。

+0

您應該注意:[Excel VBA簡介第5部分 - 選擇單元格(範圍,單元格,活動單元格,結束,偏移)](https://www.youtube.com/watch?v=c8reU-H1PKQ&index=5&list= PLNIs-AWhQzckr8Dgmgb3akx_gFMnpxTN5&t = 3124s)。 – 2017-08-12 06:41:18