Office中国论坛/Access中国论坛

标题: 请高手帮助我一个数列的问题! [打印本页]

作者: batigol    时间: 2005-5-13 06:09
标题: 请高手帮助我一个数列的问题!
我有一组输入,比如1到100.中间不连续的数字,我想用VBA编辑个按扭,一点就把所以这组数没有的数字提出来.请高手告诉我代码啊!!!谢谢!!!!!!!!!
作者: 情比金坚    时间: 2005-5-17 04:35
还无需VBA,在B1写函数:向下拖即可

=IF(VLOOKUP(ROW(),$A$1A$100,1,1)=ROW(),"",ROW())
作者: 红池坝    时间: 2005-5-17 07:05
还是用VBA吧。

情老斑竹的这个函数有问题,因为这个函数只对楼主所举的特例(1-100)有效,如果楼主的数据一变便会报错,比如A1的数据不是1,而是100,甚至101,这个函数就无法完成任务:因为函数以行标(ROW())作为返回值就值得商榷,毕竟真正的返回值应该是楼主的“一组输入”中的一个,而这组输入有可能与行标毫无关系,比如是一组身份证之类的。

VBA 的思路大致如下:

设两数组:A()为已经输入的数据,B()为预设的数组,也就是说A()是B()的子集,

flag=0           ======这是个标志,用以在集合B()中标识A()里有的数据,具体的可以根据情况自定,原则只有一个:不和B()中原有的任意数据雷同!

i=0

for i=0 to B()集合的个数          ====遍历B集合  

      for j=0 to A()集合的个数     ====遍历A集合

          if B(i)=A(j) then       ====如果A()中找到了B(i),则设立标志并退出这一层循环

             B(i)=Flag            

             exit for              =========退出这层循环

          end if

     next j

    if B(i)<>flag then        =====如果A()集合中没有B(i),则输出B(i)

    output B(i)

next i

用数组真是麻烦,本来VB里好像有集合对象的,但我在VBA里没有找到,我想,如果能用集合的话,就可以用集合的减运算直接得到答案,用不了这么复杂的。希望能有兄弟们找到更好的办法:)




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3