作者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://webptt.com/m.aspx?n=bbs/Office/M.1457757705.A.BF4.html
1F:→ soyoso: 寫法為for each 變數 in dic...next 03/12 13:18
2F:→ soyoso: 變數用於迴圈item及key內 03/12 13:30
3F:→ nazomegami: 我後來使用以下做法 03/12 20:44
4F:→ nazomegami: For i = 0 To dic.Count - 1 03/12 20:45
5F:→ nazomegami: If dic.items()(i) = 0 Then dic.items()(i) = "a 03/12 20:45
6F:→ nazomegami: Next 03/12 20:46
7F:→ nazomegami: 不過dic裡面的key卻不為所動,覺得很困惑@@ 03/12 20:46
8F:→ nazomegami: 不好意思,上面應為dic.items()(i) = "" 03/12 20:47
9F:→ soyoso: 測試可用個變數接dic.key()(i)的值,再以dic.key(變數)的 03/12 21:28
10F:→ soyoso: 方式=原po要的字串 03/12 21:28
11F:→ soyoso: 更正為應是變數接dic.keys()(i)的值 03/12 21:34
12F:→ nazomegami: 這樣的寫法就成功了 03/13 17:09
13F:→ nazomegami: 不過dic的key之首項似乎不能為"" 03/13 17:10
14F:→ nazomegami: 因為每次只要首項為"",程式就會停止 03/13 17:11
15F:→ nazomegami: 不知這樣的問題有無解法? 03/13 17:11
16F:→ nazomegami: 還是只能另外用變數來處理? 03/13 17:12
17F:→ soyoso: 不太了解什麼是key之首項,是指item 1嗎? 03/13 17:20
18F:→ soyoso: 如果是的話,測試用for each..next來帶出,並無出現原po的 03/13 17:21
19F:→ soyoso: 情況 03/13 17:21
20F:→ nazomegami: 這裡的key首項就是item 1沒錯 03/13 20:04
21F:→ nazomegami: 我後來用以下寫法 03/13 20:04
22F:→ nazomegami: For Each i In ary1 03/13 20:05
23F:→ nazomegami: If dic.Item(i) = 0 Then dic.Key(i) = "" 03/13 20:05
24F:→ nazomegami: Next 03/13 20:05
25F:→ nazomegami: 當item 1不為0時,其餘item為0所對應到的key皆被順利 03/13 20:08
26F:→ nazomegami: 變更為"",但若item 1為0時,則程式會出現錯誤。 03/13 20:10
27F:→ nazomegami: 不知道我哪裡做錯了,還請指教,謝謝! 03/13 20:11
29F:→ soyoso: 並以for each...next帶出,如圖片下方紅框 03/13 20:46
30F:→ nazomegami: 可是如果連B的數字都為0 03/14 08:34
31F:→ nazomegami: 那C,甚至之後的D、E等就會跑不出來 03/14 08:36
32F:→ nazomegami: 在真實的狀況中,不同的項目的確會因為不同的時間的買 03/14 08:39
33F:→ nazomegami: 賣而使存貨為0 03/14 08:39
34F:→ soyoso: 如果有二筆以上都改為空字串"",就會因為有重覆值而無法執 03/14 08:54
35F:→ soyoso: 行 03/14 08:55
36F:→ soyoso: 因此有二筆以上時,可以remove方式移除,迴圈以反序方式 03/14 08:58
37F:→ nazomegami: 瞭解了,謝謝! 03/14 11:38