Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3982|回复: 8

[已解决]型態不符合問題

[复制链接]
发表于 2017-6-23 21:46 | 显示全部楼层 |阅读模式
  1. Sub ts()Dim arr, brr
  2.     Dim i As Long, m As Long
  3.     Dim dic As Object
  4.      
  5.      
  6.     Set dic = CreateObject("scripting.dictionary")
  7.     arr = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).Row)
  8.     For i = 1 To UBound(arr)
  9.         If Not dic.exists(arr(i, 1)) Then
  10.             dic.Add arr(i, 1), ""
  11.         Else
  12.             dic.Item(arr(i, 1)) = dic.Item(arr(i, 1)) + 1
  13.         End If
  14.     Next i
  15.     [c1].Resize(dic.Count) = Application.Transpose(dic.keys)
  16.     [d1].Resize(dic.Count) = Application.Transpose(dic.items)
  17.     Set dic = Nothing
  18. End Sub
复制代码
請問"dic.Item(arr(i, 1)) = dic.Item(arr(i, 1)) + 1 "
這一句出現錯誤了可以請路過高手指導一下
謝謝
最佳答案
2017-6-23 23:27
本帖最后由 砂海 于 2017-6-23 23:28 编辑

1. ) 解决当前问题
"dic.Item(arr(i, 1)) = dic.Item(arr(i, 1)) + 1"
改为
"dic(arr(i, 1)) = Val(dic(arr(i, 1))) + 1"
val() 是 用于处理首次 ""

2. ) 字典的创建方法有
      直接创建 (你现在这样 )该方法不支持     .keys( 序数 )     与   items (序数)

      引用法 , microsoft scripting runtime 如下图 nn - 副.png
然后 dim dic as new dictionary

3. )  效果示例
Sub cc()

Dim d As New Dictionary
Dim i, k
k = Array(9, 2, 3, 4, 4, 4, 5, 5)
For i = 0 To UBound(k) - 1
d(k(i)) = d(k(i)) + 1
Next i

Stop
d.Keys(2) = 7       '本句 2 是 序数 , 本句无效
d.Key(3) = 77       '本句 3 是 key , 本句有效
d.Items(3) = 888    '本句 3 是 序数 , 本句无效
d.Item(4) = 4444    '本句 4 是 key
d(2) = 999          '本句 1 是 key


For i = 0 To 4
Debug.Print d.Keys(i) & "      " & d.Items(i)
Next i

Stop
End Sub




发表于 2017-6-23 22:09 | 显示全部楼层
本帖最后由 砂海 于 2017-6-23 22:22 编辑

1 .)   直接修改
dic(arr(i, 1)) = Val(dic(arr(i, 1))) + 1

2 .)    Set   XXX  = CreateObject("scripting.dictionary") 直接创建的方法
看不到 属性,方法 , 不能 d.key()

回复

使用道具 举报

 楼主| 发表于 2017-6-23 22:34 | 显示全部楼层
砂海兄,您的意思,不是很懂,可以再指教一下嗎
回复

使用道具 举报

 楼主| 发表于 2017-6-23 22:45 | 显示全部楼层
1 .)   直接修改
dic(arr(i, 1)) = Val(dic(arr(i, 1))) + 1


ˊ執行後的結果,不正確,
若是改:dic.Add dic(arr(i,1),1
反而執行結果正確
回复

使用道具 举报

发表于 2017-6-23 23:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 砂海 于 2017-6-23 23:28 编辑

1. ) 解决当前问题
"dic.Item(arr(i, 1)) = dic.Item(arr(i, 1)) + 1"
改为
"dic(arr(i, 1)) = Val(dic(arr(i, 1))) + 1"
val() 是 用于处理首次 ""

2. ) 字典的创建方法有
      直接创建 (你现在这样 )该方法不支持     .keys( 序数 )     与   items (序数)

      引用法 , microsoft scripting runtime 如下图 nn - 副.png
然后 dim dic as new dictionary

3. )  效果示例
Sub cc()

Dim d As New Dictionary
Dim i, k
k = Array(9, 2, 3, 4, 4, 4, 5, 5)
For i = 0 To UBound(k) - 1
d(k(i)) = d(k(i)) + 1
Next i

Stop
d.Keys(2) = 7       '本句 2 是 序数 , 本句无效
d.Key(3) = 77       '本句 3 是 key , 本句有效
d.Items(3) = 888    '本句 3 是 序数 , 本句无效
d.Item(4) = 4444    '本句 4 是 key
d(2) = 999          '本句 1 是 key


For i = 0 To 4
Debug.Print d.Keys(i) & "      " & d.Items(i)
Next i

Stop
End Sub




评分

参与人数 1 +9 收起 理由
苏子龙 + 9 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-6-24 08:59 | 显示全部楼层
砂海兄,以為自己學習入門了,看到你的解釋,才知道仰之彌高,
感謝您的指導後又說明,雖然不是全然了解
但是先謹記在心了
回复

使用道具 举报

发表于 2017-6-24 15:07 | 显示全部楼层
idnoidno 发表于 2017-6-24 08:59
砂海兄,以為自己學習入門了,看到你的解釋,才知道仰之彌高,
感謝您的指導後又說明,雖然不是全然了解
...

言重了.
我之前 只用过 d ( key )
--------------------------------
我回答你这个问题 , 因为我这里 对 .key .item 不熟 , 刚好学习了一下. 属现学现卖

回复

使用道具 举报

 楼主| 发表于 2017-6-25 08:44 | 显示全部楼层
砂海兄,謙虛了,你可以回復就是一種專業與熱稀的展現
回复

使用道具 举报

发表于 2021-7-9 13:57 | 显示全部楼层
請問一下,在這邊如果是要以string 的型態要怎麼處理呢? 謝謝
Val(  dic(arr(i, 1))  )
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 16:15 , Processed in 0.283849 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表