Excel中,如何随机返回一个值,从已有的数组里,如从(value1,value2,value3,value4,value5,value6....)中取一
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel中,如何随机返回一个值,从已有的数组里,如从(value1,value2,value3,value4,value5,value6....)中取一相关的知识,希望对你有一定的参考价值。
Excel中,如何随机返回一个值,从已有的数组里,如从(value1,value2,value3,value4,value5,value6....)中随机取一个值.
用RAND函数,随机从1-n当中取值,然后就用函数返回数组元素n的值,就可以了。追问可以具体写一下吗?
追答那你要先给出你的代码,我才好给你改。如果让我给你写,未必满足你的要求啊。
你是打算用公式还是用VBA?
你是自己有了代码不知道怎么随机取数还是根本没有代码?问题描述要详细些才好回答。
我有个思路是这样的.
有两个表,表1,表2
表2有两列内容如下:
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
现在在表1某列里,用vlookup函数随机调取表2的内容.
我不会怎么写这个函数.
vlookup我不是很会用,大概这样
vlookup(int(rand()*10+1),x,2,z)
x和z代表区域和T/F
但该具体怎么写?
=INDIRECT("Sheet2!A"&TEXT(RAND()*(COUNT(Sheet2!A:A)-1)+1,0%))
假如你在Sheet1中输入这个公式,这个公式的作用就是从Sheet2的A列中所有的数里面随机选取一个了。
如果你想要选取其他列的,比如B列,那就把公式中的A都替换成B。
如果你要选取的不是数字而是文字,那就把公式里面的COUNT换成COUNTA,但是如果你有表头就比较麻烦了,需要根据具体表格形式再做处理。
这么选出来的随机数是平均分布的,可能有重复,如果你不想重复还要更复杂的处理。
你要是想在Sheet1的A列选择Sheet2的A列的任意数据,那就把这个公式复制到Sheet1的A1中,然后向下拖动,Sheet2的A列有多少数据,你在Sheet1的A列中就拖动到多少行,就可以整列都随机选取了。
有多少数值,x就换成多少。
如何使用范围中的随机值填充数组? (重复没问题。)
我是C ++的新手,我有一个数组操作的问题。我有一个长度为100的X数组,我需要随机填充整数值为1到10(1,2,3,4,5,6,7,8,9,10)的X值。我知道会有重复,也许就像打印十次一样,但这真的是我想要的。
这是我有的:
一个X数组:
int X[100];
这是我的代码片段:
int* X = NULL;
int* val = NULL;
int length1= 100;
int length2= 10;
X = new int[length1];
val = new int[length2];
int i;
int j;
for (i = 0; i < isi; i++) {
val[i] = i;
for (j = 0; j < length1; j++) {
if (j > i) {
X[j] = val[i];
} else {
X[j] = val[0];
}
cout << "X[" << j << "] = " << X[j] << "
";
Sleep(1);
}
}
上面的代码使得从索引0到99的数组X的值为0,然后索引0到99的值为1,因此另一个索引直到索引0到99的值为9。
这不是我想要的,我想要的是它(如果它不是随机的)索引0到9的值为0,那么10到19的值为1 ......直到索引90到99的值为9希望我的解释清楚。
我在stackoverflow中遇到了一个问题:How would you make an array of 10000 with only values of 1-1000 inclusive?
但仍然无法解决我自己的问题。有人可以给我解决这个问题。
先感谢您
以下是解决此问题的两种方法 - 由于这是一种学习体验,因此仅提供伪代码(和相关链接)。可以单独查找和解决每个“任务”。请注意,这两种方法都不使用辅助数组。
如果最终结果中每个数字的数量不需要相同(例如,2可能出现17次),那么请考虑以下循环和分配随机方法。每个循环的标准C就足够了。
# for every index pick a random value in [0, 10) and assign it
for i in 0 to last array index:
array[i] = random in range 0, 10
如果数量需要相同,那么考虑填充数组然后将其洗牌。 modulus operator在这里非常方便。 (这假设数组长度是组大小的倍数。)
# fill up array as 0,1,2,3,4,5,6,7,8,9,0,1,2.. (will be 10 groups)
for i in 0 to last array index:
array[i] = i % 10
# and randomly rearrange order
shuffle array
对于shuffle,请参阅Fisher-Yates,它甚至显示了C实现 - 有"more C++" ways,但这是一个学习和练习循环的好方法。 (关于Fisher-Yates的一个很酷的属性是,一旦项目被交换到当前索引,它就在最终交换位置 - 因此可以修改随机循环以随机播放并立即执行诸如显示值之类的操作。)
在这两种情况下都应该使用random function;否则数字不会是......随机的。
#include <stdlib.h>
int main(int argc, char **argv) {
int r[100];
for (int i = 0; i < 100; ++i) {
r[i] = rand() % 10 + 1;
}
}
对于某些输出,您可以在每次分配后在循环内部使用#include <iostream>
然后使用std::cout << "r[" << i << "] = " << r[i] << "
"
。
如果你想每次为不同的序列播种随机数生成器,那么在你第一次调用#include <time.h>
之前srand(time(NULL))
然后是rand
。
你也可以使用generate
函数:
#include <iostream>
#include <algorithm>
#include <random>
using namespace std;
int main()
{
int arr[100];
random_device rd;
default_random_engine dre(rd());
uniform_int_distribution<int> uid(0,9);
generate(arr, arr + sizeof(arr) / sizeof(int), [&] () { return uid(dre); });
for (int a : arr)
cout << a << " ";
}
要遍历集合的项目,最自然的C ++循环是基于循环的范围。
为了给每个项目分配一些东西,正式的项目名称应该是一个参考,因此:
for( auto& item : X )
{
// E.g. assign to item here.
}
这将按顺序提供数组中的每个项目到由注释标记的代码。
C ++中有两个不同的随机生成器,旧的C库一个,它只是一对函数,而且更通用,更现代但也不那么容易理解C ++ 11的东西。我建议你谷歌并尝试一下。如果/何时卡住,请询问新的更具体的问题。
我认为其他人已经指出了,但你必须首先编写预编译器指令#include <ctime>
然后使用srand函数。大多数人会说不要使用它,但由于你和我在基础知识上,我们的老师分别开始使用它。它也可能适用于您的编译器。这是一个链接,可以了解更多相关信息。我会评论,但我不能。 http://www.cplusplus.com/reference/cstdlib/srand/
以上是关于Excel中,如何随机返回一个值,从已有的数组里,如从(value1,value2,value3,value4,value5,value6....)中取一的主要内容,如果未能解决你的问题,请参考以下文章