受版主委托,这个问题我代为答复。那个帖子里面例子较多,我们现在先只以第一个附件中的公式为例。公式如下: =IF(time>16,RIGHT(B4,time-16)&REPT(" ",16)&LEFT(B4,LEN(B4)-time+16),front&B4&back) 公式中的time、front、back均为定义名称,各自定义的公式如下: time=MOD(INT((NOW()-Sheet1!$B$1)*1000000),31) front=REPT(" ",time) back=REPT(" ",16-time) 先看第一个time的公式,now()是取得现在目前的系统时间,以现在6月26日下午15:23分左右为例,返回的数字是38894.64112。Sheet1!$B$1里面原有一个过去的时间值作为基准时间(B1单元格使用颜色进行了隐藏)。now()-B1的结果就是就是一个随时间不断变大的数字,之所有不直接用now(),是因为原有数字较大,减去一个基准时间后数字位数变小更宜操作(如果是大数字碰到mod函数你就知道有麻烦了)。 然后上面的结果去乘以1000000再int取整,其结果就是返回一个以十分之一秒级别的速度变化的数字。然后再用mod函数使得这个数字的变化范围限定在0~30之间。其中30就是这个滚动字符串的最大显示长度。 front公式的意思需要先理解REPT函数,rept是重复某个字符的意思,第一个参数是需要复制的字符,第二个参数是需要复制的次数。这个公式的含义就是重复time个空格的意思。随着time的数值在0~30之间变化,空格也由少变多。 back公式的意思与上面类似,所不同的是,复制的空格在time小于等于16的情况下随time增大空格减少。 我们最后来看第一个显示滚动效果的公式,公式可以分为两部分看: 一部分是当time<=16时,公式为front&B4&back,B4单元格为需要显示的文本字符串,例子中就是"我爱EXCELHOME俱乐部",front就是在这个文本之前需要的空格,back就是需要加在文本之后的空格,他们好比两个抬轿子的人,抬着中间的"我爱EXCELHOME俱乐部"这几个字在走。随着time随时间流动而变大,前面的空格增多,后面的空格减少,形成的效果就是文字部分在随时间向右移动。 第二部分是当time>16时,公式为RIGHT(B4,time-16)&REPT(" ",16)&LEFT(B4,LEN(B4)-time+16),这部分也好理解,当time>16的时候,也就是文本字符串的最后一个字"部"已经走到了边框的最右端,接下来需要把这个字符串拆分开来,一部分字符显示在最左边,另一部分显示在最右边,这样形成的效果才是文字滚屏出现的效果。所以right函数和left函数分别拆分了字符串的末尾和开头,分别显示在边框的左边和右边,中间就是固定的16个空格。随time变化,拆分出来的内容也随之变化,形成运动的效果。 好了,我只能解释到这里了,相信大多数人都能明白了吧。其实这个例子函数应用并不困难,想到一般都能做到,只是需要稍微有些创意而已。
[此贴子已经被作者于2006-6-26 15:53:35编辑过] |