1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

帖子
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 365|回复: 18

[求助] 求助老师,excel如何生成数字组合?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-4-14 18:45 | 显示全部楼层 |阅读模式
比如我要生成1到20里面任意三个数字的组合,组合里的数字不重复,能做到吗?

TA的精华主题

TA的得分主题

发表于 2025-4-14 19:08 | 显示全部楼层
看看超人版主的专辑,里面有专门分析这个问题。
20选3,组合数是COMBINE(20,3)=1140种。
直接套用超版的公式(之一):
  1. =LET(fx,LAMBDA(m,n,IF(n=1,m,IF(ROWS(m)=n,TOROW(m),VSTACK(IFNA(HSTACK(@m,fx(DROP(m,1),n-1)),@m),fx(DROP(m,1),n))))),fx(SEQUENCE(20),3))
复制代码

TA的精华主题

TA的得分主题

发表于 2025-4-14 19:10 | 显示全部楼层
如果版本太低,搜一下“世界客都”老师的帖子,有专门讨论过另外一种方法。

TA的精华主题

TA的得分主题

发表于 2025-4-14 19:12 | 显示全部楼层
=WRAPROWS(UNIQUE(MAP(LET(b,20,a,TOCOL(TOCOL(MAKEARRAY(b,b,LAMBDA(x,y,IF(x<y,x&","&y,\))),3)&","&SEQUENCE(,b)),FILTER(a,MAP(a,LAMBDA(z,COUNTA(UNIQUE(TEXTSPLIT(z,,",")))))=3)),LAMBDA(c,TEXTJOIN(",",1,SORT(REGEXP(c,"\d+"),,,1))))),20)

image.jpg

TA的精华主题

TA的得分主题

发表于 2025-4-14 19:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2025-4-14 19:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png
Option Explicit
Sub test()
    Dim i&, dr(), er(), vResult(), t#, r&
   
    t = Timer
    ReDim dr(1 To 20)
    For i = 1 To UBound(dr): dr(i) = i: Next
   
    ReDim er(1 To 3)
    ReDim vResult(1 To WorksheetFunction.Combin(UBound(dr), 3), 1 To 3)
    combinArr dr, er, vResult, 3, r

    [E1].CurrentRegion.Clear
    With [E1].Resize(UBound(vResult), 3)
        .Value = vResult
        .EntireColumn.AutoFit
    End With
    MsgBox "执行完毕!_用时:  " & Format(Timer - t, "0.00") & "  秒,共发现 " & UBound(vResult) & " 组组合", 64
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
           For j = 1 To n
              cr(iGroup, j) = br(j)
           Next
        End If
    Next
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-14 20:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
leepoison 发表于 2025-4-14 19:12
=WRAPROWS(UNIQUE(MAP(LET(b,20,a,TOCOL(TOCOL(MAKEARRAY(b,b,LAMBDA(x,y,IF(x

谢谢,这个公式真接复制到任意单元格就行了吗?我是excel365

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-14 20:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2025-4-14 20:21 | 显示全部楼层

TA的精华主题

TA的得分主题

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

太感谢啦,怎么我输入公式 显示 name?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

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

GMT+8, 2025-4-24 22:47 , Processed in 0.025712 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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