閱: 3746 | 回: 0
等級:初學者
-
積分:0
-
財富值:0.00
-
身份:普通用戶
要將一個多行多列區(qū)域中不重復的數(shù)據(jù)提取到一列,即對于重復的數(shù)據(jù)只提取一次,最直接的做法是先將該區(qū)域的數(shù)據(jù)轉(zhuǎn)到一列中,再利用Excel2007/2010中的刪除重復項功能去掉重復值。另外,還可使用數(shù)據(jù)透視表、數(shù)組公式和VBA的方法來提取,本文以Excel 2010為例分別介紹如下,
假如數(shù)據(jù)在A1:C11區(qū)域,其中還包含一些空單元格,如圖所示。
方法一:利用數(shù)據(jù)透視表利于數(shù)據(jù)透視表的多重合并計算功能,將上述數(shù)據(jù)區(qū)域作為數(shù)據(jù)透視表的多重合并計算數(shù)據(jù)區(qū)域,把“值”字段放到在數(shù)據(jù)透視表的行區(qū)域中,即可得到不重復值。步驟如下:
1.在區(qū)域左側(cè)插入空白列。如果原數(shù)據(jù)區(qū)域不是從A列開始,則可跳過此步驟。在本例中,由于原數(shù)據(jù)區(qū)域包含工作表的第一列(A列),需先在該區(qū)域的左側(cè)插入一個空白列,作為數(shù)據(jù)透視表的行字段。

3.再次單擊“下一步”,在彈出的對話框中選擇并添加數(shù)據(jù)區(qū)域。在選擇區(qū)域時注意要包含原數(shù)據(jù)區(qū)域的左側(cè)列及標題列。本例為包含上述空白列的A1:D11。
單擊“下一步”,在彈出的對話框中選擇數(shù)據(jù)透視表存放的位置,單擊“完成”按鈕。本例將數(shù)據(jù)透視表放置在當前工作表F3單元格開始的區(qū)域中。4.在數(shù)據(jù)透視表的字段列表中取消選擇所有字段,然后再次勾選“值”字段,或?qū)ⅰ爸怠弊侄瓮先氲健靶小睒撕瀰^(qū)域中,即可在F列得到原區(qū)域中的不重復值。
方法二:使用數(shù)組公式假如數(shù)據(jù)在A1:C11區(qū)域,在E2單元格中輸入數(shù)組公式:
=INDIRECT(TEXT(MIN(IF(($A$2:$C$11<>"")*(COUNTIF($E$1:E1,$A$2:$C$11)=0),ROW($2:$11)*100+COLUMN($A:$C),7^8)),"R0C00"),)&""
公式輸入完畢,按Ctrl+Shift+Enter結束。然后拖動填充柄向下填充公式,直到出現(xiàn)空白為止。
如果區(qū)域中的數(shù)據(jù)全部為數(shù)字和空單元格,還可用下面的數(shù)組公式:=LARGE(IF($A$2:$C$11="","",$A$2:$C$11),SUM(COUNTIF($A$2:$C$11,$E$1:E1))+1)
方法三:使用VBA
下面的VBA代碼利用Dictionary對象中的關鍵字具有唯一性的特點得到不重復值。使用方法是按Alt+F11打開VBA編輯器,在代碼窗口中粘貼下列代碼并運行,即可在F列可得到A2:C11區(qū)域中的不重復值。
Sub Uniquedata()
Dim rCell As Range
'創(chuàng)建Dictionary對象
Set d = CreateObject("Scripting.Dictionary")
'遍歷數(shù)據(jù)區(qū)域的單元格
For Each rCell In Range("A2:C11")
'判斷單元格是否為空
If rCell <> "" Then
'如果Dictionary對象中不包含指定的關鍵字就添加該關鍵字和條目
If Not d.exists(rCell.Value) Then d.Add rCell.Value, rCell.Value
End If
Next
'清除指定列內(nèi)容
Range("F2:F" & Range("F2").End(xlDown).Row).ClearContents
'將Dictionary對象中的條目寫入指定列
Range("F2").Resize(d.Count) = WorksheetFunction.Transpose(d.Items)
End Sub
我的個性簽名