ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

如何用VBA提取多个字符串中相同部分

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-3-22 13:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lionzhong 于 2014-3-22 13:54 编辑

我试了一下4楼老师的代码,我想引用单元表2作为数据源,改了其中一句后就不能运行了,具体修改为 Arr = Worksheets(2).Range("A3", [A3].End(4))
各位老师,请问应该怎么操作啊?也就是改为如下情况:
Sub GetSameWord()
    Dim Arr, i%, Str$, strTmp$
    Arr = Worksheets(2).Range("A3", [A3].End(4))
    Str = Join(Application.Transpose(Arr))
    For i = 1 To Len(Arr(1, 1))
        If Len(Str) - Len(Replace(Str, Mid(Arr(1, 1), i, 1), "")) = UBound(Arr) Then strTmp = strTmp & Mid(Arr(1, 1), i, 1)
    Next
    [B2] = strTmp
End Sub


TA的精华主题

TA的得分主题

发表于 2014-3-22 14:12 | 显示全部楼层
求助求助,不能让此贴沉下去!

TA的精华主题

TA的得分主题

发表于 2014-3-22 14:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-3-22 20:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
是这个意思吗
  1. Public Sub Most()
  2.     Dim d As Object
  3.     Dim arr As Variant
  4.     Dim strKey As Variant
  5.     Dim strItem As Variant
  6.     Dim strArr() As String, m$, m1$
  7.     Dim tr(1 To 2) As Integer
  8.     Dim ttr() As Integer
  9.     Dim l%, r%, x%, i%, j%
  10.     Dim blnP As Boolean
  11.     Set d = CreateObject("scripting.dictionary")
  12.     r = [A65536].End(xlUp).Row
  13.     arr = Range("A1:A" & r)
  14.     For l = 2 To 5
  15.         ReDim strArr(1 To r)
  16.         tr(1) = 1
  17.         For x = 1 To r
  18.             tr(2) = x
  19.             For i = 1 To Len(arr(x, 1))
  20.                 blnP = True
  21.                 m = Mid(arr(x, 1), i, l)
  22.                 If Len(m) = l Then
  23.                     For j = 1 To l
  24.                         m1 = Mid(m, j, 1)
  25.                         If Not (Asc(m1) > -20319 And Asc(m1) < -2050) Then
  26.                             blnP = False
  27.                             Exit For
  28.                         End If
  29.                     Next
  30.                     If blnP Then
  31.                         If d.Exists(m) Then
  32.                             ttr = d(m)
  33.                             If ttr(2) <> x Then
  34.                                 ttr(1) = ttr(1) + 1
  35.                                 ttr(2) = x
  36.                                 d(m) = ttr
  37.                             End If
  38.                         Else
  39.                             d(m) = tr
  40.                         End If
  41.                     End If
  42.                 End If
  43.             Next
  44.         Next
  45.         strKey = d.keys
  46.         strItem = d.items
  47.         d.RemoveAll
  48.         tr(1) = 0
  49.         tr(2) = 0
  50.         For x = 0 To UBound(strItem)
  51.             If strItem(x)(1) >= tr(1) Then
  52.                 tr(1) = strItem(x)(1)
  53.                 tr(2) = x
  54.             End If
  55.         Next
  56.         If tr(1) > 1 Then
  57.             Cells(l, 2).Value = l & "个的词"
  58.             Cells(l, 3).Value = strKey(tr(2))
  59.             Cells(l, 4).Value = "出现次数 " & tr(1)
  60.         End If
  61.     Next
  62. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-3-22 23:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lionzhong 于 2014-3-22 23:29 编辑

好复杂喔,我试了四楼老师的代码可以运行,但他的代码只针对所有数据都在同一个工作表中,我的意思是对比的数据在sheet2,答案显示在sheet1.  好像附件这样。

VBA提取相同字符串.rar

3.4 KB, 下载次数: 125

TA的精华主题

TA的得分主题

发表于 2014-3-22 23:34 | 显示全部楼层
lionzhong 发表于 2014-3-22 14:59
求助求助!!

移步


雷同字符提取函数 自定义函数 20L
http://club.excelhome.net/thread-883745-1-1.html

TA的精华主题

TA的得分主题

发表于 2014-3-26 11:18 | 显示全部楼层
lionzhong 发表于 2014-3-22 13:31
我试了一下4楼老师的代码,我想引用单元表2作为数据源,改了其中一句后就不能运行了,具体修改为 Arr = Wor ...

Sub GetSameWord()
    Dim Arr, i%, Str$, strTmp$

    Arr = Sheets(2).Range("A3", Sheets(2).[A3].End(4))
    Str = Join(Application.Transpose(Arr))
    For i = 1 To Len(Arr(1, 1))
        If Len(Str) - Len(Replace(Str, Mid(Arr(1, 1), i, 1), "")) = UBound(Arr) Then strTmp = strTmp & Mid(Arr(1, 1), i, 1)
    Next

    Sheets(1).[B2] = strTmp
End Sub

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-15 12:22 , Processed in 0.048796 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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