Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: sanpiao

[已解决]排列出所有后面数比前面数大的所有组合

[复制链接]
发表于 2021-6-28 15:43 | 显示全部楼层    本楼为最佳答案   
sanpiao 发表于 2021-6-28 15:28
第一位N列为0时应是

新增紅色部份

Dim a, ar, g(6), n(1 To 6), m, r
Sub demo()
   [ac1:ah1000] = ""
   r = 0
   a = [n1].CurrentRegion
   For i = 1 To UBound(a)
      g(1) = IIf(a(i, 1) > 0, 0, 1)
      For j = 2 To 6
         g(j) = g(j - 1)
         If a(i, j) <= a(i, j - 1) Then g(j) = g(j) + 1
      Next
      m = g(6): ar = i: com 1, 0
   Next
End Sub
Sub com(ByVal k, ByVal i)
   If k > 6 Then
      r = r + 1: Cells(r, "ac").Resize(1, 6) = n
      Exit Sub
   End If
   If g(k) > g(k - 1) Then i = i + 1
   For i = i To 3 - m + g(k)
      n(k) = i * 10 + a(ar, k)
      com k + 1, i
   Next
End Sub


评分

参与人数 1学分 +2 收起 理由
sanpiao + 2 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-6-28 15:48 | 显示全部楼层
cutecpu 发表于 2021-6-28 15:43
新增紅色部份

Dim a, ar, g(6), n(1 To 6), m, r

老师这个结果没有出现啊
9.png
回复

使用道具 举报

发表于 2021-6-28 15:52 | 显示全部楼层
sanpiao 发表于 2021-6-28 15:48
老师这个结果没有出现啊

我這邊有出來喔
10 樓的代碼再仔細對一次
log.png
回复

使用道具 举报

 楼主| 发表于 2021-6-28 15:56 | 显示全部楼层
cutecpu 发表于 2021-6-28 15:52
我這邊有出來喔
10 樓的代碼再仔細對一次

完美啦!感谢老师

评分

参与人数 1学分 +2 收起 理由
cutecpu + 2 不客氣。祝順心,南無阿彌陀佛!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-7-20 22:17 | 显示全部楼层
sanpiao 发表于 2021-6-28 15:56
完美啦!感谢老师

老师您好,之前的这个问题,想改下一个小条件(S列数最大为50),请您看看代码怎么改
2.png
回复

使用道具 举报

发表于 2021-7-21 00:51 | 显示全部楼层
sanpiao 发表于 2021-7-20 22:17
老师您好,之前的这个问题,想改下一个小条件(S列数最大为50),请您看看代码怎么改

更改代码里红色部份为 4
For i = i To 4 - m + g(k)

评分

参与人数 1学分 +2 收起 理由
sanpiao + 2 学习了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-7-21 17:29 | 显示全部楼层
cutecpu 发表于 2021-7-21 00:51
更改代码里红色部份为 4
For i = i To 4 - m + g(k)

cutecpu老师您好!您看一下下面的条件,应怎样修改代码呢?将N到S数据按行,排列出所有后面数比前面数大的所有组合(S列数据不变,R列数值最大为35)N到S列数据可向下增加。
[/td] [/tr]
[tr] [/tr]
[tr] [/tr]
[tr] [/tr]
[tr] [/tr]
[tr] [/tr]
[tr] [/tr]
[tr] [/tr]
[tr] [/tr]
[tr] [/tr]
[tr] [/tr]
8.png

排列出所有后面数比前面数大的所有组合.rar

7.79 KB, 下载次数: 0

回复

使用道具 举报

发表于 2021-7-21 18:27 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2021-7-21 18:29 | 显示全部楼层

您想想办法,
回复

使用道具 举报

发表于 2021-7-21 19:00 | 显示全部楼层

紅色部份修改

Sub com(ByVal k, ByVal i)
   If k > 6 Then
      r = r + 1: Cells(r, "ac").Resize(1, 6) = n
      Exit Sub
   End If
   If g(k) > g(k - 1) Then i = i + 1
   For i = i To 3 - m + g(k)
      n(k) = i * 10 + a(ar, k)
      If n(k) <= 35 Then com k + 1, i
   Next
End Sub

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 04:44 , Processed in 1.626747 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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