ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 10个元素任意取N个

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-19 09:27 | 显示全部楼层 |阅读模式
本帖最后由 天地一相 于 2024-5-19 14:14 编辑

感谢帮助!详见截图附件
截图.PNG

生成内容.rar

7.1 KB, 下载次数: 10

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-19 10:04 | 显示全部楼层
Private Function getBitOne(num)
    n = num: ret = 0
    Do While n <> 0
        ret = ret + 1
        n = n - (n And -n)
    Loop
    getBitOne = ret
End Function

Private Function bitToNum(num)
    ret = ""
    For i = 0 To 9
        If (num And (2 ^ i)) <> 0 Then
            ret = ret & i
        End If
    Next
    bitToNum = ret
End Function

Public Sub main()
    Dim colls(0 To 10) As Collection
    For i = 0 To 10
        Set colls(i) = New Collection
    Next
    For i = 0 To (2 ^ 10) - 1
        n = getBitOne(i)
        colls(n).Add bitToNum(i)
    Next
   
    arr = [b3:b6]
    c = 4
    For Each a In arr
        r = 3
        For Each Item In colls(a)
            Cells(r, c) = Item
            r = r + 1
        Next
        c = c + 1
    Next
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-19 13:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Option Explicit
Sub test()
    Dim i&, ar, dr(), er(), vResult(), t#
   
    ReDim dr(1 To 10)
    For i = 1 To UBound(dr)
        dr(i) = i - 1
    Next i
   
    ar = Range("B3", Cells(Rows.Count, "B").End(xlUp)).Value
   
    With Range("D3:XFD" & Rows.Count)
        .Clear
        .NumberFormatLocal = "@"
    End With
    For i = 1 To UBound(ar)
        ReDim er(1 To ar(i, 1))
        ReDim vResult(1 To WorksheetFunction.Combin(UBound(dr), ar(i, 1)), 0)
        combinArr dr, er, vResult, ar(i, 1), 0
        Cells(3, i + 3).Resize(UBound(vResult)) = vResult
    Next i
   
    Beep
End Sub
  
Function combinArr(ByRef ar(), ByRef br(), ByRef cr(), ByVal n&, Optional _
    ByRef iGroup&, Optional ByVal iStart&, Optional ByVal iNum& = 1)
    Dim i&, j&
    For i = iStart + 1 To UBound(ar) - n + iNum
        If iNum < n Then
           br(iNum) = ar(i)
           Call combinArr(ar, br, cr, n, iGroup, i, iNum + 1)
        Else
           br(iNum) = ar(i)
           iGroup = iGroup + 1
           cr(iGroup, 0) = Join(br, "")
        End If
    Next
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-19 13:16 | 显示全部楼层
参与一下。。。

生成内容.rar

15.58 KB, 下载次数: 7

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-19 13:44 | 显示全部楼层
  1. Sub aa()
  2. arr = [b3:b6]   '数据源
  3. For i = 1 To UBound(arr)
  4. brr = ArrCP0(10, arr(i, 1), 41, 0, 1)
  5. Range("h3").Resize(UBound(brr), 1).Offset(0, i - 1) = brr '输出
  6. Next
  7. End Sub
复制代码
arrCP0 见


n取m 自定义函数 随机 组合 排列 分组 分配
https://club.excelhome.net/thread-1526867-1-1.html
(出处: ExcelHome技术论坛)


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-19 14:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢,太牛了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-2 14:57 , Processed in 0.029221 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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