【发布时间】:2017-12-10 16:21:58
【问题描述】:
我有一个很大的电子表格要求我进行编辑。基本上,无论从哪里提取数据,它都会创建多个个人姓名、国家、开始日期和结束日期的副本。是否可以在相邻单元格中获取开始和停止日期并删除重复数据?
我提供了一个屏幕截图。手动复制、粘贴和删除将花费很长时间,因为此电子表格有超过 2300 行,其中大约 50% 是需要编辑的重复项。
谢谢
【问题讨论】:
标签: vba excel duplicates
我有一个很大的电子表格要求我进行编辑。基本上,无论从哪里提取数据,它都会创建多个个人姓名、国家、开始日期和结束日期的副本。是否可以在相邻单元格中获取开始和停止日期并删除重复数据?
我提供了一个屏幕截图。手动复制、粘贴和删除将花费很长时间,因为此电子表格有超过 2300 行,其中大约 50% 是需要编辑的重复项。
谢谢
【问题讨论】:
标签: vba excel duplicates
使用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
【讨论】: