Excel精英培训网

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

[已解决]帮忙实现一下计算结果!

[复制链接]
发表于 2014-4-7 17:16 | 显示全部楼层 |阅读模式
本帖最后由 zte10157616 于 2014-4-7 22:35 编辑

服务小区
候选邻区
邻区距离
sCo
354038_11
354038_13
0
0
354038_11
354038_12
0
0
354038_12
354038_13
0
0
354038_12
354038_11
0
0
354038_13
354038_12
0
0
354038_13
354038_11
0
0
354039_11
354039_13
0
1371.7503
354039_11
354039_12
0
1371.7503
354039_11
356284_13
1371.7503
1371.7503
354039_11
356284_12
1371.7503
1371.7503
354039_11
356284_11
1371.7503
1371.7503
354039_12
354039_13
0
1371.7503
354039_12
354039_11
0
1371.7503
354039_12
356284_13
1371.7503
1371.7503
354039_12
356284_12
1371.7503
1371.7503
354039_12
356284_11
1371.7503
1371.7503
354039_13
354039_12
0
1371.7503
354039_13
354039_11
0
1371.7503
354039_13
356284_13
1371.7503
1371.7503
354039_13
356284_12
1371.7503
1371.7503
354039_13
356284_11
1371.7503
1371.7503

实现SCO列值的循环计算,规律服务小区列相同编号如果邻区距离全是0的后边SCO都是0,如果有0(2个)和一些非零值,那么剔除0的个数,其他非零按非零个数求平均为该服务小区编号对应的SCO值!  求大侠指导,自己试了两层循环没达到效果。

新建 Microsoft Office Excel 工作表.zip (65.65 KB, 下载次数: 2)
 楼主| 发表于 2014-4-7 17:18 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-4-7 19:54 | 显示全部楼层
回复

使用道具 举报

发表于 2014-4-7 21:43 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr, brr, d, d2, i&
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. arr = Range("a1").CurrentRegion
  6. ReDim brr(1 To UBound(arr) - 1, 1 To 1)
  7. For i = 2 To UBound(arr)
  8.     d(arr(i, 1)) = d(arr(i, 1)) + arr(i, 3)
  9.     If arr(i, 3) > 0 Then d2(arr(i, 1)) = d2(arr(i, 1)) + 1
  10. Next
  11. For i = 2 To UBound(arr)
  12.     If Not d2.exists(arr(i, 1)) Then
  13.         brr(i - 1, 1) = 0
  14.     Else
  15.         brr(i - 1, 1) = d(arr(i, 1)) / d2(arr(i, 1))
  16.     End If
  17. Next
  18. Range("d2").Resize(UBound(brr)) = brr
  19. End Sub
复制代码
回复

使用道具 举报

发表于 2014-4-7 21:48 | 显示全部楼层
………………

新建 Microsoft Office Excel 工作表.zip

107.43 KB, 下载次数: 9

回复

使用道具 举报

 楼主| 发表于 2014-4-7 22:32 | 显示全部楼层
dsmch 发表于 2014-4-7 21:43

太高深的代码,完全看不懂啊!  这种用法真心学不会!求注解啊!
回复

使用道具 举报

发表于 2014-4-8 05:25 | 显示全部楼层
  1. Sub Macro1()
  2. Dim arr, brr, d, d2, i&
  3. Set d = CreateObject("scripting.dictionary") '创建字典对象d
  4. Set d2 = CreateObject("scripting.dictionary") '创建字典对象d2
  5. arr = Range("a1").CurrentRegion '单元格赋值数组
  6. ReDim brr(1 To UBound(arr) - 1, 1 To 1)
  7. For i = 2 To UBound(arr) '循环数组
  8.     d(arr(i, 1)) = d(arr(i, 1)) + arr(i, 3) '同类项第三列累加
  9.     If arr(i, 3) > 0 Then d2(arr(i, 1)) = d2(arr(i, 1)) + 1 '统计同类项大于0的个数
  10. Next
  11. For i = 2 To UBound(arr) '数组赋值字典
  12.     If Not d2.exists(arr(i, 1)) Then
  13.         brr(i - 1, 1) = 0
  14.     Else
  15.         brr(i - 1, 1) = d(arr(i, 1)) / d2(arr(i, 1)) '累加/个数
  16.     End If
  17. Next
  18. Range("d2").Resize(UBound(brr)) = brr '数组赋值单元格
  19. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 04:21 , Processed in 0.323880 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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