2015-04-01| @Excel報表顧問
因爲是要保留源數據的,所以此處不允許用刪除重複項等一些操作。
本文介紹一種函數和一段vba代碼,進行運算。
源數據如下:
函數的方式是D1=INDEX(A:A,SMALL(IF(MATCH($A$1:$A$10,$A$1:$A$10,)=ROW($1:$10),ROW($1:$10),65536),ROW(A1))),最後是數組三鍵來完成。
因爲區域是A1:A10,所以公式裏都是10.如果區域是20,就都改成20.
因爲涉及的函數很多,對於不瞭解函數的菜鳥來說,也不好理解。所以就直接告訴大家如何去修改,使用。見紅字。
VBA編程的方法是按ALT+F11,進入VBE編輯器,插入模塊。輸入代碼如下:
Private Sub 提取不重複_Click()
Dim myList As New Collection, Cel As Range, itm, i As Integer, maxRow As Long
maxRow = Sheets("Sheet1").[B65536].End(xlUp).Row '獲取A列的最後一個非空單元格的行號 Office2007的最大行號是1048576
On Error Resume Next
For Each Cel In Range("B1:B" & maxRow)
myList.Add Cel.Value, CStr(Cel.Value)
Next
On Error GoTo 0
i = 1
For Each itm In myList
Cells(i, 4) = itm '新數據輸出列,4=D列
i = i + 1
Next
End Sub
按F5就能運行結果。
作者介紹:薛奔(Sharpen),大電商網站運營分析師。
微軟Excel專家認證,擅長Excel數據報表自動化。微博@Excel報表顧問。
自營店鋪:Xexcel.taobao.com 銷售本人原創的全系列Excel視頻教程。