以文本方式查看主题

-  易表在线答疑  (http://egrid2000.com/dvbbs/index.asp)
--  精华分享  (http://egrid2000.com/dvbbs/list.asp?boardid=12)
----  如何筛选名次列两头的数据?(小吴原创)  (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=12&id=998)

--  作者:喜爱易表
--  发布时间:2006/8/14 21:57:00
--  如何筛选名次列两头的数据?(小吴原创)
[操作技巧]如何筛选名次列两头的数据?

(本技巧原创人:小吴、渔斑竹、喜斑竹)

利用易表的Filterfor函数实现复杂的筛选功能其实已经比较完善了,但有时遇到一些比较特殊的要求时,仅靠Filterfor还是难以完全满足要求,比如有这样一个要求:

某表里有一列名次列,数值型,其中填写的都是数字,这些数字可能有重复并可能不连续(例如班级考试排名,会有3个第3个名,后面紧接着就是第6名,即跳过了4、5);如果我要一次筛选出其中的前10名和后10名该如何做呢?由于存在前面提到的名次并列问题,那么筛选前10名或后10名就可能不会各只有10行数据。

其实,我们利用一个变量和一个辅助列,同样可以通过使用Filterfor来实现这种“掐头取尾去中间”的筛选,下面详细操作方法:

1、为文件新增一个变量:%a%;

2、设计表:一列名为“名次”,另一列名为“辅助列”,均为数值型;将辅助列的公式设置为:if(row=firstrow,1,if(cell(row,"名次")=cell(row-1,"名次"),cell(row-1,col),cell(row-1,col)+1))

3、辅助列公式解析:实际上对名次列的数字给出真实的排名,对于名次列中2个连续相同的2个数字会给出同一排名,而下一数字的排名则继续上面的排名,如下图:

egd文件下载


另外,易表.net自 10.3 Build 1311起增加了一个函数——HideRowsfor,用它就可以更方便地实现上面的筛选要求,其使用方法这里就不具体讲了,基本和Filterfor一样。对于上面的例子,可以考虑利用HideRowsfor隐藏名次大于10,小于最大名次-9就记录就可以了。