Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2556|回复: 9

怎样才可以把前面相邻相同的文字见风删除只保留一个

[复制链接]
发表于 2013-1-12 13:34 | 显示全部楼层 |阅读模式
辽宁市普兰店市辽宁省普兰店市
北京北京北京市海淀区王庄路
广东省连州市广东省连州市城南开发区
湖北省武汉市湖北省武汉市洪山区
河南省新乡市河南省新乡市金穗大道东段
河南省郑州市河南省郑州市中原区柿园北街
河南省鹤壁市河南省鹤壁市名门世家
浙江省台州市浙江省台州市黄岩区新前镇
浙江省杭州市浙江省杭州市滨江区南环路
上海市上海市上海市川沙镇
上海上海市上海市徐汇区上中西路凌云路
江苏省南京市江苏省南京市栖霞区
江苏省苏州市江苏省苏州市吴中区甪直镇鸣市路
北京北京市北京市海淀区四季青佟家
北京北京市北京市丰台区丰葆路
北京北京市北京市丰台区洋桥马家堡西里小区
辽宁省沈阳市辽宁省沈阳市大东区
湖南省长沙市湖南省长沙市
浙江省温州市浙江省温州市苍南县
浙江省温州市浙江省温州市
发表于 2013-1-12 13:37 | 显示全部楼层
回复

使用道具 举报

发表于 2013-1-12 13:39 | 显示全部楼层
回复

使用道具 举报

发表于 2013-1-12 17:36 | 显示全部楼层
我也没看懂哦。
回复

使用道具 举报

发表于 2013-1-12 19:56 | 显示全部楼层
3.rar (10.98 KB, 下载次数: 9)

评分

参与人数 1 +15 收起 理由
lucking551 + 15 牛X,字典也很妖孽啊。。。。

查看全部评分

回复

使用道具 举报

发表于 2013-7-14 19:31 | 显示全部楼层
版主你好!http://www.excelpx.com/thread-293738-1-1.html

这是你回的一个帖子。我刚好也有类似的问题,需要解决,就是在excel的一个行里面,有很多重复的词组,我想删除压缩后保留一个。

看完你发的帖子,我却没有找到解决的代码,请问,你能将具体步骤或者函数告诉我们一下吗?
回复

使用道具 举报

发表于 2013-7-14 20:04 | 显示全部楼层
辽宁市普兰店市辽宁省普兰店市
北京北京北京市海淀区王庄路
广东省连州市广东省连州市城南开发区
湖北省武汉市湖北省武汉市洪山区
河南省新乡市河南省新乡市金穗大道东段
河南省郑州市河南省郑州市中原区柿园北街
河南省鹤壁市河南省鹤壁市名门世家
浙江省台州市浙江省台州市黄岩区新前镇
浙江省杭州市浙江省杭州市滨江区南环路
上海市上海市上海市川沙镇
上海上海市上海市徐汇区上中西路凌云路
江苏省南京市江苏省南京市栖霞区
江苏省苏州市江苏省苏州市吴中区甪直镇鸣市路
北京北京市北京市海淀区四季青佟家
北京北京市北京市丰台区丰葆路
北京北京市北京市丰台区洋桥马家堡西里小区
辽宁省沈阳市辽宁省沈阳市大东区
湖南省长沙市湖南省长沙市
浙江省温州市浙江省温州市苍南县
浙江省温州市浙江省温州市

还是按照这个例子,如果中间穿插着很多手机号码,也能顺带能提取出来所有的号码吗?重复的手机号保留一个即可。

谢谢版主!
回复

使用道具 举报

发表于 2013-7-14 20:11 | 显示全部楼层
Sub test()
    Dim A, d, i, j, k, t, s1, s2, s3
    A = Range("A1").CurrentRegion
    Set d = CreateObject("scripting.dictionary")
    For i = 1 To UBound(A)
        For j = 1 To Len(A(i, 1))
            d(Mid(A(i, 1), j, 1)) = d(Mid(A(i, 1), j, 1)) + 1
        Next j
        k = d.keys: t = d.items
'        A(i, 1) = Join(k, "")
        '''''''''''''''''''''''''''''''''''''
        s1 = "": s2 = "": s3 = Left(A(i, 1), 1)
        For j = 2 To Len(A(i, 1))
            s1 = Mid(A(i, 1), j, 1)
            s2 = Mid(A(i, 1), j - 1, 1)
            If InStr(s3, s1) Then
                If d(s2) = 1 Then
                    s3 = s3 & s1
                End If
            Else
                s3 = s3 & s1
            End If
        Next j
        A(i, 1) = s3
        '''''''''''''''''''''''''''''''''''''
        d.RemoveAll
    Next i
    [c1].Resize(i - 1) = A
End Sub


  如何按照上述执行 宏后,只能显示出一部分手机号码,想了半天,因为手机号中,也有重复的,版主辛苦了,非常实用非常感谢。


回复

使用道具 举报

发表于 2013-7-14 20:17 | 显示全部楼层
例如:

139556580252肖彩彩13205687231
张晓晓18956550123钟三峡15122235202
费发财1802354255司马

如何提取对应的号码,删除文字,凡是一行多个号码之间加“-”隔开。
感谢版主 谢谢谢谢!
回复

使用道具 举报

发表于 2013-7-14 20:46 | 显示全部楼层
Function 取值(rng, types As String) As String
    Dim obj As Object
    Set obj = CreateObject("VBSCRIPT.REGEXP")
    With obj
        .Global = True
        If types = "-hz" Then
            .Pattern = "[一-﨩]"
        ElseIf types = "-zm" Then
            .Pattern = "[a-zA-Z]"
        ElseIf types = "-sz" Then
            .Pattern = "\d"
        ElseIf types = "+hz" Then
            .Pattern = "^[一-﨩]"
        ElseIf types = "+zm" Then
            .Pattern = "[^a-zA-Z]"
        ElseIf types = "+sz" Then
            .Pattern = "[^0-9]"
        End If
        取值 = .Replace(rng, "")
    End With
End Function

'去汉字:=取值(A2,"-hz")
'取汉字:=取值(A2,"+hz")
'去字母:=取值(A2,"-zm")
'取字母:=取值(A2,"+zm")
'去数字:=取值(A2,"-sz")
'取数字:=取值(A2,"+sz")


//hejiang1981.blog.sohu.com/160917602.html

用这样的宏也是可以,只是有一点不满意,所有的区段号码之间连写,没有-隔开。

出现的结果是:
13955658025213205687231
1895655012315122235202
1802354255

而我想出现的结果是:
139556580252-13205687231
18956550123-15122235202
1802354255

因为上面的结果,我们需要重新按照-分隔符分开成两列,凡是手机号码多一位,少一位的,筛选后全部。



回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-11 13:17 , Processed in 0.339107 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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