ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5419|回复: 6

[求助] 根据县提取所属城市,根据城市提取省份

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-23 20:29 | 显示全部楼层 |阅读模式
根据县提取所属城市,根据城市提取省份

附件.rar

999.91 KB, 下载次数: 238

附件

TA的精华主题

TA的得分主题

发表于 2014-10-24 15:16 | 显示全部楼层
你想要的“市”应该是地级市吧,但是你的参考数据中并没有明确的地级市信息
例如“阿瓦提县中国人民银行阿瓦提县支行”,能找到县,却难以找到对应的市

TA的精华主题

TA的得分主题

发表于 2014-10-24 16:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-10-25 14:12 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
公式不全对
24行:安新县错为新县

TA的精华主题

TA的得分主题

发表于 2014-10-27 16:22 | 显示全部楼层
  1. Public Sub abc()
  2. Dim ar, br, cr(), i, str, rep, it, k, tmp, strall
  3. Dim d As Object
  4. Set d = CreateObject("Scripting.Dictionary")
  5. Set rep = CreateObject("vbscript.regexp")
  6. rep.Global = True
  7. ar = Range([j2], [k65536].End(3))
  8. br = Range([b3], [b65536].End(3))
  9. ReDim cr(1 To UBound(br), 1 To 2)
  10. For i = 1 To UBound(ar) - 1
  11.     If InStr(ar(i, 2), "地区") > 0 Or InStr(ar(i, 2), "自治州") > 0 Or (Right(ar(i, 2), 1) = "市" And Right(ar(i + 1, 2), 1) = "区") Then
  12.         str = ar(i, 2)
  13.         d(Left(ar(i, 2), 2)) = str
  14.     Else
  15.         If ar(i, 2) <> ar(i, 1) Then d(Left(ar(i, 2), 2)) = str
  16.     End If
  17.     If ar(i, 2) <> ar(i, 1) And ar(i, 2) <> "市辖区" Then
  18.         If Len(ar(i, 2)) > 2 Then
  19.             tmp = Replace(Replace(ar(i, 2), "市", ""), "县", "")
  20.         ElseIf Len(ar(i, 2)) = 2 Then
  21.             tmp = ar(i, 2)
  22.         End If
  23.         strall = strall & IIf(strall = "", "", "|") & tmp
  24.     End If
  25. Next
  26. d(ar(UBound(ar), 2)) = str
  27. it = d.items: k = d.keys
  28. For i = 1 To UBound(br)
  29.     rep.Pattern = "^(北京[市]*|上海[市]*|天津[市]*|重庆[市]*|河北[省]*|山西[省]*|辽宁[省]*|吉林[省]*|黑龙江[省]*|江苏[省]*|浙江[省]*|安徽[省]*|福建[省]*|江西[省]*|山东[省]*|河南[省]*|湖北[省]*|湖南[省]*|广东[省]*|海南[省]*|四川[省]*|贵州[省]*|云南[省]*|陕西[省]*|甘肃[省]*|青海[省]*|西藏[自治区]*|内蒙古[自治区]*|广西[壮族自治区]*|宁夏[回族自治区]*|新疆[维吾尔自治区]*)"
  30.     str = rep.Replace(br(i, 1), "")
  31.     If d.exists(Left(str, 2)) Then
  32.         cr(i, 2) = d(Left(str, 2))
  33.         cr(i, 1) = [k:k].Find(d(Left(str, 2)), , , 1).Offset(, -1)
  34.     Else
  35.         rep.Pattern = "..(市|县)"
  36.         If rep.test(str) = True Then
  37.             tmp = rep.Execute(str)(0)
  38.             If Not [k:k].Find(tmp, , , 2) Is Nothing Then
  39.                 tmp = [k:k].Find(tmp, , , 2)
  40.                 cr(i, 2) = d(Left(tmp, 2))
  41.                 cr(i, 1) = [k:k].Find(cr(i, 2), , , 1).Offset(, -1)
  42.             End If
  43.         End If
  44.     End If
  45.     If cr(i, 2) = "" Then
  46.         rep.Pattern = "北京|上海|天津|重庆|香港|澳门"
  47.         If rep.test(br(i, 1)) = True Then
  48.             cr(i, 2) = rep.Execute(br(i, 1))(0)
  49.             cr(i, 1) = cr(i, 2)
  50.         End If
  51.     End If
  52.     If cr(i, 2) = "" Then
  53.         rep.Pattern = strall
  54.         If rep.test(br(i, 1)) = True Then
  55.             cr(i, 2) = d(Left(rep.Execute(br(i, 1))(0), 2))
  56.             If rep.Execute(br(i, 1)).Count > 1 Then
  57.                 If rep.Execute(br(i, 1))(0) <> rep.Execute(br(i, 1))(1) Then cr(i, 2) = cr(i, 2) & "*"
  58.             End If
  59.             cr(i, 1) = [k:k].Find(cr(i, 2), , , 1).Offset(, -1)
  60.         End If
  61.     End If
  62. Next
  63. [f3].Resize(i - 1, 2) = cr
  64. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-10-27 16:24 | 显示全部楼层
请参考附件,你提供的参考表已经过时,这是造成无法比对及比对错误的根本原因
加星号的存在比对错误可能,请手工核对

附件vba.zip

530.4 KB, 下载次数: 208

TA的精华主题

TA的得分主题

发表于 2019-11-19 10:09 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-6 16:14 , Processed in 0.038208 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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