ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA编程有偿代做

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-22 13:27 | 显示全部楼层
本帖最后由 1256366515 于 2022-3-22 13:31 编辑
DevilW 发表于 2022-3-22 12:42
单个字符吗?必须是可视的字符,图片上 for h =1 to 6 改为 1 to 3

能解决一下闭环中 字符个数不确定的问题吗?有可能是7-9个人组成的一个闭环

TA的精华主题

TA的得分主题

发表于 2022-3-22 13:45 | 显示全部楼层

这个就是个逻辑问题,怎么就扯上正则了???

TA的精华主题

TA的得分主题

发表于 2022-3-22 14:51 | 显示全部楼层
1256366515 发表于 2022-3-22 13:27
能解决一下闭环中 字符个数不确定的问题吗?有可能是7-9个人组成的一个闭环

主要程序,上面大神都解决了,你现在就是要求字母可以替换成任意的字符,其实这个很简单,你在后台做一个映射表就行。不一定要在程序里解决这个问题

TA的精华主题

TA的得分主题

发表于 2022-3-22 15:27 | 显示全部楼层
1256366515 发表于 2022-3-22 13:27
能解决一下闭环中 字符个数不确定的问题吗?有可能是7-9个人组成的一个闭环

3个人是利用正则互斥来完成的,要3个人以上的闭环情况复杂许多,需要改变思路了,如第3人流向第1人和第5人流向第1人,应该采取什么机制来决定

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-22 15:29 | 显示全部楼层
疑似良民 发表于 2022-3-22 14:51
主要程序,上面大神都解决了,你现在就是要求字母可以替换成任意的字符,其实这个很简单,你在后台做一个 ...

现在最主要的问题并非,替换成字符的问题。而是一个闭环中可能是3个字符组成,也可能是4个,9个字符组成;这段代码默认三个字符组成

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-22 15:31 | 显示全部楼层
DevilW 发表于 2022-3-22 15:27
3个人是利用正则互斥来完成的,要3个人以上的闭环情况复杂许多,需要改变思路了,如第3人流向第1人和第5 ...

3个人只是最低的层级的闭环,大神能重新帮忙写一下吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-22 15:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zxsea_7426 发表于 2022-3-22 13:45
这个就是个逻辑问题,怎么就扯上正则了???

如果不用正则怎么解决呢 ,闭环可能有3个人组成,也可能四个人组成,甚至最大可能8个九个人组成

TA的精华主题

TA的得分主题

发表于 2022-3-22 16:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-3-22 16:48 | 显示全部楼层
提供一个不限制字数的找闭环的算法予以参考
  1. Private vData As Variant, nRow As Long, dicData As Object

  2. Sub CloseLink()
  3.     With [A1].CurrentRegion
  4.         vData = .Offset(1).Resize(.Rows.Count - 1).Value
  5.     End With
  6.     Set dicData = CreateObject("Scripting.Dictionary")
  7.     For nRow = 1 To UBound(vData)
  8.         If vData(nRow, 1) <> "" And vData(nRow, 2) <> "" Then
  9.             If Not dicData.Exists(vData(nRow, 1)) Then Set dicData(vData(nRow, 1)) = CreateObject("Scripting.Dictionary")
  10.             dicData(vData(nRow, 1))(vData(nRow, 2)) = ""
  11.         End If
  12.     Next
  13.     ReDim vData(0)
  14.     nRow = 0
  15.    
  16.     GetLink dicData
  17.     [D:D].ClearContents
  18.     If nRow > 0 Then [D1].Resize(nRow) = Application.WorksheetFunction.Transpose(vData)
  19. End Sub

  20. Private Function GetLink(ByVal oDic As Object, Optional ByVal sFirst As String, Optional ByVal sLink As String)
  21.     Dim vKey As Variant, vDataKey As Variant
  22.    
  23.     For Each vKey In oDic.Keys
  24.         If vKey = sFirst And Len(sLink & vKey) > 2 Then
  25.             nRow = nRow + 1
  26.             ReDim Preserve vData(1 To nRow)
  27.             vData(nRow) = sLink & vKey
  28.         ElseIf Not (sLink Like "*" & vKey & "*") Then
  29.             If dicData.Exists(vKey) Then GetLink dicData(vKey), IIf(sFirst = "", vKey, sFirst), sLink & vKey
  30.         End If
  31.     Next
  32. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2022-3-22 16:50 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 10:37 , Processed in 0.036002 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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