作者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/cn.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