ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 有点难度的不确定数据组合

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-20 13:59 | 显示全部楼层
本帖最后由 gfdhgw 于 2023-7-20 14:01 编辑
nihao123456789 发表于 2023-7-20 13:19
B,C,D列,本列内是否会重复?是否会与其他列重复?
比如B列有没有可能是4,5,6,7,4?
比如B列有没有 ...

我这个是没有重复的,当然可以加上去重的,适应更多的需求

TA的精华主题

TA的得分主题

发表于 2023-7-20 14:13 | 显示全部楼层
gfdhgw 发表于 2023-7-20 13:04
那老师能帮写一下代码吗?谢谢

不好写,难度很高

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-20 14:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
tomxie 发表于 2023-7-20 14:17
只需要 1条SQL 就可以 全部搞掂,问题是结果太多太多,完全没有意义!

你好,老师,SQL怎么写呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-20 14:34 | 显示全部楼层
本帖最后由 gfdhgw 于 2023-7-20 14:35 编辑
tomxie 发表于 2023-7-20 14:26
Excel 2003+ 单个Sheet 最大行数也才1048576。
19*18*17*16*15*14*13=253,955,520  就算再过滤一下,也还 ...

你这个总数是排列算法,组合没这么多,符合要求的才20810个组合

TA的精华主题

TA的得分主题

发表于 2023-7-20 14:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一般也就彩票或者BOM会有类似的需求吧。      确实有点麻烦,等递归熟悉了可以拿来练习一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-20 15:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
论坛上找不到相似的问题,有没有高手帮解答一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-20 15:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 gfdhgw 于 2023-7-20 15:14 编辑
tomxie 发表于 2023-7-20 15:11
考虑大小顺序,确实只有 20810 种,SQL只需 1 条 语句,全部搞定。

能在VBA里面调用这个SQL写出通用性的代码吗?

TA的精华主题

TA的得分主题

发表于 2023-7-20 15:24 | 显示全部楼层
步骤2的递归代码(在ChatGPT基础上修改)。
核心就是这总分的递归。其他都很容易实现,不过工作量大。
  1. Sub GenerateCombinations()
  2.     Dim inputArray() As Variant
  3.     Dim outputArray() As Variant
  4.     Dim tempArray() As Variant
  5.     Dim n As Integer
  6.     Dim i As Integer, j As Integer
  7.     Dim s$
  8.    
  9.     ' 输入数组
  10.     inputArray = Array(1, 2, 3, 4, 5, 6) ', ... '更多数组元素)
  11.    
  12.     ' 设置取数个数
  13.     n = 4 ' 可以根据需要设置
  14.    
  15.     ReDim outputArray(1 To Application.WorksheetFunction.Combin(Application.count(inputArray), n), 1 To n)
  16.     ReDim tempArray(1 To n)
  17.    
  18.     ' 生成组合
  19.     GenerateCombination inputArray, tempArray, outputArray, n, 1, 1, 0 ' 添加额外的参数 1
  20.    
  21.      '输出组合结果
  22.     For i = 1 To UBound(outputArray)
  23.         s = ""
  24.         For j = 1 To n
  25.             s = s & "," & outputArray(i, j)
  26.         Next j
  27.         Debug.Print Mid(s, 2)
  28.     Next i
  29.    
  30. End Sub

  31. Sub GenerateCombination(inputArray() As Variant, tempArray() As Variant, outputArray() As Variant, n As Integer, currentIndex As Integer, outputIndex As Integer, startIndex As Integer) ' 添加额外的参数 startIndex
  32.     Dim i As Integer
  33.    
  34.     If currentIndex > n Then
  35.         For i = 1 To n
  36.             outputArray(outputIndex, i) = tempArray(i)
  37.         Next i
  38.         outputIndex = outputIndex + 1 ' 更新 outputIndex 的值
  39.         Exit Sub
  40.     End If
  41.    
  42.     For i = startIndex To UBound(inputArray)
  43.         tempArray(currentIndex) = inputArray(i)
  44.         GenerateCombination inputArray, tempArray, outputArray, n, currentIndex + 1, outputIndex, i + 1
  45.     Next i
  46. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-20 15:41 | 显示全部楼层
tomxie 发表于 2023-7-20 15:20
可能必须有数据库,例如 SQL Server 或者 PostgreSQL 或者 MySQL  或者 Oracle.

哦,那就是用的SQL自带的函数吗?我看有一些也可以在VBA里面用ADO调用SQL查询的

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-20 15:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
tomxie 发表于 2023-7-20 15:48
用任何开发语言都可以,只不过代码可能会更长一些。 Excel 本身也支持基础的 SQL 语法,不过对于一些高级的 ...

好吧,那只能看有没有其他高手直接用递归或循环给出代码了,谢谢了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 04:43 , Processed in 0.039743 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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