ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 请教各位大神如何用VBA随机几个数值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-4-20 00:16 | 显示全部楼层 |阅读模式
本帖最后由 思维百宝箱 于 2023-4-20 19:41 编辑

例如我在C3~V3之间是1~20的数,我希望在C6~G6中,在上面的数值中随机出5个数(不能重复),在C7~G7中也随机出5个数,在C8~G8中也随机出5个数,在C9~G9中也随机出5个数,最后将这4行随机的20个数(4行,每行5个随机数),在C12这行中列出来,这20个随机数中有同样的数值只出现一次。用VBA能实现吗?谢谢大神啦~
0165200.png

666.zip

7.19 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2023-4-20 07:50 | 显示全部楼层
本帖最后由 liulang0808 于 2023-4-20 07:52 编辑


Sub 按钮1_Click()
    Set d = CreateObject("scripting.dictionary")
    For Each Rng In [c3:v3]
        d(Rng.Value) = ""
    Next Rng
    r = 7
    c = 3
    str1 = ""
    For j = 1 To d.Count
        x = WorksheetFunction.RandBetween(0, d.Count - 1)
        k = d.keys()(x)
        str1 = str1 & " " & k
        Cells(r, c) = k
        d.Remove k
        c = c + 1
        If c = 8 Then
            r = r + 1
            c = 3
            str1 = str1 & Chr(10)
        End If
    Next j
    [c12] = Mid(str1, 2)
End Sub

TA的精华主题

TA的得分主题

发表于 2023-4-20 07:51 | 显示全部楼层
。。。。。。。。。。。。。。。

555.zip

13.37 KB, 下载次数: 11

TA的精华主题

TA的得分主题

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

谢谢你,最后一步可能你误会了,不是把这20个随机数字放在一个单元格内,而是把这20个数放在C行,有重复的数只出现一次,也就是如果有3个8的话,就出现1次就行了,(即如果随机是5,6,7,8,8,8,9,10,在C12显示5,D12显示6,E12显示7,F12显示8,G12显示9,H12显示10)可以再修改一下吗?麻烦你了

TA的精华主题

TA的得分主题

发表于 2023-4-20 10:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-4-20 10:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
思维百宝箱 发表于 2023-4-20 10:29
谢谢你,最后一步可能你误会了,不是把这20个随机数字放在一个单元格内,而是把这20个数放在C行,有重复的数 ...

楼主这个就是简单去重既可以了吧
5楼结果是放在C列,供参考吧

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-20 16:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liulang0808 发表于 2023-4-20 10:57
楼主这个就是简单去重既可以了吧
5楼结果是放在C列,供参考吧

大神,可能是我描述得不够好吧,有空的话再研究一下。是这样的,1~20的数我希望是随机出现,4行,每行5个随机数可以重复,你给我的文档是没有重复的,刚好是1~20了,然后把这随机出现的20个数在下面的某一行排出来,随机中有重复的只排一次就行了

TA的精华主题

TA的得分主题

发表于 2023-4-20 16:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
思维百宝箱 发表于 2023-4-20 16:39
大神,可能是我描述得不够好吧,有空的话再研究一下。是这样的,1~20的数我希望是随机出现,4行,每行5 ...

建议楼主结合附件描述下具体需求:
原始数据是怎么来的,要怎么处理,模拟出具体结果

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-20 16:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 思维百宝箱 于 2023-4-20 18:59 编辑
liulang0808 发表于 2023-4-20 16:42
建议楼主结合附件描述下具体需求:
原始数据是怎么来的,要怎么处理,模拟出具体结果

我在论坛里面找到一个随机的了,修改了一下可以用了,按F9就能随机刷新,剩下最后一步还是需要大神帮忙一下,就像我现在这个截图,加粗的这20个是随机数,然后希望是23这行,从C23开始把这个随机数按顺序显示一下,就是C23是2,D23是3(3重复了,只显示一次),E23是4,F23是6,以此类推,可以吗?我更新一下文件和图片吧

TA的精华主题

TA的得分主题

发表于 2023-4-20 19:12 | 显示全部楼层
  1. Sub test()
  2.     Dim r%, i%
  3.     Dim arr, brr
  4.     Dim d As Object
  5.     Set d = CreateObject("scripting.dictionary")
  6.     Randomize Timer
  7.     With Worksheets("sheet1")
  8.         arr = .Range("b2:b21")
  9.         ReDim brr(1 To 5, 1 To 4)
  10.         For i = 1 To UBound(brr)
  11.             For j = 1 To UBound(brr, 2)
  12.                 n = Int(Rnd() * UBound(arr)) + 1
  13.                 brr(i, j) = arr(n, 1)
  14.                 d(brr(i, j)) = Empty
  15.             Next
  16.         Next
  17.         crr = d.keys
  18.         For i = 0 To UBound(crr) - 1
  19.             p = i
  20.             For j = i + 1 To UBound(crr)
  21.                 If crr(p) > crr(j) Then
  22.                     p = j
  23.                 End If
  24.             Next
  25.             If p <> i Then
  26.                 temp = crr(i)
  27.                 crr(i) = crr(p)
  28.                 crr(p) = temp
  29.             End If
  30.         Next
  31.         .Range("c4").Resize(UBound(brr), UBound(brr, 2)) = brr
  32.         .Rows(23).ClearContents
  33.         .Range("a23").Resize(1, UBound(crr)) = crr
  34.     End With
  35.                
  36. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-27 22:20 , Processed in 0.043616 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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