以文本方式查看主题 - 易表在线答疑 (http://egrid2000.com/dvbbs/index.asp) -- 精华分享 (http://egrid2000.com/dvbbs/list.asp?boardid=12) ---- 多条件多范围筛选(不用Loop版)(小吴原创) (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=12&id=1011) |
-- 作者:喜爱易表 -- 发布时间:2006/8/16 19:20:00 -- 多条件多范围筛选(不用Loop版)(小吴原创) 我们在易表中设计查询功能通常都是利用FilterFor函数,再结合变量,基本可以完成大部分较简单的查询任务。虽然FilterFor可以设置多组比较条件(每组CompareCol,CompareMode,CompareValue为一组条件),但只能筛选出满足所有设置的条件的记录; 可是我们经常会遇到需要一次筛选出多个不相干的记录,甚至需要同时筛选出几个范围,比如,一个表里有100行数据,编号为1-100,我们需要一次筛选出编号为1,3,5,7,9,45~66,82~97的记录,那我们该如何做呢? 下面,详细讲解一个可以一次完成筛选任意多个盘号,5组盘号范围的例子的制作过程(每个待查盘号和盘号范围之间都要用英文逗号“,”隔开,查询范围的起始值和截止值前后都用分页符“|”隔开): 1、新建一个文件; 2、设置2列,列名分别为【盘号】、【辅助列】,【盘号】列为数值型,【辅助列】为逻辑型,然后利用编辑菜单中的智能填充→等差填充,将【盘号】列填上1~100(辅助列以后可以隐藏起来); 3、设置如下11个变量: 4、设计筛选窗口,在窗口上插入变量%欲查盘号%,再插入一个自定义按钮; 5、设置辅助列的刷新公式:If(Instr("," + Text([盘号]) + ",","," + [%欲查盘号%] + ",") >= 0, - 1,0) 6、设置筛选窗口上自定义按钮的公式: 7、解析自定义按钮的公式: ●第1行为显示所有行并重算当前表然后筛选辅助列打勾的记录;(这一步中的重新计算实际上就是计算上面第5步中设置的辅助列的刷新公式) ●接下来的10行SetVariable就是对最初设置的10个变量进行赋值,前面说过,每组查询范围是用分页符隔开,所以对变量赋值是就利用Split分割变量%欲查盘号%。 大家注意看一下:10个赋值语句中Split函数的Position参数依次为:2,3,5,6,8,9,11,12,14,15,为什么会是这样跳跃的呢? 其实,上面的10次赋值就是在数分割符“|”,因为我们这个例子中筛选盘号和盘号范围可以任意交错,为避免计算机无法识别,盘号范围得用“|”隔开,如范围10~15在我们这个例子里就得写为:“|10|15|”; 那么第一句赋值语句:SetVariable("%起始盘号1%",Split([%欲查盘号%],"|",2))的作用就是将变量%欲查盘号%中第一个分隔符“|”后面的内容赋值给变量%起始盘号1% 第三句赋值语句中Split函数的Position参数为5,是因为第一组盘号范围结束的时候还有一个分隔符“|”,所以第二组盘号的起始值应该是当Split函数的Position参数为5时返回的内容,第三个赋值语句就是给变量%起始盘号2%进行赋值的!! ●再往下面的5句筛选应该很好理解吧?就是依次筛选出盘号在5个范围里的记录;需要注意的是,这5句筛选的中用到的FilterFor函数的Option参数都为1,这样做是因为之前已经做过筛选了,Option参数设为1的意义在于“满足本次和之前的筛选条件中的任何一个即可”,这时你再抬头看看上面公式中的第一个FilterFor就没有用Option参数! 8、大功告成!现在,你可以尝试在窗口中筛选:2,6,9,15,19,|34|38|,41,99,28,|88|92|,56,|66|69|,78,100 经验总结: 通过上面的例子,我们可以体会到利用易表实现多个不连续、不相关的编号或编号范围查询其实也不是什么难事! 上面的例子仅支持最多5组盘号范围的查询,其实,要想支持更多,无非就是多设几组变量,多来几次FilterFor就搞定了。 (本方法由lmk斑竹和小吴斑竹合作完成!)
|