返回列表 上一主題 發帖

[發問] 如何在陣列裡篩選出不重複的值?

[發問] 如何在陣列裡篩選出不重複的值?

想請教
如何將A1到D5不重複的值
依序顯現在G1往右的儲存格?

如圖示
2020-09-14_003950.gif
2020-9-14 00:42

本帖最後由 軒云熊 於 2020-9-14 21:12 編輯

回復 1# zheng211016
剛好可以練習一下 不過不知 該如何在字典用串聯方式或是陣列裡橫向排序...
  1. Public Sub 查詢不重複並橫向排序練習()
  2. If [F1] <> "" Then [F1].CurrentRegion.Clear
  3. Arr = [A1].CurrentRegion
  4. Set xD = CreateObject("Scripting.Dictionary")
  5. For I = 1 To UBound(Arr, 1)
  6.     For j = 1 To UBound(Arr, 2)
  7.         xD(Arr(I, j)) = Arr(I, j)
  8.     Next j
  9. Next I
  10. [F1].Resize(1, xD.Count) = xD.Keys
  11. [F1].CurrentRegion.Sort [F1].CurrentRegion, Orientation:=xlLeftToRight
  12. End Sub
複製代碼

TOP

本帖最後由 zheng211016 於 2020-9-14 22:40 編輯

回復 2# 軒云熊


實測沒問題 非常感謝
但想請問是如何讓他篩選的?
難道是
xD.Count
xD.Keys
能讓他自動選出不重複的值?

TOP

回復 1# zheng211016

試試看
字典(Dictionary)的exists判斷是否為重複,如果字典內找不到才放入,字典內已有的值不放入
Sub Ex()
Dim d As Object
Dim a As Object
Set d = CreateObject("Scripting.Dictionary")
For Each a In Range("a1").CurrentRegion
   If Not d.exists(a.Value) Then d.Add a.Value, ""
Next
[g1].Resize(, d.Count) = d.keys
Range([g1], Cells(1, [g1].End(2).Column)).Sort Range("g1"), 1, Orientation:=xlSortRows
Set d = Nothing
End Sub

TOP

E2:E10 {=IFERROR(SMALL(IF(COUNTIF(F$1:F1,A$1:D$5)=0,A$1:D$5),1),"")

G2:G10 {=IFERROR(INDIRECT(TEXT(SMALL(IF(COUNTIF(G$1:G1,A$1:D$5)=0,ROW($1:$5)/1%+{1,2,3,4}),1),"!R0C00"),),"")

H2"H10 {=IFERROR(INDIRECT(TEXT(RIGHT(SMALL(IF(COUNTIF(H$1:H1,A$1:D$5)=0,ROW($1:$5)/1%+{1,2,3,4}*10001),1),4),"!R0C00"),),"")
7366.png
隨意窩 "EXCEL迷"  blog  或 http://blog.xuite.net/hcm19522/twblog
已收集7000篇 EXCEL函數

TOP

回復 3# zheng211016

我也是新手最近才開始學習字典運用 還在學習階段  
有空你也可以研究看看

准提部林大大說過的
dic--keys, items
keys--只會留獨一無二的"索引值", 所以不會重覆
items--可以容納任何型態內容, 變化較多, 但可從簡單的著手

其實很好理解, 多幾次練習即可,
單欄資料:
1) 取得a欄內容的唯一值
2) 計算a欄各唯一值的出現次數
兩欄資料:
1) 計算a欄各唯一值在b欄的合計數
2) 計算a欄各唯一值,且b欄符合某一條件的次數

TOP

回復 4# jcchiang
回復 5# hcm19522
回復 6# 軒云熊

謝謝三位大大的指教 小弟受益良多!!!

TOP

        靜思自在 : 【蒙蔽的自由】人常在什麼都可以自由自在的時候,卻被這種隨心所欲的自由蒙蔽,虛擲時光而毫無覺知。
返回列表 上一主題