设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1460|回复: 2
打印 上一主题 下一主题

[基础应用] 请高手帮助我一个数列的问题!

[复制链接]
跳转到指定楼层
1#
发表于 2005-5-13 06:09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有一组输入,比如1到100.中间不连续的数字,我想用VBA编辑个按扭,一点就把所以这组数没有的数字提出来.请高手告诉我代码啊!!!谢谢!!!!!!!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-5-17 04:35:00 | 只看该作者
还无需VBA,在B1写函数:向下拖即可

=IF(VLOOKUP(ROW(),$A$1A$100,1,1)=ROW(),"",ROW())
3#
发表于 2005-5-17 07:05:00 | 只看该作者
还是用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里没有找到,我想,如果能用集合的话,就可以用集合的减运算直接得到答案,用不了这么复杂的。希望能有兄弟们找到更好的办法:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-16 15:18 , Processed in 1.134420 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表