作者nazomegami (深呼吸~)
看板Office
標題Re: [算表] VBA移除陣列中元素
時間Sat Mar 12 12:41:42 2016
各位版大好,以下有一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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.39.49.112
※ 文章網址: https://www.ptt.cc/bbs/Office/M.1457757705.A.BF4.html
→ soyoso: 寫法為for each 變數 in dic...next 03/12 13:18
→ soyoso: 變數用於迴圈item及key內 03/12 13:30
→ nazomegami: 我後來使用以下做法 03/12 20:44
→ nazomegami: For i = 0 To dic.Count - 1 03/12 20:45
→ nazomegami: If dic.items()(i) = 0 Then dic.items()(i) = "a 03/12 20:45
→ nazomegami: Next 03/12 20:46
→ nazomegami: 不過dic裡面的key卻不為所動,覺得很困惑@@ 03/12 20:46
→ nazomegami: 不好意思,上面應為dic.items()(i) = "" 03/12 20:47
→ soyoso: 測試可用個變數接dic.key()(i)的值,再以dic.key(變數)的 03/12 21:28
→ soyoso: 方式=原po要的字串 03/12 21:28
→ soyoso: 更正為應是變數接dic.keys()(i)的值 03/12 21:34
→ nazomegami: 這樣的寫法就成功了 03/13 17:09
→ nazomegami: 不過dic的key之首項似乎不能為"" 03/13 17:10
→ nazomegami: 因為每次只要首項為"",程式就會停止 03/13 17:11
→ nazomegami: 不知這樣的問題有無解法? 03/13 17:11
→ nazomegami: 還是只能另外用變數來處理? 03/13 17:12
→ soyoso: 不太了解什麼是key之首項,是指item 1嗎? 03/13 17:20
→ soyoso: 如果是的話,測試用for each..next來帶出,並無出現原po的 03/13 17:21
→ soyoso: 情況 03/13 17:21
→ nazomegami: 這裡的key首項就是item 1沒錯 03/13 20:04
→ nazomegami: 我後來用以下寫法 03/13 20:04
→ nazomegami: For Each i In ary1 03/13 20:05
→ nazomegami: If dic.Item(i) = 0 Then dic.Key(i) = "" 03/13 20:05
→ nazomegami: Next 03/13 20:05
→ nazomegami: 當item 1不為0時,其餘item為0所對應到的key皆被順利 03/13 20:08
→ nazomegami: 變更為"",但若item 1為0時,則程式會出現錯誤。 03/13 20:10
→ nazomegami: 不知道我哪裡做錯了,還請指教,謝謝! 03/13 20:11
→ soyoso: 並以for each...next帶出,如圖片下方紅框 03/13 20:46
→ nazomegami: 可是如果連B的數字都為0 03/14 08:34
→ nazomegami: 那C,甚至之後的D、E等就會跑不出來 03/14 08:36
→ nazomegami: 在真實的狀況中,不同的項目的確會因為不同的時間的買 03/14 08:39
→ nazomegami: 賣而使存貨為0 03/14 08:39
→ soyoso: 如果有二筆以上都改為空字串"",就會因為有重覆值而無法執 03/14 08:54
→ soyoso: 行 03/14 08:55
→ soyoso: 因此有二筆以上時,可以remove方式移除,迴圈以反序方式 03/14 08:58
→ nazomegami: 瞭解了,謝謝! 03/14 11:38