ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 包含家庭地址的单元格是否可以用VBA拆分

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-2 22:01 | 显示全部楼层
gbgbxgb 发表于 2016-8-2 21:30
谦虚好学,赞一个,下列代码供参考:
        Set reg = CreateObject("VBScript.RegExp")
        Wit ...

gbgbxgb老师是搞美学的吧,这么在意美观,值得我们学习。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-2 22:06 | 显示全部楼层
gbgbxgb 发表于 2016-8-2 21:30
谦虚好学,赞一个,下列代码供参考:
        Set reg = CreateObject("VBScript.RegExp")
        Wit ...

修改后的那段 第一句就卡住了,好象.Cells出了问题,反正它变黑色了。呵呵
错2.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-2 22:10 | 显示全部楼层
wuliu56 发表于 2016-8-2 21:59
其实那位老师已经给出了最核心的东西,也就是正则表达式。你想要的效果最最主要的就是依靠正则表达式。其 ...

有道理,谢过指教。回头向gbgbxgb老师道谦一个。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-2 22:14 | 显示全部楼层
gbgbxgb 发表于 2016-8-1 21:35
某些人玩正则玩上瘾了,有兴趣的琢磨下:
.Pattern = "^(([^省]+省)|(.+自治区))?([^市]+市)?([^市区县]+( ...

楼下说你给出的那句代码是正则核心,只是我外行了还不能理解,先献个花来着吧。我怕等我学会了理解了再献花就晚了。呵呵

TA的精华主题

TA的得分主题

发表于 2016-8-2 22:22 | 显示全部楼层
本帖最后由 gbgbxgb 于 2016-8-3 21:47 编辑
dongfgdwdjg 发表于 2016-8-2 22:14
楼下说你给出的那句代码是正则核心,只是我外行了还不能理解,先献个花来着吧。我怕等我学会了理解了再献 ...

从你的回复看,说第一句就卡住了,说明你连With结构是什么都不懂,所以估计你也看不懂代码的其它意思。

今天做个热心人吧,详情见附件。

注意:源数据第7行与第355行比较特殊,故正则表达式又作了改动。题外话,若文本的特例再多的话,如果存在相互冲突,正则将很难修改以适应这种冲突的情况,好在目前再没发现有别的特例。

附件已删除。

TA的精华主题

TA的得分主题

发表于 2016-8-2 22:34 | 显示全部楼层
本帖最后由 gbgbxgb 于 2016-8-2 22:47 编辑
wuliu56 发表于 2016-8-2 21:59
其实那位老师已经给出了最核心的东西,也就是正则表达式。你想要的效果最最主要的就是依靠正则表达式。其 ...

我没为这个问题刻意出力,事实是“知我者,楼主也”,我的确是自娱自乐而写的代码,还有一个原因是看到jsgj2023写的正则不好看,不简洁,且效率也有待提高,加之其判断是否直辖市的代码也不简洁,故手痒痒写了代码,我并没刻意帮助楼主,希望jsgj2023注意到正则表达式有待改进倒是有的,故随手粘贴了正则表达式。

事后:
借此楼层纠正下,我在前面楼层说的把Select结构改为If结构可大大提高代码的效率,此叙述有误,在本例中,无法提高代码效率,因为一样要遍历所有的j,故还是保留Select结构为好。罪过,罪过,故特此纠正说法,以免后人产生困惑或砸砖。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-3 07:50 | 显示全部楼层
gbgbxgb 发表于 2016-8-2 22:34
我没为这个问题刻意出力,事实是“知我者,楼主也”,我的确是自娱自乐而写的代码,还有一个原因是看到js ...

gbgbxgb老师善于总结,勇于自我批评,真大家风范! 值得学习!

TA的精华主题

TA的得分主题

发表于 2016-8-4 12:40 | 显示全部楼层
gbgbxgb 发表于 2016-8-2 22:34
我没为这个问题刻意出力,事实是“知我者,楼主也”,我的确是自娱自乐而写的代码,还有一个原因是看到js ...

感谢您的指导。

TA的精华主题

TA的得分主题

发表于 2016-8-4 12:41 | 显示全部楼层
dongfgdwdjg 发表于 2016-8-2 22:06
修改后的那段 第一句就卡住了,好象.Cells出了问题,反正它变黑色了。呵呵
  1. Sub ddd()
  2.         Sheets("家庭住址").Activate
  3.         Arr = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).Row)
  4.          ReDim brr(1 To UBound(Arr) - 1, 1 To 5)
  5.          a = VBA.Array("北京市", "天津市", "上海市", "重庆市")
  6.          Set Reg = CreateObject("VBScript.RegExp")
  7.          With Reg
  8.              .Pattern = "^(([^省]+省)|(.+自治区))?([^市]+市)?([^区县]+(市|[^小]区|县))?(.+(街道办事处|街道办|街道|[^小]镇|乡))?(.+)?"
  9.              For i = 2 To UBound(Arr)
  10.                  theStr = Arr(i, 1)
  11.                  If theStr <> "" Then
  12.                      Set theMatches = .Execute(theStr)
  13.                      With theMatches(0)
  14.                          For j = 0 To 8
  15.                              theStr = .submatches(j)
  16.                              If j = 0 Then
  17.                                  If theStr <> "" Then
  18.                                      brr(i - 1, 1) = theStr
  19.                                  Else
  20.                                      brr(i - 1, 1) = "山东省"
  21.                                  End If
  22.                              ElseIf j = 3 Then
  23.                                  For k = 0 To UBound(a)
  24.                                      If theStr = a(k) Then
  25.                                          theProvinceYes = True
  26.                                          Exit For
  27.                                      End If
  28.                                  Next k
  29.                                  If Not theProvinceYes Then
  30.                                      brr(i - 1, 2) = theStr
  31.                                  Else
  32.                                      brr(i - 1, 1) = theStr
  33.                                      theProvinceYes = False
  34.                                  End If
  35.                              ElseIf j = 4 Then brr(i - 1, 3) = theStr
  36.                              ElseIf j = 6 Then brr(i - 1, 4) = theStr
  37.                              ElseIf j = 8 Then brr(i - 1, 5) = theStr
  38.                              End If
  39.                          Next j
  40.                      End With
  41.                  End If
  42.              Next i
  43.          End With
  44.          Sheets("家庭住址").Cells(2, 3).Resize(UBound(brr), UBound(brr, 2)) = brr
  45.          Range("c:g").EntireColumn.AutoFit
  46. End Sub
复制代码
结合gbgbxgb 老师的代码,修改如下:

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-8-4 12:48 | 显示全部楼层
gbgbxgb老师代码的附件。

包含家庭地址的单元格拆分 - gbgbxgb.rar

67.44 KB, 下载次数: 81

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-19 00:50 , Processed in 0.045041 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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