Re: [算表] VBA移除陣列中元素

作者: nazomegami (深呼吸~)   2016-03-12 12:41:42
各位版大好,以下有一dictionary物件,今欲將item為0之key值寫入空值,但是卻出現
dic.Item(i)非變數的錯誤訊息,不知道要如何修正,謝謝!
Function inventory_rank3(item_range As Range, number_range As Range, _
rank_order As Integer) As String
Dim r As Range
Dim ary1, ary2
Dim w&, dic, num&,
Set dic = CreateObject("scripting.dictionary")
For Each r In item_range
num = number_range.Resize(1).Offset(w)
If r <> "" Then
If dic.exists(r.Value) Then
dic.Item(r.Value) = dic.Item(r.Value) + num
Else
dic.Add r.Value, num
End If
End If
w = w + 1
Next
For Each dic.Item(i) In dic
If dic.Item(i) = 0 Then dic.Key(i) = ""
Next
End Function
作者: soyoso (我是耀宗)   2016-03-12 13:18:00
寫法為for each 變數 in dic...next變數用於迴圈item及key內
作者: nazomegami (深呼吸~)   2016-03-12 20:44:00
我後來使用以下做法For i = 0 To dic.Count - 1If dic.items()(i) = 0 Then dic.items()(i) = "aNext不過dic裡面的key卻不為所動,覺得很困惑@@不好意思,上面應為dic.items()(i) = ""
作者: soyoso (我是耀宗)   2016-03-12 21:28:00
測試可用個變數接dic.key()(i)的值,再以dic.key(變數)的方式=原po要的字串更正為應是變數接dic.keys()(i)的值
作者: nazomegami (深呼吸~)   2016-03-13 17:09:00
這樣的寫法就成功了不過dic的key之首項似乎不能為""因為每次只要首項為"",程式就會停止不知這樣的問題有無解法?還是只能另外用變數來處理?
作者: soyoso (我是耀宗)   2016-03-13 17:20:00
不太了解什麼是key之首項,是指item 1嗎?如果是的話,測試用for each..next來帶出,並無出現原po的情況
作者: nazomegami (深呼吸~)   2016-03-13 20:04:00
這裡的key首項就是item 1沒錯我後來用以下寫法For Each i In ary1If dic.Item(i) = 0 Then dic.Key(i) = ""Next當item 1不為0時,其餘item為0所對應到的key皆被順利變更為"",但若item 1為0時,則程式會出現錯誤。不知道我哪裡做錯了,還請指教,謝謝!
作者: soyoso (我是耀宗)   2016-03-13 20:46:00
https://imgur.com/QHto7Yn 模擬第一筆為0時並以for each...next帶出,如圖片下方紅框
作者: nazomegami (深呼吸~)   2016-03-14 08:34:00
可是如果連B的數字都為0那C,甚至之後的D、E等就會跑不出來在真實的狀況中,不同的項目的確會因為不同的時間的買賣而使存貨為0
作者: soyoso (我是耀宗)   2016-03-14 08:54:00
如果有二筆以上都改為空字串"",就會因為有重覆值而無法執行因此有二筆以上時,可以remove方式移除,迴圈以反序方式
作者: nazomegami (深呼吸~)   2016-03-14 11:38:00
瞭解了,謝謝!

Links booklink

Contact Us: admin [ a t ] ucptt.com