|
1、黄线左边是新数据,需要生成农户编号。
2、需要实现的功能就是批量智能的识别每个人对应的村组,并且识别该组的最大编号,然后将新数据中的人按照对应的村组逐个编号,排列在原数据之后
3、农户编号共17位,前六位为666888
7-9位是001,代表乡镇号
10-12位是村序号,如东渠岸001 南大街005
13-14位是组序号,01是一组,02是二组
15-17位是农户序号,001起,最大999
4、举例左边的第一个人王园月,他属于东渠岸村一组,该村的最大编号排到了30,那么王圆月的编号应该为432111200100101031,下一个人就是432111200100101032,一次类推。
5、数据量很大,目前共有32万条
6、请各位高手帮帮忙,谢谢大家!
本帖最后由 dsmch 于 2016-4-18 23:07 编辑
- Sub Macro1()
- Dim arr, brr, crr, d, i&, s&
- Set d = CreateObject("scripting.dictionary")
- arr = Range("f1").CurrentRegion
- brr = Range("a4").CurrentRegion
- ReDim crr(1 To UBound(brr) - 1, 1 To 3)
- For i = 3 To UBound(arr)
- If Len(arr(i, 1)) = 12 Then d(arr(i, 2)) = arr(i, 1)
- If Len(arr(i, 1)) = 14 Then d(arr(i, 2)) = Right(arr(i, 1), 2)
- If Len(arr(i, 1)) = 17 Then
- d(arr(i, 3)) = ""
- zf = Left(arr(i, 1), 14)
- zf2 = Val(Right(arr(i, 1), 3))
- If Not d.exists(zf) Then
- d(zf) = zf2
- Else
- If zf2 > d(zf) Then d(zf) = zf2
- End If
- End If
- Next
- For i = 2 To UBound(brr)
- If Not d.exists(brr(i, 3)) Then
- s = s + 1
- zf = d(brr(i, 1)) & d(brr(i, 2))
- d(zf) = d(zf) + 1
- crr(s, 1) = zf & Format(d(zf), "000")
- crr(s, 2) = brr(i, 4)
- crr(s, 3) = brr(i, 3)
- End If
- Next
- If s Then Range("f37").Resize(s, 3) = crr
- End Sub
复制代码
|
|