Board logo

標題: [發問] 陣列移重複值CreateObject("Scripting.Dictionary") [打印本頁]

作者: li_hsien    時間: 2016-5-11 17:34     標題: 陣列移重複值CreateObject("Scripting.Dictionary")

參考了下面這篇進行陣列重複值的移除
http://forum.twbts.com/thread-12757-1-1.html

上方範例的陣列如下
  1. AR = Array("XX", "aa", "ab", "ab", "ab", "XX", "ab")
複製代碼
但是我改成我所要的變數方式
  1. AR = Array(Worksheets(1).Range("S" & i) , Worksheets(1).Range("Z" & i) , Worksheets(1).Range("AG" & i) , Worksheets(1).Range("AN" & i))
複製代碼
但是印出來的結果沒有辦法將重複值移除

不清楚問題點為何

還請各位指教

謝謝 !
作者: luhpro    時間: 2016-5-11 22:53

本帖最後由 luhpro 於 2016-5-11 23:02 編輯
參考了下面這篇進行陣列重複值的移除
上方範例的陣列如下但是我改成我所要的變數方式但是印出來的結果 ...
li_hsien 發表於 2016-5-11 17:34



1. AR = Array(Worksheets(1).Range("S" & i) , Worksheets(1).Range("Z" & i) , Worksheets(1).Range("AG" & i) , Worksheets(1).Range("AN" & i)) 可以改成 :

With Worksheets(1)
  AR = Array(.Range("S" & i) , .Range("Z" & i) , .Range("AG" & i) , .Range("AN" & i))
End With

2. 依你的程式內容來猜測,

應該是你的陣列在每個迴圈中都有被 Array 指令重置(清除), 所以產生不了你想要濾除重複資料的效果.(陣列內元素極大的少於實際情形)


另, 當陣列個數不確定時,

建議改用 Redim 與 直接賦值 方式產生陣列,

Array 只能建立固定個數且內容皆已條列在該行程式右方的陣列.


基於上述修改後的程式如下:
  1. Sub nn()
  2.   Dim i%
  3.   Dim AR()
  4.   
  5.   ReDim AR(0) ' 建立內含 1 個空元素的陣列
  6.   With Worksheets(1)
  7.     For i = 1 To 20 ' 依需求調整實際迴圈執行數
  8.       ReDim AR(UBound(AR) + 1) ' 陣列擴大 1 個元素空間, 且不清除陣列內容
  9.       AR(UBound(AR)) = .Range("S" & i)
  10.       ReDim AR(UBound(AR) + 1)
  11.       AR(UBound(AR)) = .Range("Z" & i)
  12.       ReDim AR(UBound(AR) + 1)
  13.       AR(UBound(AR)) = .Range("AG" & i)
  14.       ReDim AR(UBound(AR) + 1)
  15.       AR(UBound(AR)) = .Range("AN" & i)
  16.     Next
  17.   End With
  18. End Sub
複製代碼

作者: jackyq    時間: 2016-5-12 02:35

回復 1# li_hsien

use   Range(  ....  ).value
作者: li_hsien    時間: 2016-5-12 08:20

回復 2# luhpro

感謝luhpro的回復 !

因為明確知道陣列數量所以才直接以Array進行處理

但主要需要將重複值排除掉

結果3樓jackyq的建議,解決的這個問題了 !!!

謝謝您的協助
作者: li_hsien    時間: 2016-5-12 08:21

回復 3# jackyq

謝謝jackyq !

真的可以排除重複了 !!!

可是我不太清楚為何.value會有此差異@@




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)