ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

参数1~5随机抽取组合

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-29 15:49 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
1.png

test.rar

7.88 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2024-7-29 16:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-7-29 17:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Option Explicit
  2. Option Base 1
  3. Option Compare Text

  4. Dim d As Dictionary
  5. Dim ar

  6. Sub Test()
  7.     Dim br, cr
  8.     Dim i%, j%, k%, r%
  9.    
  10.     '读取数据到数组
  11.     ReDim ar(1 To 5)
  12.     For j = 1 To 5
  13.         r = Columns(j).Find("*", , -4163, 1, 1, 2).Row
  14.         br = Cells(2, j).Resize(r - 1).Value
  15.         ar(j) = Application.Transpose(br)
  16.     Next
  17.     '字典存储结果,直接去重
  18.     Set d = New Dictionary
  19.     While d.Count < 1000
  20.         DFS 1, ""
  21.     Wend
  22.     '输出
  23.     Range("h1:h1000").Value = Application.Transpose(d.Keys)
  24. End Sub
  25. Private Sub DFS(k, s)
  26.     Dim x
  27.     x = GetRand(ar(k))
  28.     If k >= 5 Then
  29.         d(Mid(s & "-" & x, 2)) = ""
  30.         Exit Sub
  31.     Else
  32.         DFS k + 1, s & "-" & x
  33.     End If
  34. End Sub
  35. Function GetRand(ar0)
  36.     Dim j%
  37.     Randomize
  38.     j = UBound(ar0)
  39.     GetRand = ar0(Int(Rnd * j) + 1)
  40. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-29 17:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-29 18:52 | 显示全部楼层
谢谢,但我加入代码,怎么不执行呀?能不能加一个按钮。

TA的精华主题

TA的得分主题

发表于 2024-7-29 20:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Option Explicit
Sub test1()
    Dim cr, dr, er(), i&, m&, n&
   
    With Intersect([A1].CurrentRegion, Columns("A:E"))
        cr = Intersect(.Offset(), .Offset(1)).Value
    End With
    m = UBound(cr): n = UBound(cr, 2)
    ReDim dr(1 To n)
   
    Call cartesianProductDG1(cr, dr, er)

    [H1].CurrentRegion.Clear
    ReDim cr(1 To UBound(er), 0)
    For i = 1 To UBound(er)
        cr(i, 0) = er(i)
    Next i
   
    With [H1].Resize(UBound(cr))
         .Value = cr
        .EntireColumn.AutoFit
    End With
End Sub
Function cartesianProductDG1(ByVal ar, ByVal br, ByRef vResult, _
    Optional ByRef iGroup&, Optional ByVal n& = 1)
    Dim i&, j&
    For i = 1 To UBound(ar)
        If Len(ar(i, n)) Then
            br(n) = ar(i, n)
            If n = UBound(ar, 2) Then
                iGroup = iGroup + 1
                ReDim Preserve vResult(1 To iGroup)
                vResult(iGroup) = Join(br, "-")
            Else
                cartesianProductDG1 ar, br, vResult, iGroup, n + 1
            End If
        End If
    Next
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-29 20:03 | 显示全部楼层
参与一下。。。

test.rar

31.29 KB, 下载次数: 6

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-30 09:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-7-30 09:56 | 显示全部楼层
和二楼思路一样,不考虑去重。
360截图20240730095603404.jpg

TA的精华主题

TA的得分主题

发表于 2024-7-30 10:04 | 显示全部楼层
参与一下
  1. Sub t()
  2.     Dim arr, brr, i%, r%, n%, k%
  3.     arr = Sheet1.[a1:e10]
  4.     n = 1
  5.     ReDim brr(1 To 1000, 1 To 1)
  6.     Do While n < 1001
  7.         For i = 1 To 5
  8.             k = Sheet1.Cells(1, i).End(4).Row
  9.             r = WorksheetFunction.RandBetween(2, k)
  10.             brr(n, 1) = brr(n, 1) & arr(r, i) & "-"
  11.         Next i
  12.         brr(n, 1) = Mid(brr(n, 1), 1, Len(brr(n, 1)) - 1)
  13.         n = n + 1
  14.     Loop
  15.     Sheet1.[f2].Resize(UBound(brr), 1) = brr
  16. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 07:24 , Processed in 0.039445 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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