2017-07-06 127 views
0

我有一个很大的电子表格,我被要求编辑。基本上无论数据来自何处,它都创建了多个个人姓名,国家,开始日期和结束日期的重复。是否有可能获得相邻单元格中的开始和结束日期并删除重复的数据?excel,VBA,重复值

我提供了一个屏幕截图。手动复制,粘贴和删除操作需要很长时间,因为此电子表格有超过2300行,其中大约50%是需要编辑的重复项。

enter image description here

感谢

回答

1

VBA没有必要在这里,只需添加一个新列的公式:

=CONCATENATE(C1,D1) 

与列字母开始日期更换色谱柱信和结束日期。

然后,您可以使用Excel的删除重复的新列功能(数据 - >删除重复)

enter image description here

enter image description here

0

使用SQL是合适的。

Sub myQuery() 
    Dim strSQL As String 
    Dim strTable As String 
    Dim Ws As Worksheet 

    strTable = "[" & ActiveSheet.Name & "$]" 

    strSQL = "SELECT NAME, COUNTRY, MIN([Start Date]) as [Start Date] , max([End Date]) as [End Date] " 
    strSQL = strSQL & " FROM " & strTable & " " 
    strSQL = strSQL & " Where not isnull(NAME) " 
    strSQL = strSQL & " Group by NAME, COUNTRY " 

    Set Ws = Sheets.Add 

    exeSQL strSQL, Ws 

End Sub 

Sub exeSQL(strSQL As String, Ws As Worksheet) 

    Dim Rs As Object 
    Dim strConn As String 
    Dim i As Integer 

    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
     "Data Source=" & ThisWorkbook.FullName & ";" & _ 
      "Extended Properties=Excel 12.0;" 


    Set Rs = CreateObject("ADODB.Recordset") 
    Rs.Open strSQL, strConn 

    If Not Rs.EOF Then 
     With Ws 
      .Range("a1").CurrentRegion.ClearContents 
      For i = 0 To Rs.Fields.Count - 1 
       .Cells(1, i + 1).Value = Rs.Fields(i).Name 
      Next 
      .Range("a" & 2).CopyFromRecordset Rs 
      .Columns.AutoFit 
     End With 
    End If 
    Rs.Close 
    Set Rs = Nothing 
End Sub 
+0

不幸的是,我无法访问SQL Server Management Studio。有没有另一种方式来运行没有SQL? – Merj8