返回列表 上一主題 發帖

[發問] 陣列移重複值CreateObject("Scripting.Dictionary")

本帖最後由 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
複製代碼

TOP

        靜思自在 : 修行要繫緣修心,藉事練心,隨處養心。
返回列表 上一主題