ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 求大神帮我做一个宏,以达到省市区的自动匹配

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-4-4 08:19 | 显示全部楼层 |阅读模式
本帖最后由 huang1314wei 于 2015-4-4 08:25 编辑

如附件所示,在省市区规则工作簿里面有两个表,具体要求如下:1、A表里面是省市区规则,B表里面是需要匹配的数据
2、在B表里面,有若干条数据,省和区是已知的,希望能运行一下宏就可以达到省市区的自动匹配
3、在B表里面A列与C列单元格数据有的时候是不完整的,比如“山西省”有的时候只有“山西”两个字,“河北省”只有“河北”两个字,C列里面单元格数据有的时候“XX区”或“XX县”只有“XX”两个字,希望匹配的时候,只需要较验省的前两个字,区的前两个字,点击控件按钮,运行一下宏就可以自动在B表里面的A列、B列、C列自动生成XX省XX市XX区的完整省市区,如匹配不成功,以红底纹提示就行了希望有大神能相助。
省市区规则.rar (70 KB, 下载次数: 248)



评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-26 10:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

哈哈,啥时候把我以前发的求助贴翻出来了?

4个月前,我对VBA一窍不通,那个时候想要达到什么目的也是到处求人,求人不如求自己,只有自己会了,就不用求人了。记得那个时候,蓝版主帮我写的代码和yjh_27的代码我怎么也看不懂,看天书一样,要改也不知道哪里改起,从这个时候开始,我就下定了决心要学习VBA,听了几期免费公开课,连续买了两本VBA书,《别怕,Excel其实很简单》、《Excel VBA实战技巧精粹》利用空余时间钻研,对VBA的学习进步很快,目前大部分问题我还是能通过代码解决的,再回过头来看一下自己以前的求助,其实只有懂了才会觉得没什么难的,不久前还被贴上了一个优秀会员标签,其实一直想把自己学习VBA的心得写下来分享给大家,只是没有那么多时间组织文字,有空再理理这个事吧

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-4-4 08:57 | 显示全部楼层
如匹配不成功,
是什么意思?是所在省没有这个市县吗?

TA的精华主题

TA的得分主题

发表于 2015-4-4 09:11 | 显示全部楼层
  1. Sub 按钮1_Click()
  2. Dim arr, i%, j%, n%, brr, m%
  3. Sheets("B").Range("E:G").Clear
  4. arr = Sheets("A").UsedRange
  5. brr = Sheets("B").UsedRange
  6. For m = 1 To UBound(brr)
  7. For j = 1 To UBound(arr, 2)
  8. For i = 1 To UBound(arr)
  9. If InStr(arr(i, j), brr(m, j)) > 0 Then
  10. brr(m, j) = arr(i, j)
  11. End If
  12. Next
  13. Next
  14. Next
  15. Sheets("B").Range("E1").Resize(UBound(brr), UBound(brr, 2)) = brr
  16. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-4-4 09:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
为了便于对比,数据没放在原来的位置。

省市区的自动匹配-省市区规则123.rar

77.49 KB, 下载次数: 245

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-4 12:51 | 显示全部楼层
jpj123 发表于 2015-4-4 08:57
如匹配不成功,
是什么意思?是所在省没有这个市县吗?

是的,就是区县不正确

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-4 13:00 | 显示全部楼层
jpj123 发表于 2015-4-4 09:12
为了便于对比,数据没放在原来的位置。

你这个做的不对的,B表里面的F列生成的全部都是市辖区是不行的,比如河北省  辛集市在A表里面是河北省石家庄市辛集市,但是你生成的是河北省市辖区辛集市是不对的,麻烦大侠再改改

TA的精华主题

TA的得分主题

发表于 2015-4-4 13:45 | 显示全部楼层
huang1314wei 发表于 2015-4-4 13:00
你这个做的不对的,B表里面的F列生成的全部都是市辖区是不行的,比如河北省  辛集市在A表里面是河北省石家 ...
  1. Sub 按钮1_Click()
  2. Dim arr, i%, j%, n%, brr, m%
  3. Sheets("B").Range("E:G").Clear
  4. arr = Sheets("A").UsedRange
  5. brr = Sheets("B").UsedRange
  6. For m = 1 To UBound(brr)
  7. For i = 1 To UBound(arr)
  8. If InStr(arr(i, 1), brr(m, 1)) > 0 And InStr(arr(i, 3), brr(m, 3)) > 0 Then
  9. brr(m, 1) = arr(i, 1): brr(m, 2) = arr(i, 2): brr(m, 3) = arr(i, 3)
  10. End If
  11. Next
  12. Next
  13. Sheets("B").Range("E1").Resize(UBound(brr), UBound(brr, 2)) = brr
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-4-4 13:46 | 显示全部楼层
修改了代码,详见附件     

省市区的自动匹配-省市区规则123.rar

78.05 KB, 下载次数: 260

TA的精华主题

TA的得分主题

发表于 2015-4-4 13:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jpj123 发表于 2015-4-4 13:46
修改了代码,详见附件

如果匹配不成功的话第二列不会有数据。

TA的精华主题

TA的得分主题

发表于 2015-4-4 14:29 | 显示全部楼层
  1. Sub lqxs()
  2. Dim Arr, i&, x$, y$, Brr, j&, jj&, aa
  3. Dim d, k, t, kk, tt, s$, ss$, q$, qq$
  4. Set d = CreateObject("Scripting.Dictionary")
  5. Sheet2.Activate
  6. Brr = Sheet2.UsedRange
  7. Arr = Sheet1.[a1].CurrentRegion
  8. For i = 1 To UBound(Arr)
  9.     x = Left(Arr(i, 1), 2): y = Left(Arr(i, 3), 2)
  10.     If d.exists(x) = False Then Set d(x) = CreateObject("Scripting.Dictionary")
  11.     d(x)(y) = d(x)(y) & i & ","
  12. Next
  13. k = d.keys
  14. For i = 1 To UBound(Brr)
  15.     s = Left(Brr(i, 1), 2)
  16.     If d.exists(s) Then
  17.         q = Left(Brr(i, 3), 2)
  18.         kk = d(s).keys: tt = d(s).items
  19.         For j = 0 To UBound(kk)
  20.             If InStr(kk(j), q) Then
  21.                 t = tt(j): ss = "": qq = ""
  22.                 t = Left(t, Len(t) - 1)
  23.                 If InStr(t, ",") Then
  24.                     aa = Split(t, ",")
  25.                     Cells(i, 5) = Arr(aa(0), 1)
  26.                     For jj = 0 To UBound(aa)
  27.                         ss = ss & Arr(aa(jj), 2) & " ": qq = qq & Arr(aa(jj), 3) & " "
  28.                     Next
  29.                     Cells(i, 6) = ss: Cells(i, 7) = qq
  30.                 Else
  31.                     Cells(i, 5) = Arr(t, 1): Cells(i, 6) = Arr(t, 2): Cells(i, 7) = Arr(t, 3)
  32.                 End If
  33.                 GoTo 100
  34.             End If
  35.         Next
  36.         Cells(i, 3).Interior.ColorIndex = 3
  37.     End If
  38. 100:
  39. Next
  40. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 13:35 , Processed in 0.056521 second(s), 20 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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