设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 6818|回复: 13
打印 上一主题 下一主题

[基础应用] [再求助]如何用Excel进行抽签

[复制链接]
跳转到指定楼层
1#
发表于 2005-6-15 00:15:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  请教各位高手一个如何抽签的问题,例如有20个人的姓名,编号从1到20,如何让其自动重新排序,号码变成随机而定(就是原来的10号现在可能变成5号,15号变成了19号,余类推,总数还是20。)大概就是这个意思,希望会的朋友不吝赐教!!!

  万分感谢!!!

[此贴子已经被作者于2005-6-14 21:04:13编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
14#
发表于 2006-11-18 03:49:00 | 只看该作者
将以下代码复制到模块中,可以当函数使用.

Option Explicit
Function RANGERANDOMIZE(rng)
    Dim V() As Variant, ValArray() As Variant
    Dim CellCount As Double
    Dim i As Integer, j As Integer
    Dim r As Integer, c As Integer
    Dim Temp1 As Variant, Temp2 As Variant
    Dim RCount As Integer, CCount As Integer
    Randomize
   
'   Return an error if rng is too large
    CellCount = rng.Count
    If CellCount > 1000 Then
        RANGERANDOMIZE = CVErr(xlErrNA)
        Exit Function
    End If
   
'   Assign variables
    RCount = rng.Rows.Count
    CCount = rng.Columns.Count
    ReDim V(1 To RCount, 1 To CCount)
    ReDim ValArray(1 To 2, 1 To CellCount)


    For i = 1 To CellCount
        ValArray(1, i) = Rnd
        ValArray(2, i) = rng(i)
    Next i

    For i = 1 To CellCount
        For j = i + 1 To CellCount
            If ValArray(1, i) > ValArray(1, j) Then
                Temp1 = ValArray(1, j)
                Temp2 = ValArray(2, j)
                ValArray(1, j) = ValArray(1, i)
                ValArray(2, j) = ValArray(2, i)
                ValArray(1, i) = Temp1
                ValArray(2, i) = Temp2
            End If
        Next j
    Next i
   
    i = 0
    For r = 1 To RCount
        For c = 1 To CCount
            i = i + 1
            V(r, c) = ValArray(2, i)
        Next c
    Next r
    RANGERANDOMIZE = V
End Function
13#
发表于 2006-11-17 21:07:00 | 只看该作者
研究ing
12#
发表于 2005-6-18 04:26:00 | 只看该作者

HELLO



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
11#
发表于 2005-6-18 04:19:00 | 只看该作者

看一看

实际例子
10#
发表于 2005-6-17 07:24:00 | 只看该作者
你用了两个公式,可8楼只有一个公式,哪个效率高一目了然啊。何况,rank()函数也会有重复的啊,比如并列第5,呵呵
9#
 楼主| 发表于 2005-6-16 23:23:00 | 只看该作者
这样可以,但不是很理想,我试了一下,这样是否好些?辅助列, D1输入公式, 下拖至D20 :=RAND()



C1输入公式, 下拖至C20 :=RANK(D1,$D$1D$20)

8#
发表于 2005-6-16 07:54:00 | 只看该作者
为什么非得产生1-20的不重复的随机数呢?虽然使用VBA代码很容易。使用一个变通的办法其实真的很简单。6楼的办法是一个。下面是另一个,只是不使用Row()而已添加一个C列,填充1-20添加一个D列,=rand()对D列排序,这样无论D列里是否有重复,但在C列中,事实上就成了1-20不重复的随机数了,明白吗?
7#
 楼主| 发表于 2005-6-16 05:09:00 | 只看该作者
试了一下,还是不行,有没有这样的函数:在一列20个单元格内,随机产生1至20不重复的20个数字。?
6#
发表于 2005-6-16 03:33:00 | 只看该作者
有一个很简单的办法:第一列(A列)的序号使用row()函数自动生产,添加一个辅助列C列使用rand()函数产生随机数并在此排序,这样,B列的姓名会因为C列变化而变化,但A列却因为row()函数而不会发生变化,毅然是123456……的顺序。为了表格美观,可以隐藏c列。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-22 04:07 , Processed in 0.113802 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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