问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用excel里的宏实现​ 排列组合

发布网友 发布时间:2024-08-20 22:00

我来回答

1个回答

热心网友 时间:2024-08-20 23:02

下面是固定提取数的主要代码vba(即在C(m,n)中n是固定的) 需排列数据在arr数组中 n是组合后的结果数量 n = WorksheetFunction.Combin(h, 6) ReDim arr1(1 To n, 1 To 6) For a = 1 To h For b = 1 a To h For c = 1 b To h For d = 1 c To h For e = 1 d To h For f = 1 e To h i = i 1 arr1(i, 1) = arr(a, 1) arr1(i, 2) = arr(b, 1) arr1(i, 3) = arr(c, 1) arr1(i, 4) = arr(d, 1) arr1(i, 5) = arr(e, 1) arr1(i, 6) = arr(f, 1) Next f Next e Next d Next c Next b Next a 建议你直接运行代码理解吧(如从1~8取6,只有28个结果,相信你看到结果就能理解的),不知怎么解释 如果你需要m,n两数都是不固定的,以下是我以前写的,现在也不知道怎么解释了,还是那一句,你得自己运行并理解 Sub Cmn固定数组法() '固定数组法 Dim rng Dim r As Range Dim tc As Long, i_z As Long Dim MaxR As Long, max As Double, n1 As Long, n2 As Long, n3 As Long Dim i As Long, j As Long, c As Long Dim all(), arr(), arr_z() Dim str As String, str_arr As String On Error Resume Next Set rng = Application.InputBox("请选择一个单元格区域", "明天beyond", Type:=8) If rng Is Nothing Then Exit Sub On Error GoTo 0 '将rng中非空的值传入数组arr For Each r In rng If r <> "" Then ReDim Preserve arr(i) arr(i) = r.Value i = i 1 End If Next 'Application.ScreenUpdating = False i_z = i str = "选取元素总个数:" & i & vbLf Set rng = Nothing tc = Application.InputBox("请输入组合个数", "明天beyond", Type:=1) If tc = 0 Or tc > i Then Exit Sub '判断提取数是否大于待提取数,如果为真则退出 'MaxR 是表示在第一次取值(提取第二位)时能到达的最大数。 t = Timer MaxR = i - tc 1 max = WorksheetFunction.Combin(i, tc) ReDim all(1 To max, 1 To tc * 2) ReDim arr_z(1 To max) For i = 1 To MaxR all(i, 1) = arr(i - 1) all(i, 2) = i 1 Next ji = MaxR For c = 1 To tc - 1 n1 = 1 n2 = c * 2 1 For i = 1 To ji For j = all(i, c * 2) To MaxR c all(n1, n2) = all(i, n2 - 2) & "-" & arr(j - 1) all(n1, n2 1) = j 1 n1 = n1 1 Next Next ji = n1 - 1 Next n3 = tc * 2 - 1 For i = 1 To max arr_z(i) = all(i, n3) Next '___________________ 'Application.ScreenUpdating = True t = Timer - t t2 = Timer On Error Resume Next Set rng = Application.InputBox("结果保存到……?", "明天beyond", Type:=8) If rng Is Nothing Then Exit Sub On Error GoTo 0 tc = WorksheetFunction.Combin(i_z, tc) str = str & "结果有" & tc & "个" If tc > Rows.Count Then MsgBox "无法保存全部结果,只能保存前" & Rows.Count & "条" rng.Range("a1").Resize(tc, 1) = WorksheetFunction.Transpose(arr_z) MsgBox "已完成操作!" & vbLf & vbLf & str & "时间" & Timer - t2 t, vbInformation, "明天beyond" End Sub
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2023文科男生最吃香的专业 哪些专业好就业 在南京想找上海音乐学院的老师,怎么找? 荔枝核怎么服用-荔枝核煮水一般煮几颗合适 属虎适合什么名字2022年新生儿 有内涵热门名字精选 国内读研好,还是出国读研好 出国读研和国内读研哪个更好 在一个比例中,如果两个外项互为倒数。那么两个内向的什么是一?_百度知 ... 两个外项互为倒数,一个内向是8分之3,另一个内项是多少【怎样求出来... 在一个比例中,两个外向互为倒数,其中一个内项是8,另一个内项是_百度... 在比例中两个外项互为倒数,其中一个内向是2.75,另一个内项是多少_百度... 白月光是初恋,朱砂痣是什么 如何让excel自动排列组合如何让excel自动排列组合显示 白月光是不是初恋的意思 去汽修厂修车老板会不会利用我的车骗保 我弟弟开别人的车撞了,车是上的全险。到4s店修车花了10万块钱。修前说... 朋友圈秀恩爱的句子 发空间的秀恩爱说说 情侣发朋友圈的精美句子 朋友圈情侣秀恩爱的句子 王者荣耀赵云世冠皮肤多少钱-赵云世冠皮肤价格分享 王者荣耀赵云淬星耀世多少钱介绍_王者荣耀赵云淬星耀世多少钱是什么 王者荣耀星火炼枪赵云怎么得介绍_王者荣耀星火炼枪赵云怎么得是什么... 【手游】《王者荣耀》赵云世冠皮肤正式公布介绍_【手游】《王者荣耀... 家常韩国泡菜的制作方法 你好 我再问一下,就是你说的打针直接去医院说打那个行么?然后还吃药不... urv变速箱什么牌子 科廷大学新加坡分校如何 一期一校丨科廷大学新加坡校区 科廷大学新加坡校区:全球前200强顶尖名校,获AACSB认证,就业率还高... 非法收购林木罪的构成标准是什么 构成非法收购林木罪需要满足哪些条件 非法收购林木罪的犯罪构成要件是什么 河南省有没有颁布养犬管理规定?三门峡市有没有颁布养犬管理规定?_百度... “大跃进”和人民公社化运动严重影响 土地溢价计入什么科目 我去年在长垣县新华在了保险,今年想退。写完退单她什么也没给我,倒... 申请洛克菲勒大学硕士需要满足哪些条件? 西红柿的果实有的地方变色变僵,过一段时间僵的地方就长黑霉了(如图,刚... 沈括的科学成就 历史上沈括数理化方面的成就有哪些? 沈括有哪些科学成就在《梦溪笔谈》中有记载? cy是什么意思的? 肛门尖锐湿疣和痔疮的区别 蘑菇不焯水直接炒会有什么影响? 肛门尖锐湿疣症状 肛门湿疣分类方试 干炸蘑菇焯水和不焯水的区别有哪些? 对肛管内尖锐湿疣了解吗? 美的智能家居体验馆店位置 构成玩忽军事职守罪既遂怎么判刑? 桃花缘之三生三世内容简介 把句子写完整,下雨了,我打着一把()的雨伞、