Excel精英培训网

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

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

[复制链接]
发表于 2021-6-28 12:26 | 显示全部楼层 |阅读模式

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

最佳答案
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


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

7.62 KB, 下载次数: 5

发表于 2021-6-28 13:24 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2021-6-28 13:54 | 显示全部楼层

您 好!每个数分别加10,20,30符合后面的数比前面的数大的组合排列出来
回复

使用道具 举报

发表于 2021-6-28 14:38 | 显示全部楼层
Dim a, ar, g(6), n(1 To 6), m, r
Sub demo()
   [ac1:ah1000] = ""
   a = [n1].CurrentRegion
   For i = 1 To UBound(a)
      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

祝順心,南無阿彌陀佛!


demo.rar

12.88 KB, 下载次数: 4

回复

使用道具 举报

 楼主| 发表于 2021-6-28 15:03 | 显示全部楼层
本帖最后由 sanpiao 于 2021-6-28 15:05 编辑
cutecpu 发表于 2021-6-28 14:38
Dim a, ar, g(6), n(1 To 6), m, r
Sub demo()
   [ac1:ah1000] = ""

感谢老师!补充一下:每个数分别加10,20,30符合后面的数比前面的数大的组合排列出来
两个小问题:                          
1、改变N:S数据,组合结果不从AC1写入。
2、第一位N列为0时应该出现10或20、30.排列结果只出现后面数比前面数大,没有想等的结果。


6.png
回复

使用道具 举报

发表于 2021-6-28 15:13 | 显示全部楼层
本帖最后由 cutecpu 于 2021-6-28 15:15 编辑
sanpiao 发表于 2021-6-28 15:03
感谢老师!补充一下:每个数分别加10,20,30符合后面的数比前面的数大的组合排列出来
两个小问题:     ...

您好,

1、改变N:S数据,组合结果不从AC1写入。

這句是什麼意思

2. 正確答案是如圖這樣嗎?
log.png
回复

使用道具 举报

 楼主| 发表于 2021-6-28 15:21 | 显示全部楼层
cutecpu 发表于 2021-6-28 15:13
您好,

1、改变N:S数据,组合结果不从AC1写入。

从下面单元格写入结果
7.png
回复

使用道具 举报

发表于 2021-6-28 15:25 | 显示全部楼层
sanpiao 发表于 2021-6-28 15:21
从下面单元格写入结果

新增、修改藍色部份

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)
      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


demo.rar

17.11 KB, 下载次数: 6

回复

使用道具 举报

 楼主| 发表于 2021-6-28 15:28 | 显示全部楼层
cutecpu 发表于 2021-6-28 15:25
新增、修改藍色部份

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

第一位N列为0时应是
8.png
回复

使用道具 举报

发表于 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 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 06:46 , Processed in 0.543090 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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