下面是使用另一種方法Excel的內置Remove Duplicates
功能,以及編程的方法來刪除空行:
編輯
我已經刪除了使用上述方法中的代碼,它的時間太長跑步。我用一個使用VBA的集合對象來編譯一個獨特的公司列表的方法取代它。
第一種方法在我的機器上花了大約兩秒鐘的時間運行;下面的方法:約0.02秒。
Sub RemoveDups()
Dim wsSrc As Worksheet, wsDest As Worksheet
Dim rRes As Range
Dim I As Long, S As String
Dim vSrc As Variant, vRes() As Variant, COL As Collection
Set wsSrc = Worksheets("sheet1")
Set wsDest = Worksheets("sheet2")
Set rRes = wsDest.Cells(1, 1)
'Get the source data
With wsSrc
vSrc = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
'Collect unique list of companies
Set COL = New Collection
On Error Resume Next
For I = 2 To UBound(vSrc, 1) 'Assume Row 1 is the header
S = CStr(Trim(vSrc(I, 1)))
If Len(S) > 0 Then COL.Add S, S
Next I
On Error GoTo 0
'Populate results array
ReDim vRes(0 To COL.Count, 1 To 1)
'Header
vRes(0, 1) = vSrc(1, 1)
'Companies
For I = 1 To COL.Count
vRes(I, 1) = COL(I)
Next I
'set results range
Set rRes = rRes.Resize(UBound(vRes, 1) + 1)
'Write the results
With rRes
.EntireColumn.Clear
.Value = vRes
.EntireColumn.AutoFit
'Uncomment the below line if you want
'.Sort key1:=.Columns(1), order1:=xlAscending, MatchCase:=False, Header:=xlYes
End With
End Sub
注意:你寫你不關心順序,但如果要排序的結果,即增加約0.03秒的常規。
嗨,@加里的學生。你在桌上試過了嗎?我仍然在sheet2中的標題正下方留下空格。其餘的似乎是爲了。 –
我使用基於sheet1的其他列的公式獲得我的公司名稱,不確定它是否相關。此外,我切換到自動計算,現在我只得到頭和一個#REF!在它下面 。我不知道該怎麼辦。 –
@carlos_cs我會嘗試修改代碼來處理**兩個**問題。 –