Excel精英培训网

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

[已解决]根据行列数据出现个数组合数据(新增行列个数条件)请老师看一下代码怎么修改。在线等

[复制链接]
发表于 2021-4-13 10:30 | 显示全部楼层 |阅读模式
本帖最后由 sanpiao 于 2021-4-14 14:32 编辑

根据行列数据出现个数组合数据(新增行列个数条件)请老师看一下代码怎么修改
最佳答案
2021-4-15 23:17
sanpiao 发表于 2021-4-15 21:36
老师在线期待您的解答

Dim x, y, arr, v, r, m, sumx
Sub demo()
   d1 = Range("u3:z" & [u3].End(xlDown).Row)
   d2 = Range("ab3:ag" & [u3].End(xlDown).Row)
   d3 = Range("ai3:an" & [u3].End(xlDown).Row)
   d4 = Range("ap3:au" & [u3].End(xlDown).Row)
   r = 3
   For d = 1 To UBound(d1)
      [e2:j2] = Application.Index(d1, d, 0)
      [e9:j9] = Application.Index(d2, d, 0)
      [d3:d8] = Application.Transpose(Application.Index(d3, d, 0))
      [k3:k8] = Application.Transpose(Application.Index(d4, d, 0))
      x = Range("D3:E8"): y = Range("E2:J3"): arr = Range("E3:J8")
      For i = 1 To UBound(x)
         x(i, 2) = Cells(i + 2, "k")
      Next
      For i = 1 To UBound(y, 2)
         y(2, i) = Cells(9, i + 4)
      Next
      sumx = Application.Sum(x): ReDim v(1 To sumx)
      Call com(1, 1, 1, 1)
   Next
End Sub
Sub com(n As Integer, k As Integer, c As Integer, xx As Integer)
   If n > UBound(x) Then
      Cells(r, "N").Resize(1, sumx) = v
      r = r + 1
      Exit Sub
   End If
   If x(n, xx) = 0 Or c > x(n, xx) Then
      If xx = 1 Then
         Call com(n, 1, 1, 2)
      Else
         Call com(n + 1, 1, 1, 1)
      End If
      Exit Sub
   End If
   s = 0: If xx = 2 Then s = 3
   yy = 1: If n > 3 Then yy = 2
   For i = k To s + 3 - x(n, xx) + c
      If y(yy, i) > 0 And arr(n, i) Then
         y(yy, i) = y(yy, i) - 1
         m = m + 1
         v(m) = arr(n, i)
         Call com(n, i + 1, c + 1, xx)
         m = m - 1
         y(yy, i) = y(yy, i) + 1
      End If
   Next
End Sub

祝順心,南無阿彌陀佛!


QQ图片20210413100647.png

根据行列数据出现个数组合数据(新增行列个数条件).zip

20.32 KB, 下载次数: 6

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-4-13 14:59 | 显示全部楼层
您好,右邊橘色部份為什麼比黃色部份還多行?
回复

使用道具 举报

 楼主| 发表于 2021-4-13 15:19 | 显示全部楼层
cutecpu 发表于 2021-4-13 14:59
您好,右邊橘色部份為什麼比黃色部份還多行?

您好!!我的想法是黃色部份和橘色部份数据可以改变,而且行数有不一样多的时候.按行分别进行组合提取数据.(有些行列数据不一能组合出结果).不知这样表述您能明白吗?
回复

使用道具 举报

发表于 2021-4-13 15:30 | 显示全部楼层
sanpiao 发表于 2021-4-13 15:19
您好!!我的想法是黃色部份和橘色部份数据可以改变,而且行数有不一样多的时候.按行分别进行组合提取数据.( ...

您好, 這樣光是 黃、橘的組合, 就已經要嘗試 9 x 9 x 24 x 24 = 46,656 種狀況?
回复

使用道具 举报

 楼主| 发表于 2021-4-13 15:40 | 显示全部楼层
cutecpu 发表于 2021-4-13 15:30
您好, 這樣光是 黃、橘的組合, 就已經要嘗試 9 x 9 x 24 x 24 = 46,656 種狀況?

您好!!有的黃、橘的組合不一定能组合出数据,只把能组合出数据结果提取出来,这样能实现吧!
回复

使用道具 举报

发表于 2021-4-13 15:49 | 显示全部楼层
sanpiao 发表于 2021-4-13 15:40
您好!!有的黃、橘的組合不一定能组合出数据,只把能组合出数据结果提取出来,这样能实现吧!

您好,先不管能不能組出答案,是說要嘗試 46,656  種狀況
原本只要嘗試一種行列情形,現在變成四萬多

回复

使用道具 举报

 楼主| 发表于 2021-4-13 17:13 | 显示全部楼层
cutecpu 发表于 2021-4-13 15:49
您好,先不管能不能組出答案,是說要嘗試 46,656  種狀況
原本只要嘗試一種行列情形,現在變成四萬多:lo ...

老师您好!四万多种情形是不是运行会很慢呢?我想附和条件的结果不会那么多,还肯请老师出手相助!!
回复

使用道具 举报

 楼主| 发表于 2021-4-14 11:10 | 显示全部楼层
cutecpu 发表于 2021-4-13 15:49
您好,先不管能不能組出答案,是說要嘗試 46,656  種狀況
原本只要嘗試一種行列情形,現在變成四萬多:lo ...

请求老师您帮助
回复

使用道具 举报

 楼主| 发表于 2021-4-14 20:29 | 显示全部楼层
sanpiao 发表于 2021-4-13 17:13
老师您好!四万多种情形是不是运行会很慢呢?我想附和条件的结果不会那么多,还肯请老师出手相助!!:han ...

期待老师您的解答!!
回复

使用道具 举报

发表于 2021-4-14 20:40 | 显示全部楼层
sanpiao 发表于 2021-4-14 20:29
期待老师您的解答!!

您好,可能要等其他大神出手了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 04:55 , Processed in 0.356050 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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