易表在线答疑技术与交流精华分享 → 多条件筛选设置浅释(ylm原创)


  共有8487人关注过本帖树形打印复制链接

主题:多条件筛选设置浅释(ylm原创)

帅哥哟,离线,有人找我吗?
喜爱易表
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:天使 帖子:178 积分:0 威望:0 精华:0 注册:2006/8/11 11:09:00
多条件筛选设置浅释(ylm原创)  发帖心情 Post By:2006/8/16 18:55:00 [只看该作者]

                    多条件筛选设置浅释
因易友要求,匆匆忙忙写下(嘿嘿,对我来说,比写公式还难),供需要易友参考.如发现错误,请多多指正.

我们用易表设置查询窗口,常常变量结合FilterFor在当前表中筛选符合条件的行。虽说可以设置多个比较条

件,每三个参数组成一个比较条件。但筛选出来结果是同时满足多个条件行,而我们常常会一下找多个相互

不相干条件同时查找,有时也常常会查找一个范围.例如:在表中有列编号:
A00001
A00002
A00003
A00004
A00005
A.....
A99999
上面编号是我们通常单据编号式样(英文字母加数字编号).
比如,我们在做查找时要求同时找到:A00002,A00005,A10003,...
或者记不清详细编号只好找:02,05,305,888,...
有时有几个记起有几个忘了:A00008,305,888,03,...
更有甚者只记得在几个范围内:A00001-A00010,A10012-A10030,...

这个,用易表也可以解决(有多个方法可以办到),由于新版易表增加了循环执行指定的命令函数---LOOP,解决

起来就变得方便多了,下面我就简单的介绍一下用LOOP解决方法.

★我们先做一个表,其中第一列(字符型)写入编号如图1:

★完成后在表中增加二列:S(数值型),A(逻辑型)。
 【其实列名字你可以小猫小狗随便取,只是要记得在公式中一一对应,不要到时列名自己取,公式按我的粘贴,公式生成器会出现不可设别变量提示哦。这个也同样适合变量取名,到时你别问我为什么变量取名X之类的话。也许你会问:我不会增加列。嘿嘿,别问我,你也别急着看下去了,先去吸几口易表帮助文件奶水再来吧。】
 好了正式开始设置公式了,为了让你了解的清楚些,我们一步一步来设置吧。

★第一步:先做个单个筛选公式。【灵感之源】
1,设置一个自定义变量。打开文件菜单→文件设置→变量设置,设置一个%N%(字符型)

2,设置查询窗口。

  打开窗口菜单→设计录入窗台→建立新窗口。在设计录入窗口工具栏第一行左边第三个方框点点出选项中选中刚才加入变量%N%,在方框右边按扭设置工具上点击插入一个定义按扭并改名为查找,再插入一个自定义扭改名为全部。

 双击自定义按扭全部,在跳出公式生成器中写入:ShowAllrows()意思是显示所有行。

 同样方法在查找按扭里写入:Replacefor(GridName,"A",-1,"第一列", "Instr"  ,[%N%])And FilterFor("A", "=" ,-1) 意思是把当前表中A列替换为-1,条件是第一列值包含有变量%N%,替换好后筛选A列为-1行。我们去试试看,保存录入窗口并保存文件后,【为什么要保存文件呢,因为有时如果公式设置错了,一试说不定文件出错会自动关闭,这时你如不保存的话就会前功尽弃,记得下次公式修改后保存哦,重大修改的话修改前最好先另存一个备份以防不测】,在窗口菜单中打开刚才设置好录入窗口,在方框中输入A00002点查找。找到了吗?

  找到的话,再输入5,先点全部再点查找,是不是找到了包含5的所有数据了呢?【什么,没变化,按上面介绍的方法重新检查一遍看看吧!】

 3,试了二次,你会发现,查完后再查找必须先点一下全部按扭,很是不方便,没关系公式改一改吧:
ShowAllrows() And  Replacefor(GridName,"A",-1,"第一列", "Instr"  ,[%N%])And FilterFor("A", "=" ,-1)意思是先显示所有行,再把当前表中A列替换为-1,条件是第一列值包含有变量%N%,替换好后筛选A列为-1行。

   单个单个筛选到此已完成任务,【如果你只是做单个筛选,不用这么复杂设置公式,只要FilterFor("第一列", "Instr"  ,[%N%])就OK了】,完成了这一步,接下来我们可以做多个筛选了。

★第二步:分解录入的多个条件。【关键一步】

  我们要达到的目的是多个条件查找,第一步只是单个条件查找,为了达到多个条件,必须对用户输入多个条件一一分解开了。

1,增加自定义变量,按上面我讲方法增加自定义变量:%B%(字符型)

2,在录入窗口设计中把自定义查找按扭公式修改成:
ShowAllrows() AndSetVariable("%N%",Split([%B%],",",1))And  Replacefor(GridName,"A",-1,"第一列", "Instr"  ,[%N%])And FilterFor("A", "=" ,-1)

   从上面公式中我们发现多了一条:SetVariable("%N%",Split([%B%],",",1))这一条意思是:将变量%N%的值设为变量%B%中用“,”分开的第一段。

  也就是说,当我们在变量%B%中输入:A00001,A00027,A00105,时,变量%N%变成了第一个豆号点断前面的值:A00001,很显然,只要我们把公式中1改成2,得到的是A00027,改成3得到是A00105...如果我们不停的修改不同的数字会得到用户输入的每一段的值了.

   因此,我们只要把SetVariable("%N%",Split([%B%],",",1))中数字1改成一个变量:[%X%]【按前面第一步方法再加一个数值型变量吧】变成:SetVariable("%N%",Split([%B%],",",[%X%]))不停的从1,2,3,4修改[%X%]变量,就会把用户输入的每一段的值了一次一次分开了.至此,数据分解完成任务,该我们的主角出场了!有请----

★第三步:LOOP出场【成败在此一步】
尽管我们做好前面二步,只要不停改变%X%值,就会得到不同结果,但是要电脑不停改变%X%值,必须得我们的大明星:LOOP出场才能搞定啦.而明星演出停与不停,还要导演说了算---

1,加入变量%O%(数值型),他作用是导演,指挥LOOP工作还是停止.

2,查找按扭公式改为:
    ShowAllrows() AndReplacefor(GridName,"A",0)And
    SetVariable("%X%","1")And
    SetVariable("%O%",Len([%B%])/2) And
    Loop("[%O%] > 0","SetVariable(""%N%"",Split([%B%],"","",[%X%])) And
    IF(Len([%N%])=6,Replacefor(GridName,""A"",-1,""第一列"", ""= "" ,[%N%]),
    IF([%N%]="""",True,Replacefor(GridName,""A"",-1,""第一列"", ""Instr""  ,[%N%])))And           SetVariable(""%O%"",[%O%]-1)And
    SetVariable(""%X%"",[%X%]+1)")And
   


 回到顶部