ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请老师用VBA,把E列数复制到F列并随机打乱,谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-27 13:39 | 显示全部楼层
还是改一下吧,有重复的也可以

请老师用VBA,把E列数复制到F列并随机打乱,谢谢!.rar

18.84 KB, 下载次数: 7

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-27 16:29 | 显示全部楼层
C2下拉=IF(B2="","",INDEX(B:B,SMALL(IF((COUNTIF(C$1:C1,B$2:B$99)=0)*(B$2:B$99<>""),ROW($2:$99)),RANDBETWEEN(1,COUNTA(B:B)-ROW(A1)))))

E2=SUMPRODUCT(COUNTIF(B:B,C2:C99)*(C2:C99<>""))=COUNTA(B:B)-1
19087.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-27 16:56 | 显示全部楼层
Sub CopyAndShuffle()
    Dim lastRow As Long
    Dim rng As Range
    Dim cell As Range
    Dim tempArr() As Variant
    Dim i As Long, j As Long
    Dim temp As Variant
   
    '找到E列的最后一行
    lastRow = Cells(Rows.Count, 5).End(xlUp).Row
   
    '将E列的数值复制到F列
    Range("E1:E" & lastRow).Copy Destination:=Range("F1:F" & lastRow)
   
    '将F列的数值放入数组
    Set rng = Range("F1:F" & lastRow)
    tempArr = rng.Value
   
    'Fisher-Yates shuffle算法随机打乱数组
    For i = UBound(tempArr, 1) To LBound(tempArr, 1) Step -1
        j = Int((i - LBound(tempArr, 1) + 1) * Rnd + LBound(tempArr, 1))
        temp = tempArr(i, 1)
        tempArr(i, 1) = tempArr(j, 1)
        tempArr(j, 1) = temp
    Next i
   
    '将打乱后的数组值写回F列
    rng.Value = tempArr
End Sub




===========================================
选择 CopyAndShuffle 宏并运行。

EML.rar

11.75 KB, 下载次数: 3

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-27 20:13 | 显示全部楼层
Option Explicit
Sub test1()
    Dim ar
   
    ar = [E1].CurrentRegion.Value
    arrGetRnd1 ar
    [G1].Resize(UBound(ar)) = ar

    Beep
End Sub
Function arrGetRnd1(ByRef ar)
    Dim xNum&, i&, n&, vTemp
    Randomize
    n = UBound(ar)
    For i = 1 To UBound(ar)
        xNum = Int((n - i + 1) * Rnd() + i)
        vTemp = ar(xNum, 1): ar(xNum, 1) = ar(i, 1): ar(i, 1) = vTemp
    Next
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-27 20:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
。。。。。。。。。。

请老师用VBA,把E列数复制到F列并随机打乱,谢谢!.rar

16.76 KB, 下载次数: 7

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-27 21:29 | 显示全部楼层
本帖最后由 一招秒杀 于 2024-6-27 21:33 编辑

当你用第3代码语言要挖空心思设计算法,费尽心机,伤透脑筋,编写调试好几十行代码,第4代语言可能 小半句就够了,只需要 Order By NewID()  就已经完美解决了,还有谁能更简单
第4代语言,让你远离基础技术代码,眼光聚焦于业务逻辑,更高效解决现实问题。
随机排序.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-28 11:38 | 显示全部楼层
一招秒杀 发表于 2024-6-27 21:29
当你用第3代码语言要挖空心思设计算法,费尽心机,伤透脑筋,编写调试好几十行代码,第4代语言可能 小半句 ...

秒杀哥,看看这个问题能不能秒杀吧https://club.excelhome.net/threa ... tml?_dsign=b4004a93

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-28 20:37 | 显示全部楼层
隨機打亂//大搬風.全動..by.准提部林

Sub Test_A1()
Dim Arr, i&, V&, T
Randomize
Arr = Range([e1], [e65536].End(3))
For i = UBound(Arr) - 1 To 1 Step -1
    V = Int(Rnd * i) + 1
    T = Arr(i + 1, 1)
    Arr(i + 1, 1) = Arr(V, 1)
    Arr(V, 1) = T
Next i
[f1].Resize(UBound(Arr)) = Arr
End Sub

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 20:28 , Processed in 0.040076 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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