Excel精英培训网

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

[已解决]字典、数组身份证重复计算

[复制链接]
发表于 2014-8-22 16:11 | 显示全部楼层 |阅读模式
字典+数组身份证重复计算
最佳答案
2014-8-23 15:36
乡镇固定列的代码。
  1. Private Sub CommandButton1_Click()
  2.     Dim d As Object, arr, ori, i%, brr(1 To 1000, 4)
  3.     Set d = CreateObject("scripting.dictionary")    '镇
  4.     Set d1 = CreateObject("scripting.dictionary")   '身份证
  5.     Set d2 = CreateObject("scripting.dictionary")   '大于10亩身份证
  6.     With Sheets("数据库")
  7.         ori = .Range("A4:u" & .Cells(Rows.Count, 1).End(xlUp).Row).Value
  8.     End With
  9.     For i = 1 To UBound(ori)
  10.         If ori(i, 1) <> "" Then
  11.             sr = ori(i, 15)   '15数据库-镇
  12.             sr1 = ori(i, 21) '21数据库-身份证
  13.             ms = ori(i, 5) '亩数
  14.             If Not d.exists(sr) Then
  15.                 n = n + 1
  16.                 d(sr) = n
  17.               '  brr(n, 0) = sr
  18.             End If
  19.             k = d(sr)
  20.             If Not d1.exists(sr1) Then brr(k, 1) = brr(k, 1) + 1: d1(sr1) = ""  '户数总计
  21.             brr(k, 2) = brr(k, 2) + ms   '亩数总计
  22.             If ms > 10 Then
  23.                 brr(k, 4) = brr(k, 4) + ms    '大于10亩的亩数总计
  24.                 If Not d2.exists(sr1) Then brr(k, 3) = brr(k, 3) + 1: d2(sr1) = ""  '大于10亩的户数总计
  25.             End If
  26.         End If
  27.     Next
  28.    With Sheets("汇总")
  29.         crr = .Range("a6:e" & .[a65536].End(3).Row)
  30.         For i = 1 To UBound(crr)
  31.             sr = crr(i, 1)
  32.             k = d(sr)
  33.             For j = 2 To 5
  34.                 crr(i, j) = brr(k, j - 1)
  35.             Next
  36.         Next
  37.          .Range("a6:e" & .[a65536].End(3).Row) = crr
  38.     End With
  39. End Sub
复制代码

字典 数组身份证重复计算.rar

14.18 KB, 下载次数: 26

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-8-22 17:06 | 显示全部楼层
  1. Private Sub CommandButton1_Click()

  2.     Dim d As Object, arr, ori, i%, brr(1 To 1000, 4)
  3.     Set d = CreateObject("scripting.dictionary")    '镇
  4.     Set d1 = CreateObject("scripting.dictionary")   '身份证
  5.     Set d2 = CreateObject("scripting.dictionary")   '大于10亩身份证
  6.     With Sheets("数据库")
  7.         ori = .Range("A4:u" & .Cells(Rows.Count, 1).End(xlUp).Row).Value
  8.     End With
  9.     For i = 1 To UBound(ori)
  10.         If ori(i, 1) <> "" Then
  11.             sr = ori(i, 15)   '17数据库-镇
  12.             sr1 = ori(i, 21) '21数据库-身份证
  13.             ms = ori(i, 5) '亩数
  14.             If Not d.exists(sr) Then
  15.                 n = n + 1
  16.                 d(sr) = n
  17.                 brr(n, 0) = sr
  18.             End If
  19.             k = d(sr)
  20.             If Not d1.exists(sr1) Then brr(k, 1) = brr(k, 1) + 1: d1(sr1) = ""  '户数总计
  21.             brr(k, 2) = brr(k, 2) + ms   '亩数总计
  22.             If ms > 10 Then
  23.                 brr(k, 4) = brr(k, 4) + ms    '大于10亩的亩数总计
  24.                 If Not d2.exists(sr1) Then brr(k, 3) = brr(k, 3) + 1: d2(sr1) = ""  '大于10亩的户数总计
  25.             End If
  26.             
  27.             
  28.         End If
  29.     Next
  30.    
  31. Sheets("汇总").[A6].Resize(n, 5) = brr
  32.       
  33. End Sub
复制代码
回复

使用道具 举报

发表于 2014-8-22 17:08 | 显示全部楼层
。。。。。。。。。。。。。。。。

字典 数组身份证重复计算.rar

17.55 KB, 下载次数: 30

回复

使用道具 举报

发表于 2014-8-22 18:30 | 显示全部楼层
l嗯,楼上的应该合题了!
回复

使用道具 举报

 楼主| 发表于 2014-8-22 20:03 | 显示全部楼层
grf1973 发表于 2014-8-22 17:08
。。。。。。。。。。。。。。。。

好人啊,谢谢您,我还有个小小的请求,就是汇总表中乡镇那一列是固定的,而不是从数据库中取得的,能实现吗,大概有个乡镇那样子。谢谢您
回复

使用道具 举报

 楼主| 发表于 2014-8-22 20:15 | 显示全部楼层
grf1973 发表于 2014-8-22 17:08
。。。。。。。。。。。。。。。。

还有个小小请求,数据量大的时候会出现溢出错误。还有就是乡镇那一列是固定的,差不多23个,而不是从数据库中取得,
xie
回复

使用道具 举报

 楼主| 发表于 2014-8-23 09:10 | 显示全部楼层
grf1973 发表于 2014-8-22 17:06

数据库中的数据超过3.5万行就会出现溢出错误!!!!
回复

使用道具 举报

 楼主| 发表于 2014-8-23 09:14 | 显示全部楼层
本帖最后由 爱很简单 于 2014-8-23 10:18 编辑

·····
回复

使用道具 举报

发表于 2014-8-23 15:36 | 显示全部楼层    本楼为最佳答案   
乡镇固定列的代码。
  1. Private Sub CommandButton1_Click()
  2.     Dim d As Object, arr, ori, i%, brr(1 To 1000, 4)
  3.     Set d = CreateObject("scripting.dictionary")    '镇
  4.     Set d1 = CreateObject("scripting.dictionary")   '身份证
  5.     Set d2 = CreateObject("scripting.dictionary")   '大于10亩身份证
  6.     With Sheets("数据库")
  7.         ori = .Range("A4:u" & .Cells(Rows.Count, 1).End(xlUp).Row).Value
  8.     End With
  9.     For i = 1 To UBound(ori)
  10.         If ori(i, 1) <> "" Then
  11.             sr = ori(i, 15)   '15数据库-镇
  12.             sr1 = ori(i, 21) '21数据库-身份证
  13.             ms = ori(i, 5) '亩数
  14.             If Not d.exists(sr) Then
  15.                 n = n + 1
  16.                 d(sr) = n
  17.               '  brr(n, 0) = sr
  18.             End If
  19.             k = d(sr)
  20.             If Not d1.exists(sr1) Then brr(k, 1) = brr(k, 1) + 1: d1(sr1) = ""  '户数总计
  21.             brr(k, 2) = brr(k, 2) + ms   '亩数总计
  22.             If ms > 10 Then
  23.                 brr(k, 4) = brr(k, 4) + ms    '大于10亩的亩数总计
  24.                 If Not d2.exists(sr1) Then brr(k, 3) = brr(k, 3) + 1: d2(sr1) = ""  '大于10亩的户数总计
  25.             End If
  26.         End If
  27.     Next
  28.    With Sheets("汇总")
  29.         crr = .Range("a6:e" & .[a65536].End(3).Row)
  30.         For i = 1 To UBound(crr)
  31.             sr = crr(i, 1)
  32.             k = d(sr)
  33.             For j = 2 To 5
  34.                 crr(i, j) = brr(k, j - 1)
  35.             Next
  36.         Next
  37.          .Range("a6:e" & .[a65536].End(3).Row) = crr
  38.     End With
  39. End Sub
复制代码
回复

使用道具 举报

发表于 2014-8-23 15:38 | 显示全部楼层
数据溢出估计是累计亩数太大了。你把brr,crr都定义成Double试试。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 02:07 , Processed in 0.423747 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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