Excel VBA比较单元格与列

问题描述:

我试图比较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 

示例表:

此代码似乎做你的描述,但根据我的理解,你应该结果中最后一项的行数少一个。无论如何,通过逐步完成代码,您应该能够根据需要进行修改以获得所需的结果。如果没有,请提问。 .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

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