2017-07-06 192 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