如何在ExcelA列中(A列是汽车零件)随机选取20个
发布网友
发布时间:2022-04-23 09:12
我来回答
共2个回答
热心网友
时间:2023-08-17 21:36
我也假定A列有50个零件,是从A1到A50,在B列显示随机选取的20个。
我要增加C、D、E三个辅助列,用以显示随机抽取的过程。这个抽取过程综合应用了Excel的公式计算和VBA计算方法,能保证不重复地在50个零件中随机地抽取20个零件。
在D1单元格输入公式:
=COUNTBLANK(C$1:C1)
下拉到D50
D列列出了C列从第一行起到C列与D列同一行的单元格之间的空格数,也就是D列对C列的空单元格从1开始进行连续编号。
VBA程序先在1到50连续的50个数间随机抽取一个数,例如抽到39,则在C39单元格做记号1,并在E1单元格记录39这个数。
VBA程序再在1到49连续的49个数间随机抽取一个数,例如抽到17,则在D列查找第一次出现17的单元格,即C列第17个空白单元格C17所在行,C17单元格做记号1,并在E2单元格记录17这个数。
VBA程序再在1到48连续的48个数间随机抽取一个数,例如抽到4,则在D列查找第一次出现4的单元格,即C列第4个空白单元格C4所在行,C4单元格做记号1,并在E3单元格记录4这个数。
VBA程序再在1到47连续的47个数间随机抽取一个数,例如抽到7,则在D列查找第一次出现7的单元格,即C列第7个空白单元格C8所在行,C8单元格做记号1,并在E4单元格记录8这个数。
如此进行下去,直到在C列记录下20个1,E列记录了C列中1的所在行。
至此VBA程序完成了辅助列C列和E列的制作。
在B1单元格输入公式:
=INDEX(A:A,E1)
下拉至B20
B1:B20记录了从A1:A50随机抽取的20个不重复的零件。
其中的VBA程序是:
Range("C:C").ClearContents
For i1 = 1 To 20
i = Application.WorksheetFunction.RandBetween(1, 51 - i1)
i3 = Application.WorksheetFunction.Match(i, Range("D:D"), 0)
Range("C" & i3).Value = 1
Range("E" & i1) = i3
Next i1
热心网友
时间:2023-08-17 21:37
用INDEX函数可以方便实现。
如果在A中有50个零件,是从A1到A50,那我我可以在B列中来显示随机选取的20个。
首先,先在B1当中输入下面的公式,并回车。
=INDEX(A$1:A$50,INT(50*RAND()+1))
可以看到B1已经随机生成一个数字,然后在向下拖拉B1到B20,就可以在B1到B20当中看到随机的20个了。并且按F9可以更新数据。