2016-07-11 154 views
0

我想做一个excel代码,将比较相同的工作表的第1行和第2行的使用范围,并删除任何相似的单元格,并将其余(唯一值)单元格第1行从A1开始。VBA比较两个excel行和删除相似的单元格

例如)如果第1行中包含这些值(逗号inidicate DIFF细胞):A,B,C 和行2含有:A,B,C,d,E

我想要的代码进行比较的两行,最后一行是:d,e(在列A和B中),代码完成后。任何帮助,将不胜感激。

即时通讯新的VBA,所以即时通讯有麻烦的一些语法,我将不胜感激,如果一些专业人员可以帮助我。

  1. 获取第1行和第2行的已用列数作为整数。例如)maxCol1 = 3,maxCol2 = 5

  2. 创建一个for循环,从i = 1到maxCol2并比较第1行到第2行。如果它们相等,则使它们都为“”,如果有东西在第2行但不在第1行,将该值设置为单元格A1。

基本上只需要设置步骤1的帮助。

+0

尝试userdange.resize或usedrange.rows(1)等。在数组中加载使用的范围,循环和比较,保存数组中的最终值并最终转储工作表上的数组。对于所有这些步骤,您可以在SO上找到代码。 – cyboashu

+0

甜,非常感谢 –

+0

这可能会有所帮助:http://stackoverflow.com/a/33601498/293078 –

回答

0

随着评论中发布的链接的帮助,我想出了它!感谢那些帮助过的人。该代码比较第1行中的第2行并删除任何相似的单元格值,并将唯一值发布到第1行,并将其发布到新的工作表中。

Sub CompareAndDelete() 
'This code will compare the rows of each sheet and delete any old alerts that have already been emailed out 
' it will then call SaveFile IF new alerts have been found 

Dim row1() As Variant, row2() As Variant, newRow As Variant 
Dim coll As Collection 
Dim i As Long 
Dim maxCol1 As Integer 
Dim maxCol2 As Integer 

'Find max number of columns for old and new alert 
With ActiveSheet 
    maxCol1 = .Cells(1, .Columns.Count).End(xlToLeft).Column 
    maxCol2 = .Cells(2, .Columns.Count).End(xlToLeft).Column 
End With 

'Redimensionalize arrays 
ReDim row1(0 To (maxCol1 - 1)) 
ReDim row2(0 To (maxCol2 - 1)) 

'Assign row1/row2 string values into arrays 
For r = 0 To (maxCol1 - 1) 
    row1(r) = Cells(1, r + 1).Value 
Next 

For s = 0 To (maxCol2 - 1) 
    row2(s) = Cells(2, s + 1).Value 
Next 

ReDim newRow(LBound(row1) To Abs(UBound(row2) - UBound(row1)) - 1) 

'Create a collection to load all row1/row2 values into 
Set coll = New Collection 

'Empty Collection for each run through 
Set coll = Nothing 

'Set collection to New before using 
Set coll = New Collection 



For i = LBound(row1) To (UBound(row1)) 
    coll.Add row1(i), row1(i) 
Next i 

For i = LBound(row2) To (UBound(row2)) 
    On Error Resume Next 
    coll.Add row2(i), row2(i) 
    If Err.Number <> 0 Then 
     coll.Remove row2(i) 
    End If 
    On Error GoTo 0 
Next i 

'Copy Row 2 and Paste it to Row 1 

ActiveWorkbook.ActiveSheet.Rows(2).Copy 
Range("A1").Select 
ActiveSheet.Paste 

'Now values are stored in collection, delete row 2 
'Rows(2).EntireRow.ClearContents 

'Paste only the new alerts onto a new worksheet that is designated for new alerts 
For i = LBound(newRow) To UBound(newRow) 
    newRow(i) = coll(i + 1) 'Collections are 1-based 
    'Debug.Print newRow(i) 
    ActiveWorkbook.Sheets("Sheet" & index + 4).Select 
    ActiveWorkbook.Sheets("Sheet" & index + 4).Cells(1, i + 1).Value = newRow(i) 

Next i 


'if NEW alerts have been found, call SaveFile 
If IsEmpty(ActiveWorkbook.Sheets("Sheet" & index + 4).Cells(1, 1)) = False  Then 
     Call SaveFile 
End If 

End Sub 
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
相关问题