Excel精英培训网

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

[已解决]根据行列数据出现个数组合数据

[复制链接]
发表于 2021-3-8 20:18 | 显示全部楼层 |阅读模式
本帖最后由 sanpiao 于 2021-4-3 09:54 编辑

根据行列数据出现个数组合数据
最佳答案
2021-3-30 16:03
本帖最后由 cutecpu 于 2021-3-31 20:47 编辑
sanpiao 发表于 2021-3-30 15:45
说明在附件中,您看一下

Dim x, y, arr, v, r, m, sumx
Sub demo()
   x = Range("D3:D10"): y = Range("E2:N2"): arr = Range("E3:N10")
   sumx = Application.Sum(x): ReDim v(1 To sumx)
   r = 3
   Call com(1, 1, 1)
End Sub
Sub com(n As Integer, k As Integer, c As Integer)
   If n > UBound(x) Then
      Cells(r, "Q").Resize(1, sumx) = v
      r = r + 1
      Exit Sub
   End If
   If x(n, 1) = 0 Or c > x(n, 1) Then
      Call com(n + 1, 1, 1)
      Exit Sub
   End If
   For i = k To UBound(y, 2) - x(n, 1) + c
      If y(1, i) > 0 And arr(n, i) Then
         y(1, i) = y(1, i) - 1
         m = m + 1
         v(m) = arr(n, i)
         Call com(n, i + 1, c + 1)
         m = m - 1
         y(1, i) = y(1, i) + 1
      End If
   Next
End Sub

祝順心,南無阿彌陀佛!

根据行列数据出现个数组合数据.rar

10.39 KB, 下载次数: 19

发表于 2021-3-9 21:07 | 显示全部楼层
抱歉,做的时候没有充分理解你的意思,时间有限,懒得改了,仅作为启发。
现在输出的是以逗号分隔的全排列,而非以行列标数据取数,不喜勿喷。

根据行列数据出现个数组合数据.zip

33.84 KB, 下载次数: 14

回复

使用道具 举报

 楼主| 发表于 2021-3-10 08:44 | 显示全部楼层
本帖最后由 sanpiao 于 2021-3-10 09:08 编辑
大灰狼1976 发表于 2021-3-9 21:07
抱歉,做的时候没有充分理解你的意思,时间有限,懒得改了,仅作为启发。
现在输出的是以逗号分隔的全排列 ...

非常感谢您的帮助!!您如果有时间请您按行列标数据取数做一下,输出结果不是以逗号分开的就太完美了!!!期待您的再次帮助(在组合中,行、列出几个数在组合结果中就出现几个,在同一组合结果中只要有数据出现的,行、列  中的数据按出现个数同时组合出现)
回复

使用道具 举报

发表于 2021-3-10 16:32 | 显示全部楼层
Dim x, y, arr, v, r, m, sumx
Sub demo()
   x = Range("D3:D8"): y = Range("E2:J2"): arr = Range("E3:J8")
   sumx = Application.Sum(x): ReDim v(1 To sumx)
   r = 3
   Call com(1, 1, 1)
End Sub
Sub com(n As Integer, k As Integer, c As Integer)
   If n > 6 Then
      Cells(r, "L").Resize(1, sumx) = v
      r = r + 1
      Exit Sub
   End If
   If x(n, 1) = 0 Or c > x(n, 1) Then
      Call com(n + 1, 1, 1)
      Exit Sub
   End If
   For i = k To 6 - x(n, 1) + c
      If y(1, i) > 0 And arr(n, i) Then
         y(1, i) = y(1, i) - 1
         m = m + 1
         v(m) = arr(n, i)
         Call com(n, i + 1, c + 1)
         m = m - 1
         y(1, i) = y(1, i) + 1
      End If
   Next
End Sub

祝順心,南無阿彌陀佛!



根据行列数据出现个数组合数据.rar

18.33 KB, 下载次数: 22

回复

使用道具 举报

 楼主| 发表于 2021-3-10 19:43 | 显示全部楼层
本帖最后由 sanpiao 于 2021-3-10 21:34 编辑
cutecpu 发表于 2021-3-10 16:32
Dim x, y, arr, v, r, m, sumx
Sub demo()
   x = Range("D3:D8"): y = Range("E2:J2"): arr = Range("E3 ...

太强大了,非常感谢!!!
回复

使用道具 举报

 楼主| 发表于 2021-3-30 10:05 | 显示全部楼层
本帖最后由 sanpiao 于 2021-3-30 14:44 编辑
cutecpu 发表于 2021-3-10 16:32
Dim x, y, arr, v, r, m, sumx
Sub demo()
   x = Range("D3:D8"): y = Range("E2:J2"): arr = Range("E3 ...

行增加到8行,列增加到10列。肯请前辈改一下代码!
QQ图片20210330095350.png

根据行列数据出现个数组合数据.zip

18.34 KB, 下载次数: 4

回复

使用道具 举报

发表于 2021-3-30 15:09 | 显示全部楼层
sanpiao 发表于 2021-3-30 10:05
行增加到8行,列增加到10列。肯请前辈改一下代码!

您好,模擬一下答案喔!
回复

使用道具 举报

 楼主| 发表于 2021-3-30 15:45 | 显示全部楼层
cutecpu 发表于 2021-3-30 15:09
您好,模擬一下答案喔!

说明在附件中,您看一下

根据行列数据出现个数组合数据.zip

20.42 KB, 下载次数: 1

回复

使用道具 举报

发表于 2021-3-30 16:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 cutecpu 于 2021-3-31 20:47 编辑
sanpiao 发表于 2021-3-30 15:45
说明在附件中,您看一下

Dim x, y, arr, v, r, m, sumx
Sub demo()
   x = Range("D3:D10"): y = Range("E2:N2"): arr = Range("E3:N10")
   sumx = Application.Sum(x): ReDim v(1 To sumx)
   r = 3
   Call com(1, 1, 1)
End Sub
Sub com(n As Integer, k As Integer, c As Integer)
   If n > UBound(x) Then
      Cells(r, "Q").Resize(1, sumx) = v
      r = r + 1
      Exit Sub
   End If
   If x(n, 1) = 0 Or c > x(n, 1) Then
      Call com(n + 1, 1, 1)
      Exit Sub
   End If
   For i = k To UBound(y, 2) - x(n, 1) + c
      If y(1, i) > 0 And arr(n, i) Then
         y(1, i) = y(1, i) - 1
         m = m + 1
         v(m) = arr(n, i)
         Call com(n, i + 1, c + 1)
         m = m - 1
         y(1, i) = y(1, i) + 1
      End If
   Next
End Sub

祝順心,南無阿彌陀佛!

demo.rar

17.98 KB, 下载次数: 10

回复

使用道具 举报

 楼主| 发表于 2021-3-30 16:39 | 显示全部楼层
cutecpu 发表于 2021-3-30 16:03
Dim x, y, arr, v, r, m, sumx
Sub demo()
   x = Range("D3:D10"): y = Range("E2:N2"): arr = Range( ...

向您学习!感谢您再次帮助!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 15:42 , Processed in 0.392370 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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