Excel 中能不能将公式定义为变量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel 中能不能将公式定义为变量?相关的知识,希望对你有一定的参考价值。
=IF(ISNA(VLOOKUP(A1,Sheet2!A1:B39,2,FALSE)),"没有匹配项",VLOOKUP(A1,Sheet2!A1:B39,2,FALSE))大家可以看到,在上面公式中,“VLOOKUP(A1,Sheet2!A1:B39,2,FALSE)”这一部分出现两次。在一些复杂的应用中,公式的某一部分可能会重复很多次。
所以我想问的是:能否将重复的公式在第一次出现时定义为变量,那样在后面只需要书写这个变量名称就行了,公式也会简化很多,可读性也会增强。 补充: VBA写的自定义的函数虽然可以简化公式,但由于安全性问题,默认 Excel 是不启用的,所以不予考虑。 补充: 不锈钢恐龙 的回答不错,不过所定义的名称其作用范围最小是整个工作表,对工作表而言是全局的,我只想让其作用范围是单元格。不过还是给予感谢。此回答作为备选采纳答案。谢谢! 补充: 谢谢不锈钢恐龙,你说的那个我知道。我说的“其作用范围是单元格”意思是所定义的名称只在一个单元格有效。比如还是上面的公式,假定我可以用“AS”来定义名称,则公式就写:
=IF(ISNA(AS(VLOOKUP(A1,Sheet2!A1:B39,2,FALSE),"aaa"),"没有匹配项",aaa)
也就是说:aaa 这个名称只在此单元格有效,其它也可以有这个名称,但代表的意义可能不同,互不相干 补充: -_-# 这个 AS 只是我假定的函数。相当于VBA里的语句(只是示例的语句)
我可以用 AS 函数定义一个 aaa 的变量(假定Excel有这个功能),那么在单元格里就可以使用这个变量。 参考技术A “VLOOKUP(A1,Sheet2!A1:B39,2,FALSE)”可以自定义成一个名称,比如一个字母也可以定义为中文。做法是:ctrl+3,"在当前工作簿中的名称”中输入你要把这个公式的命名,然后“引用位置”中输入,“VLOOKUP(A1,Sheet2!A1:B39,2,FALSE)”确定就行。以后你在这个工作薄要引用这个公式时就直接输入你定义的名称就行了。
C#中能得到随机数的函数是啥啊,怎么才能将随机输出的随机数赋给一个变量?
并且在textbox中显示
主要是怎么在textbox中显示
C#随机函数random()典型用法集锦
Random.Next() 返回非负随机数;
Random.Next(Int) 返回一个小于所指定最大值的非负随机数
Random.Next(Int,Int) 返回一个指定范围内的随机数
1、random(number)函数介绍
见帮助文档,简单再提一下,random(number)返回一个0~number-1之间的随机整数.参数number代表一个整数.
示例:
trace(random(5));
2、Math.random()
见帮助文档。返回一个有14位精度的0~1之间的数,注意没有参数。
示例:
trace(Math.random());
3、自定义的函数
我们有时候需要的随机数可不是这么简单。
比如我们想返回一个有两位小数的随机数,返回两个数之间的随机数,返回字母随机数,返回多个随机数等等,
这些都需要我们自己编写函数来实现。下面的代码直接复制到主场景第一帧就可以调用了。注意有的函数需要入口参数。
#1: 返回一个共有n位数,其中m位是小数的随机数
--------------------------------------------------------------------------------
function randomXiao(n,m)
var a = Math.pow(10, n+m);
var b = random(a);
return b=b/Math.pow(10, m);
--------------------------------------------------------------------------------
可以用trace(randomXiao(3,2));实验一下。这个函数简单。Math.pow(n,m)用于返回一个以n为底,m为指数的数。乘方!
# 2: 返回一个n到m之间的随机数
--------------------------------------------------------------------------------
function randomNm(n,m)
if(m>=n)
return random(m-n+1)+n;
else
return false;
--------------------------------------------------------------------------------
之所以用random(m-n+1)是因为随机数的范围是m-n,加上1使得m也能在里面。加上n保证随机数以n为下限。
加上判断使函数更完整。另外,如果要返回一个负数随机数,也可以用randomNm(n,0);当然,我想更一般的是用-random(n);
# 3: 返回一个字母
--------------------------------------------------------------------------------
function randomAscii()
var c = String.fromCharCode(random(26)+65);
if(random(2))
return c.toLowerCase();
return c;
--------------------------------------------------------------------------------
#4: 返回一个不区分大小写的随机字母
如果要返回大写,把if条件句去掉就行了。如果要返回小写,可以把条件句改为恒成立,或者去掉条件,最后一句改为:
return c.toLowerCase(); String.fromCharCode(number)函数返回number代表数字的ASCII码。
toLowerCase()用于将大写字母转为小写。
# 5: 返回一个n到m之间的k个互异随机数
private void RandomKDiffer(int n, int m, int k, int[] arrayK)
int i = 0;
int a,j;
Random random = new Random();
while (i < k)
a =random.Next(m-n+1)+n;
for (j = 0; j < i; j++)
if (a == arrayK[j])
break;
if (j == i)
arrayK[i] = a;
i++;
数组arrayK中的元素即为所得值。注意到我们借用了random(m-n+1)+n来返回一个n~m的随机数。所以m本身也会被返回。
如果要返回m以内的数,可以把n值改为0。如果要随机返回不确定个数,可以把入口参数的K值赋为k=random(m-n);
随机返回不一定互异的数,把判断去掉就可以了,注意i++不要漏掉。这里不再给出。
#指定若干个字符/数字,然后从中随机返回一个(或多个)字符/数字,可以把原字符赋给一个数组,再根据数组的下标来
决定返回值。这里不再举出函数,大家可以自己尝试。
#另需指出,对于随机设定一个MC的颜色值,我们较多采用mcColor.setRBG(random(0xFFFFFF));下面的例子中会有说明。
如果要指定一个色域,可以采用上面给出的函数。如果对Color对象不太了解的可以查帮助,这里不作讨论。
以上函数算是由random直接衍生的,下面再举个例子,可以说是衍生函数的衍生函数,其中会直接用到上面给出的函数,请注意。
#6: 返回一个指定长度的随机大写英文字符串
function randomString(n)
var arrayA = randomKdiffer(1, 26, n);
var arrayB = "";
for (var i = 0; i < n; i++)
c=String.fromCharCode(arrayA[i]+64);
/* if(random(2))
c=c.toLowerCase();
*/
arrayB = arrayB+c;
return arrayB;
注意到StringCharCode方法,如果要写成小写,则把返回值写成arrayB.toLowerCase();如果返回一个不区分大小写的字符串,
则把注释去掉.如果要返回一个不指定长度的字符串,则可以把入口参数赋值为random(n);这样只指定其上限.此函数也可以用
randomAscii函数实现,留给大家自己思考.
#7:在几个区域中选出随机数
比如,在1~20,45~70这两段数之间选取一个随机数。因为区域数未定,所以直接用一个确定的函数编写多有不便,
我们要使用的方法就是用switch语句进行定向,具体的我们给出一个函数,返回一个1~20,45~70内的数,其它区域读者请自行更改。
function randomArea()
var a=random(2);
switch(a)
case 0:
return randomNm(1,20);break;
case 1:
return randomNm(45,70);break;
注意,我们并没有写入口参数,而是直接在函数中就确定了是两段数,而且范围也是确定的。如果是三段,则改为a=random(3);
同样增加一个case就可以了。当然,你也可以把第段数的范围设为入口参数,这里就不再举例了。但是这样做可能会使参数增多,
我个人是不太喜欢一个需要很多参数的函数的。类似的,我们也可以随机返回一个字母段或几个字母段或者字母加数字段的一个数。
方法也只是前几个函数的一个结合。这里仅举一例,返回指定的大写字母段的一个随机字母。
提醒一下,小写字母的ASCII码a~z分别对应97~122.
function randomAArea(a,b)
if (ord(a) <= ord(b) && 65<=ord(a) && ord(b) <= 90)
return String.fromCharCode(randomNm(ord(a), ord(b)));
else
return false;
其中用到一个函数ord(char),这是一个不推荐的函数.用于返回char字符的ASCII码。
如果大家想在任何地方调用函数,则需要稍稍变一下,把我们写的函数改变为全局函数.这样就可以不用标明路径而自如地向调用系统
函数一样了.方法如下.例如:函数randomXiao如果要声明为全局函数,需要把第一行改为:
_global.randomXiao=function(n,m)
//statment
对全局函数的概念不很清楚的朋友不用被这个名词吓倒.
这样改了函数第一行之后,在任何地方,比如在一个MC里,直接用(对,直接用,不用加_root路径了)randomXiao(n,m)就可以了.
参考资料:http://blog.csdn.net/cxf7394373/archive/2010/05/29/5632312.aspx
参考技术A 方法就是楼上说的,你将返回的随机数赋给textbox即可。textbox1.Text=返回的数。
以上是关于Excel 中能不能将公式定义为变量?的主要内容,如果未能解决你的问题,请参考以下文章
C#中能得到随机数的函数是啥啊,怎么才能将随机输出的随机数赋给一个变量?