ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: beiounanhai

[求助] 五个数按要求排列组合

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-12-28 08:39 | 显示全部楼层
beiounanhai 发表于 2020-12-27 22:10
随机选三个但是要满足上述的两个条件

按9L说的,按顺序选择:先选3个,再判顺序。参见附件

如果随机选3个则:先排序,再选3个。不需再判顺序

VBA测试代码.rar

36.35 KB, 下载次数: 10

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-12-28 12:51 | 显示全部楼层
G1:I1=INDEX($A1:$E1,RANDBETWEEN(IF(COLUMN(A1)=1,1,MATCH(F1,1:1,)+1),2+COLUMN(A1)))

K1:N11{=IFERROR(INDEX($1:$1,MID(SMALL(IF((MMULT(N(MID(ROW($123:$345),{2,3},1)-MID(ROW($123:$345),{1,2},1)>0),{1;1})>1)*(MMULT(N(6-MID(ROW($123:$345),{1,2,3},1)>0),{1;1;1})>2),ROW($123:$345)),ROW(A1)),COLUMN(A1),1)),"")
7823.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-12-28 13:21 | 显示全部楼层
'按图给你凑了一个结果,,,

Option Explicit

Sub test()
  Dim arr, i, j, k, m
  arr = [a1].CurrentRegion.Value
  ReDim brr(1 To 10 ^ 4, 1 To 3)
  For i = 1 To UBound(arr, 2) - 2
    For j = i + 1 To UBound(arr, 2) - 1
      For k = j + 1 To UBound(arr, 2)
        If arr(1, i) > arr(1, j) And arr(1, j) > arr(1, k) Or _
          arr(1, i) < arr(1, j) And arr(1, j) < arr(1, k) Then
          m = m + 1
          brr(m, 1) = arr(1, i)
          brr(m, 2) = arr(1, j)
          brr(m, 3) = arr(1, k)
        End If
      Next
    Next
  Next
  [a11].Resize(m + 10, 3) = brr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-12-28 13:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 笨鸟飞不高 于 2020-12-28 13:32 编辑

VBA测试代码.zip (15.3 KB, 下载次数: 2)

TA的精华主题

TA的得分主题

发表于 2020-12-28 13:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub AwTest()
    Dim j%, a%, b%, c%, r&, arr
    Sheet1.Activate
    arr = [a1].CurrentRegion
    ReDim brr(1 To Rows.Count, 1 To 1)
    For a = 1 To UBound(arr, 2) - 2
        For b = a + 1 To UBound(arr, 2) - 1
            For c = a + 2 To UBound(arr, 2)
                If arr(1, a) < arr(1, b) And arr(1, b) < arr(1, c) Then
                    r = r + 1
                    brr(r, 1) = arr(1, a) & "," & arr(1, b) & "," & arr(1, c)
                ElseIf arr(1, a) > arr(1, b) And arr(1, b) > arr(1, c) Then
                    r = r + 1
                    brr(r, 1) = arr(1, a) & "," & arr(1, b) & "," & arr(1, c)
                End If
            Next
        Next
    Next
    [a12].Resize(r) = brr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-12-28 16:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub 按顺序组合()
  2.     Dim i, j, k, m, n, p, q, s&, sr
  3.     Dim arr, brr, crr, drr
  4.     n = 3     '给定的任意个数字中取 n个组合
  5.     drr = Range("A1").CurrentRegion.Value
  6.     m = UBound(drr, 2) - n + 2
  7.     p = Application.Combin(m, 2)
  8.     ReDim arr(1 To p)
  9.     For i = 1 To m - 1
  10.         For j = i + 1 To m
  11.             k = k + 1
  12.             arr(k) = i & "," & j
  13.         Next j
  14.     Next i
  15.     For k = 3 To n
  16.         q = 0      '计数器
  17.         m = m + 1
  18.         p = Application.Combin(m, k)
  19.         ReDim brr(1 To p)
  20.         For i = 1 To UBound(arr)
  21.             s = Mid(arr(i), InStrRev(arr(i), ",") + 1)
  22.             For j = s + 1 To m
  23.                 q = q + 1
  24.                 brr(q) = arr(i) & "," & j
  25.             Next j
  26.         Next i
  27.         If k < n Then arr = brr
  28.     Next k
  29.     ReDim arr(1 To p, 1 To 3)
  30.     q = 0      '计数器
  31.     For i = 1 To p
  32.         s = 0
  33.         sr = ""
  34.         crr = Split(brr(i), ",")     '索引从0开始
  35.         For j = 0 To n - 2
  36.             If drr(1, crr(j)) - drr(1, crr(j + 1)) > 0 Then s = s + 1 Else s = s - 1
  37.             sr = sr & drr(1, crr(j)) & ","
  38.         Next j
  39.        sr = sr & drr(1, crr(n - 1))
  40.         If Abs(s) = n - 1 Then q = q + 1: arr(q, 1) = sr
  41.     Next i
  42.     Range("B12").CurrentRegion = "" '.ClearContents
  43.     Range("B12").Resize(q, 3) = arr
  44. End Sub
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-12-28 16:36 | 显示全部楼层
本帖最后由 lmgz007 于 2020-12-28 17:02 编辑

可以满足a 个数字中选择 b个组合。
附件:

VBA7选3.rar

22.17 KB, 下载次数: 10

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

本版积分规则

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

GMT+8, 2024-7-3 15:56 , Processed in 0.035913 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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