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

関連する問題