阅读(2645) 标签: , string, 表达式,

集算器中的宏,就是用来组成表达式的字符串,只不过这部分字符串通常是动态生成的。宏往往是一个参数的值或是表达式的计算结果。使用时,宏用符号${}括起来,集算器将先计算${…}里的表达式,将计算结果作为宏字符串值替换${}。如:

 

A

B

1

[+,-,*,/]

=A1(rand(4)+1)

2

=rand(1000)

=rand(1000)

3

=A2${B1}B2

 

B1A1的操作符列表中,随机获取一种四则运算符号,A2B2随机生成两个1000以内的整数,在A3中计算四则运算的结果。

B1A2B2中的结果如下:

  

那么,此时A3中即为计算236-393的结果:

其中,${B1}即为宏,使用时根据不同的符号动态拼成表达式。

 

需要注意的是,如果宏用在双引号括起的字符串中,则不会执行宏替换。如:

 

A

B

1

A"+"A

"

2

="aabb${A1}ccdd"

 

3

=${B1}aabb${A1}ccdd"

 

A2中的${A1}没有作用,最终A2中的结果就是引号中的字符串:

而在A3中,将左边的双引号改为另一个宏,此时这两个宏就都不在引号内了,宏是有效的,会被用来拼成表达式="aabbA"+"Accdd",计算后,A3中的结果如下:

从上面的使用中可以看到,宏与字符串参数不同,宏是表达式的一部分,常用在需要动态生成表达式时。

 

宏经常用来根据名称来动态调用不同的单元格值,调用不同的函数,或者动态使用不同参数等,这种需求有时候很难用固定的表达式来实现,使用宏是一种很方便的选择。如:

 

A

B

1

4779736

AL

2

710231

AK

3

6392017

AZ

4

2915918

AR

5

37253956

CA

6

=[A1:A5].pselect(~>5000000)

 

7

=B${string(A6)}

 

A6中,找到第一个人口大于5,000,000的数据所在的行;在A7的表达式中,根据这个行号取出B列中对应的单元格名称,从而获得该州的缩写。需要注意,宏中的表达式必须返回一个字符串,因此在A7中用宏生成单元格名称时,需要用string() 函数将A6中获得的行号转换为字符串。A6A7中的结果如下:

 

 

需要注意的是,如果单元格中使用了宏,只会在第一次解析,因此,宏不适合循环使用,如:

 

A

B

1

4779736

AL

2

710231

AK

3

6392017

AZ

4

2915918

AR

5

37253956

CA

6

=[A1:A5].pselect@a(~>5000000)

 

7

=A6.(B${string(A6.~)})

 

此时,在A6中返回所有人口大于5,000,000的数据所在的行:

A7中,根据A6中的序列循环,试图每次取出对应州的简称,结果如下:

由于宏中的字符只是在第一次解析表达式时置换,因此循环时获得的州简称全都是第一次完成宏替换时计算的结果AZ

 

在使用宏时必须明确,宏是用来生成表达式的,不能用来生成命令语句,如forfunc等。