ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: smiletwo

[分享] 省市县乡村五级行政区划2021年10月31日更新(国家统计局官网)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-9-2 13:50 | 显示全部楼层
共有 661194 行资科。工程庞大!

TA的精华主题

TA的得分主题

发表于 2022-9-2 13:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
大神:解压的时候真的提示要密码啊。
1662098214898.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-2 14:03 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-2 14:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一切为你 发表于 2022-9-2 13:00
楼主辛苦了,请问一下是否方便告知解压密码呢

         qazwsx

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-2 14:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学良 发表于 2022-9-2 13:42
smiletwo老师辛苦了!

谢谢学良老师

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-2 14:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
opel-wong 发表于 2022-9-2 13:17
VBA网抓代码,能分享下不?

可以,但因为部分网址格式不统一,中间临时需要调整代码。而且,通常每次下一个省份左右就会自动中断。 所以代码意义不大

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-2 14:11 | 显示全部楼层
代码如下:

  1. Public Aurl As String, URLX As String, URLZ As String, brr, m As Long
  2. Sub 提取省份()
  3.     Dim i, j, R, arr, reg As Object, mh, str As String, bds As String, URL As String
  4. '    Application.ScreenUpdating = False
  5.     With Sheet1
  6.         .UsedRange.Offset(1).ClearContents
  7.         .Cells.Font.Color = vbBlack
  8.         .Cells.Font.Bold = False
  9.     End With
  10.     Set X = CreateObject("MSXML2.XMLHTTP")
  11.     Aurl = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2021/"
  12.     With X
  13.         .Open "GET", Aurl, False
  14.         .send
  15.         Do Until .readyState = 4 And .Status = 200
  16.             DoEvents
  17.         Loop
  18.         str = .responsetext
  19. '        str = StrConv(.responseBody, vbUnicode, &H804) '防乱码
  20. '        Debug.Print str
  21.     End With
  22.     Set reg = CreateObject("vbscript.regexp")
  23.     reg.Global = True
  24.     reg.Pattern = "<a href=""(.+?html)"">([一-龢]+)<br /></a></td>"
  25.     If reg.test(str) Then
  26.         Set mh = reg.Execute(str)
  27.         ReDim arr(1 To mh.Count, 1 To 3)
  28.         For i = 0 To mh.Count - 1
  29.             arr(i + 1, 1) = mh(i).submatches(1) '省级名称
  30.             arr(i + 1, 2) = Aurl & mh(i).submatches(0) '省URL
  31.             arr(i + 1, 3) = Split(mh(i).submatches(0), ".")(0) & "0000000000" '省级区划代码
  32.         Next i
  33.     End If
  34.     Set reg = Nothing
  35.     Sheet3.Range("A2").Resize(UBound(arr), UBound(arr, 2)) = arr
  36. End Sub
  37. Sub 行政区划()
  38.     Dim i, j, arr, reg As Object, mh, str As String, bds As String, URL As String
  39.     arr = Sheet3.Range("A1").CurrentRegion
  40.     Aurl = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2021/"
  41.     Set reg = CreateObject("vbscript.regexp")
  42.     reg.Global = True
  43.     reg.Pattern = "citytr"">[\s\S]+?<td><a href=""(.+?html)"">([0-9]{12})[\s\S]+?([一-龢]+)</a></td>"
  44.     Set X = CreateObject("MSXML2.XMLHTTP")
  45.     For i = 2 To UBound(arr)
  46.         If arr(i, 4) <> "已提取" Then
  47.             m = 1
  48.             ReDim brr(1 To 100000, 1 To 7)
  49.             brr(m, 1) = "=row()-1"
  50.             brr(m, 2) = arr(i, 3) '省级区划代码
  51.             brr(m, 3) = arr(i, 1) '省级名称
  52.             With X
  53.                 .Open "GET", arr(i, 2), False
  54.                 .send
  55.                 Do Until .readyState = 4 And .Status = 200
  56.                     DoEvents
  57.                 Loop
  58.                 str = .responsetext
  59. '                 Debug.Print str
  60.                 If reg.test(str) Then
  61.                     Set mh = reg.Execute(str)
  62.                     For j = 0 To mh.Count - 1
  63.                         m = m + 1
  64.                         brr(m, 1) = "=row()-1"
  65.                         brr(m, 4) = mh(j).submatches(2)  '地市级名称
  66.                         brr(m, 2) = mh(j).submatches(1) '地市级区划代码
  67.                         URL = Aurl & mh(j).submatches(0)
  68.                         Call 地市级(URL)
  69.                     Next j
  70.                 End If
  71.             End With
  72.             R = Sheet1.Cells(Rows.Count, 2).End(3).Row + 1
  73.             Sheet1.Range("A" & R).Resize(UBound(brr), UBound(brr, 2)) = brr
  74.             Sheet3.Range("D" & i).Value = "已提取"
  75.             ThisWorkbook.Save
  76.         End If
  77.     Next i
  78.     Set X = Nothing
  79. '    Application.ScreenUpdating = True
  80. End Sub

  81. Function 地市级(URL As String)
  82.     Dim i, j, reg As Object, mh, bds As String, str As String, Murl1 As String
  83.     Set a = CreateObject("MSXML2.XMLHTTP")
  84.     bds = "countytr""><td><a href=""(.+?html)"">([0-9]{12}).+?([一-龢]+)</a></td>"
  85.     With a
  86.         .Open "GET", URL, False
  87.         .send
  88.         Do Until .readyState = 4 And .Status = 200
  89.             DoEvents
  90.         Loop
  91.         str = .responsetext
  92. '        Debug.Print str
  93. '        str = StrConv(.responsebody, vbUnicode, &H804) '防乱码
  94.     End With
  95.     Set a = Nothing
  96.     Set reg = CreateObject("vbscript.regexp")
  97.     reg.Global = True
  98.     reg.Pattern = bds
  99.     Murl1 = Split(URL, Aurl)(1)
  100.     Murl1 = Split(Murl1, "/")(0)
  101.     If reg.test(str) Then
  102.         Set mh = reg.Execute(str)
  103.         With Sheet1
  104.             For i = 0 To mh.Count - 1
  105.                 m = m + 1
  106.                 brr(m, 1) = "=row()-1"
  107.                 brr(m, 2) = mh(i).submatches(1) '县级区划代码
  108.                 brr(m, 5) = mh(i).submatches(2) '县级名称
  109.                 URLX = Aurl & Murl1 & "/" & mh(i).submatches(0)
  110.                 Call 县市区(URLX)
  111.             Next i
  112.         End With
  113.     End If
  114.     Set reg = Nothing
  115. End Function
  116. Function 县市区(URL As String)
  117.     Dim i, j, reg As Object, mh1, bds As String, str As String, Murl2 As String
  118.     Set a = CreateObject("MSXML2.XMLHTTP")
  119.     bds = "towntr""><td><a href=""(.+?html)"">([0-9]{12}).+?([一-龢]+)</a></td>"
  120.     With a
  121.         .Open "GET", URL, False
  122.         .send
  123.         Do Until .readyState = 4 And .Status = 200
  124.             DoEvents
  125.         Loop
  126.         str = .responsetext
  127. '        Debug.Print str
  128. '        str = StrConv(.responsebody, vbUnicode, &H804) '防乱码
  129.     End With
  130.     Set a = Nothing
  131.     Set reg1 = CreateObject("vbscript.regexp")
  132.     reg1.Global = True
  133.     reg1.Pattern = bds
  134.     If reg1.test(str) Then
  135.         Set mh1 = reg1.Execute(str)
  136.         For i = 0 To mh1.Count - 1
  137.             m = m + 1
  138.             brr(m, 1) = "=row()-1"
  139.             brr(m, 2) = mh1(i).submatches(1) '乡级区划代码
  140.             brr(m, 6) = mh1(i).submatches(2) '乡级名称
  141.             Murl2 = Split(URL, "/")(UBound(Split(URL, "/")))
  142.             Murl2 = Replace(URL, Murl2, "")
  143.             URLZ = Murl2 & mh1(i).submatches(0)
  144.             Call 乡镇(URLZ)
  145.         Next i
  146.     End If
  147.     Set reg1 = Nothing
  148. End Function
  149. Function 乡镇(URL As String)
  150.     Dim i, j, srr, reg2 As Object, mh2, bds As String, str As String
  151.     Set a = CreateObject("MSXML2.XMLHTTP")
  152.     bds = "villagetr""><td>([0-9]{12}).+?([一-龢]+)</td></tr>"
  153.     With a
  154.         .Open "GET", URL, False
  155.         .send
  156.         Do Until .readyState = 4 And .Status = 200
  157.             DoEvents
  158.         Loop
  159.         str = .responsetext
  160. '        Debug.Print str
  161. '        str = StrConv(.responsebody, vbUnicode, &H804) '防乱码
  162.     End With
  163.     Set a = Nothing
  164.     Set reg2 = CreateObject("vbscript.regexp")
  165.     reg2.Global = True
  166.     reg2.Pattern = bds
  167.     If reg2.test(str) Then
  168.         Set mh2 = reg2.Execute(str)
  169.         ReDim srr(1 To mh2.Count, 1 To 7)
  170.         For i = 0 To mh2.Count - 1
  171.             m = m + 1
  172.             brr(m, 1) = "=row()-1"
  173.             brr(m, 7) = mh2(i).submatches(1) '村级名称
  174.             brr(m, 2) = mh2(i).submatches(0) '村级区划代码
  175.         Next i
  176.     End If
  177.     Set reg2 = Nothing
  178. End Function
复制代码


TA的精华主题

TA的得分主题

发表于 2022-9-2 14:58 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-2 14:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
opel-wong 发表于 2022-9-2 14:58
为啥我是直接解压没用密码?
360压缩。

最早上传的没密码

TA的精华主题

TA的得分主题

发表于 2022-9-2 15:14 | 显示全部楼层
毫无疑问,你下载的数据不全,缺少了部分数据。
我这个才是完整版,一个不落。

统计用城乡五级代码.gif
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 15:46 , Processed in 0.034172 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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