首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从列表中随机挑选名字

从列表中随机挑选名字
EN

Stack Overflow用户
提问于 2017-07-12 22:31:13
回答 3查看 89关注 0票数 1

我正在尝试使用一个公式,它将允许我从355个名字的列表中随机选择183个名字。我的excel表单将如下所示:

代码语言:javascript
复制
Names  Random.Names

Paty     
Oscar
John
Anna
Jane
Carlos
Maria
Jennifer
Susan
Kayla

在我的实际工作表上,我有更多的名字,但这只是一个例子。我使用了以下公式,但我有几个单元格在随机化后显示#REF。

代码语言:javascript
复制
=IF(ROWS($1:1)>$E$2,"",INDEX($A$8:$A$355,RANDBETWEEN(1,354)))

如果你有更好的配方,或者你知道我做错了什么,请让我知道。

EN

回答 3

Stack Overflow用户

发布于 2017-07-12 22:37:36

这是因为索引是相对的,所以第8行是1,第355行是355-8+1 = 348。将RANDBETWEEN更改为1,348

任何大于引用单元格数量的操作都会产生错误。

代码语言:javascript
复制
=IF(ROWS($1:1)>$E$2,"",INDEX($A$8:$A$355,RANDBETWEEN(1,348)))

或者您可以引用整个列并使用8,355:

代码语言:javascript
复制
=IF(ROWS($1:1)>$E$2,"",INDEX($A:$A,RANDBETWEEN(8,355)))
票数 0
EN

Stack Overflow用户

发布于 2017-07-12 22:38:02

您没有介于A8A355之间的355个名称,只有355-8+1。

因此,修复RANDBETWEEN()

票数 0
EN

Stack Overflow用户

发布于 2017-07-13 03:45:55

遵循我的previous anwser的逻辑

您只需打开VBA编辑器并粘贴以下代码:

代码语言:javascript
复制
  'By Julio Jesus Luna Moreno
'jlqmoreno@gmail.com
Option Base 1
Public Function UNIQRAND(a As Variant, b As Variant) As Variant
 Application.Volatile
 Dim k%, p As Double, flag As Boolean, x() As Variant
    k = 1
  flag = False
  ReDim x(1)
   x(1) = Application.RandBetween(a, b)
  Do Until k = b - a + 1

   Do While flag = False
   Randomize
    p = Application.RandBetween(a, b)
     'Debug.Assert p = 2
    resultado = Application.Match(p, x, False)
     If IsError(resultado) Then
      k = k + 1
      ReDim Preserve x(k)
      x(k) = p
       flag = True
      Else
       flag = False
      End If
   Loop
   flag = False
  Loop
  UNIQRAND = x
End Function

此函数将完成此任务

代码语言:javascript
复制
Public Function RANDNAMES(Rango As Range, HowMany As Integer) As Variant
 Dim n, p(), x(), i As Variant
  n = Rango.Rows.Count
   If n < HowMany Then
    MsgBox "Number of pairs must be less than number of total elements"
     Exit Function
   End If
   ReDim x(HowMany)
   ReDim p(n)
     p = UNIQRAND(1, n)
   For i = 1 To HowMany Step 1
    x(i) = Application.Index(Rango, p(i))
      Next i
       Debug.Print HowMany
    RANDNAMES = Application.Transpose(x)

End Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45060592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档