EXCEL中随机抽样,要求输入一个数字如256从中随机抽取百分之十的数字,即27个数字,在1-10中抽取1个
答案:4 悬赏:70 手机版
解决时间 2021-03-16 04:12
- 提问者网友:且恨且铭记
- 2021-03-15 10:17
EXCEL中随机抽样,要求输入一个数字如256从中随机抽取百分之十的数字,即27个数字,在1-10中抽取1个
最佳答案
- 五星知识达人网友:傲气稳了全场
- 2021-03-15 11:42
你输入的这个数字,跟你随机抽取的这个范围比如256有什么关系?是不是你输入10000,你就要从1到10000抽取1000个随机数字?还是每次不能重复?追问从10000里抽1000个数字,1-10一个,11-20一个....9990-10000一个,,就是想平均点而且这样取肯定没重复的。上面那个是240-256中取两个所以要求不重复追答相当有难度啊,我有空了帮你想想,因为你这个输入的数据不定,随机取的数字也就可能量很大追问(⊙o⊙)嗯,谢谢啊!追答好了,你要抽入的范围如256写在 A1,把我的代码复制到VBA编辑器里,插入一个按钮指定代码,然后不停的点按钮就可以看见数字是随机变的,都显示在B列 从以10为单位的范围内返回
Sub rr()
Dim i%, k%, j%, a%, arr()
For i = 1 To Int(Range("a1") / 10) + 1
a = Int(Rnd() * 10 + 1) + (i - 1) * 10
ReDim Preserve arr(1 To i)
arr(i) = a
Next
If arr(UBound(arr)) > Range("a1") Then arr(UBound(arr)) = Range("a1")
Range("b1").Resize(UBound(arr), 1) = Application.Transpose(arr)
End Sub追问这个取数可以四舍五入么?就是300就是取的30个,306就是取31个,这个方法300也是取31个,请问要怎么修改呢?谢谢追答Sub rr()
Dim i%, a%, arr()
Range("b:b").ClearContents
For i = 1 To Application.Round(Range("a1") / 10, 0)
a = Int(Rnd() * 10 + 1) + (i - 1) * 10
ReDim Preserve arr(1 To i)
arr(i) = a
Next
If arr(UBound(arr)) > Range("a1") Then arr(UBound(arr)) = Range("a1")
Range("b1").Resize(UBound(arr), 1) = Application.Transpose(arr)
End Sub追问恩恩,,很好,问下如果要求进一怎么修改,就是300还是取30,,301就取31个,,大神,,快成功了- -求帮忙,再顺便问一下Range("b:b").ClearContents这一句是什么作用追答只需要把round 改成roundup就行了嘛,那一句是清空B列的,如果没有这一句你第一A1的数字是300,下次变成100了,11行以后的数字还是300的,所以必须要运行程序的时候清空B列
Sub rr()
Dim i%, a%, arr()
Range("b:b").ClearContents
For i = 1 To Application.RoundUp(Range("a1") / 10, 0)
a = Int(Rnd() * 10 + 1) + (i - 1) * 10
ReDim Preserve arr(1 To i)
arr(i) = a
Next
If arr(UBound(arr)) > Range("a1") Then arr(UBound(arr)) = Range("a1")
Range("b1").Resize(UBound(arr), 1) = Application.Transpose(arr)
End Sub追问额,,试验了下,发现个小问题- -比如301的时候301必然出现- -能不能就是不能整除的时候是290-301取两个数,如你输入301-309的时候都是290-这个数之间取两个数- -话说能加下联系方式么?我QQ:523148248,求大神指导追答你这样可能会取重复的,290-300是是一个段,300-301还是 290-301,有重复区域,我现在的程序是,当是301~309之间的时候 比如:306吧 ,上边算式取出的数字可能超过306,这个时候我就让大于306的数字返回306!我感觉比你所说的合理追问额,,我是说本来290-300不是一个段么?如果输入的数不是整数如301,那前面都一样,280-290取一个然后290-301取两个,因为301就一个数这样出现的概率就是100%了,,所以我想把301放到前面一段然后直接从前面一段取两个数字。这样可以做到么?谢谢追答你真是变化多端啊
Sub rr()
Dim i%, a%, arr(), b%, c%, d%
Range("b:b").ClearContents
For i = 1 To Int(Range("a1") / 10)
a = Int(Rnd() * 10 + 1) + (i - 1) * 10
ReDim Preserve arr(1 To i)
arr(i) = a
Next
line:
b = arr(UBound(arr)) Mod 10
c = (Range("a1") - (UBound(arr) - 1) * 10) * Rnd() + 1
d = (UBound(arr) - 1) * 10
If b = c Then
GoTo line
Else
ReDim Preserve arr(1 To UBound(arr) + 1)
arr(UBound(arr)) = c + d
End If
Range("b1").Resize(UBound(arr), 1) = Application.Transpose(arr)
End Sub
Sub rr()
Dim i%, k%, j%, a%, arr()
For i = 1 To Int(Range("a1") / 10) + 1
a = Int(Rnd() * 10 + 1) + (i - 1) * 10
ReDim Preserve arr(1 To i)
arr(i) = a
Next
If arr(UBound(arr)) > Range("a1") Then arr(UBound(arr)) = Range("a1")
Range("b1").Resize(UBound(arr), 1) = Application.Transpose(arr)
End Sub追问这个取数可以四舍五入么?就是300就是取的30个,306就是取31个,这个方法300也是取31个,请问要怎么修改呢?谢谢追答Sub rr()
Dim i%, a%, arr()
Range("b:b").ClearContents
For i = 1 To Application.Round(Range("a1") / 10, 0)
a = Int(Rnd() * 10 + 1) + (i - 1) * 10
ReDim Preserve arr(1 To i)
arr(i) = a
Next
If arr(UBound(arr)) > Range("a1") Then arr(UBound(arr)) = Range("a1")
Range("b1").Resize(UBound(arr), 1) = Application.Transpose(arr)
End Sub追问恩恩,,很好,问下如果要求进一怎么修改,就是300还是取30,,301就取31个,,大神,,快成功了- -求帮忙,再顺便问一下Range("b:b").ClearContents这一句是什么作用追答只需要把round 改成roundup就行了嘛,那一句是清空B列的,如果没有这一句你第一A1的数字是300,下次变成100了,11行以后的数字还是300的,所以必须要运行程序的时候清空B列
Sub rr()
Dim i%, a%, arr()
Range("b:b").ClearContents
For i = 1 To Application.RoundUp(Range("a1") / 10, 0)
a = Int(Rnd() * 10 + 1) + (i - 1) * 10
ReDim Preserve arr(1 To i)
arr(i) = a
Next
If arr(UBound(arr)) > Range("a1") Then arr(UBound(arr)) = Range("a1")
Range("b1").Resize(UBound(arr), 1) = Application.Transpose(arr)
End Sub追问额,,试验了下,发现个小问题- -比如301的时候301必然出现- -能不能就是不能整除的时候是290-301取两个数,如你输入301-309的时候都是290-这个数之间取两个数- -话说能加下联系方式么?我QQ:523148248,求大神指导追答你这样可能会取重复的,290-300是是一个段,300-301还是 290-301,有重复区域,我现在的程序是,当是301~309之间的时候 比如:306吧 ,上边算式取出的数字可能超过306,这个时候我就让大于306的数字返回306!我感觉比你所说的合理追问额,,我是说本来290-300不是一个段么?如果输入的数不是整数如301,那前面都一样,280-290取一个然后290-301取两个,因为301就一个数这样出现的概率就是100%了,,所以我想把301放到前面一段然后直接从前面一段取两个数字。这样可以做到么?谢谢追答你真是变化多端啊
Sub rr()
Dim i%, a%, arr(), b%, c%, d%
Range("b:b").ClearContents
For i = 1 To Int(Range("a1") / 10)
a = Int(Rnd() * 10 + 1) + (i - 1) * 10
ReDim Preserve arr(1 To i)
arr(i) = a
Next
line:
b = arr(UBound(arr)) Mod 10
c = (Range("a1") - (UBound(arr) - 1) * 10) * Rnd() + 1
d = (UBound(arr) - 1) * 10
If b = c Then
GoTo line
Else
ReDim Preserve arr(1 To UBound(arr) + 1)
arr(UBound(arr)) = c + d
End If
Range("b1").Resize(UBound(arr), 1) = Application.Transpose(arr)
End Sub
全部回答
- 1楼网友:三千妖杀
- 2021-03-15 15:11
我的天啊好复杂啊 你去 百度学学教程
- 2楼网友:英雄的欲望
- 2021-03-15 13:41
如果允许用宏的话 留下联系方式 给你发个样本追问QQ:523148248,谢谢追答加了 发个信息给我
- 3楼网友:深街酒徒
- 2021-03-15 13:21
在a1到a1000分别输入1到1000连续的自然数
在b1输入:
=RAND()
然后下拉到b1000单元格。
在d1输入:
=IF(INT(C$1/10)
下拉到d100单元格。
然后在c1输入任意1000以内的数值后,在d列均会随机抽取出10%的随机的不重复的数值。
如果你需要更多的数值,则将a、b、d列分别响应的下拉行数就可以了。追问能像我说的那样1-10取一个,11-20取一个......如果不整除240-256取两个,就是取样的结果相对平均点,这样可以做到么?追答=IF(INT(c$1/10)
改好了。你试试追问额,,D行超过D10的后面都显示不出来,,前面的好像都对的,可以修改么?谢谢追答看了你对其他回答人的追问后。改了一下函数。支持四舍五入,支持个位数为1至4时,包含这些数。
在b1输入:
=IF(ROUND(A$1/10,0)0),INT(RAND()*11),0))
然后下拉。
在a1输入任意数后,在b列就能得到你需要的数。追问恩,别的功能都可以,那个四舍五入能改为进一么?就是251也是26个数字,O(∩_∩)O谢谢追答不会呀。你再确认一下吧。我自己试过,在输入245到254的时候,均只显示25个数。
你不会是要输入251的时候,显示的是26个数字吧?如果是这样,要四舍五入干嘛呢?如果你要的是这个。用下面的公式:
=IF(ROUNDUP(A$1/10,0)|
在b1输入:
=RAND()
然后下拉到b1000单元格。
在d1输入:
=IF(INT(C$1/10)
然后在c1输入任意1000以内的数值后,在d列均会随机抽取出10%的随机的不重复的数值。
如果你需要更多的数值,则将a、b、d列分别响应的下拉行数就可以了。追问能像我说的那样1-10取一个,11-20取一个......如果不整除240-256取两个,就是取样的结果相对平均点,这样可以做到么?追答=IF(INT(c$1/10)
在b1输入:
=IF(ROUND(A$1/10,0)
然后下拉。
在a1输入任意数后,在b列就能得到你需要的数。追问恩,别的功能都可以,那个四舍五入能改为进一么?就是251也是26个数字,O(∩_∩)O谢谢追答不会呀。你再确认一下吧。我自己试过,在输入245到254的时候,均只显示25个数。
你不会是要输入251的时候,显示的是26个数字吧?如果是这样,要四舍五入干嘛呢?如果你要的是这个。用下面的公式:
=IF(ROUNDUP(A$1/10,0)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯