您的位置:程序门 -> vb -> vba



请教!excel宏:判断,满足条件后插入行的代码


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


请教!excel宏:判断,满足条件后插入行的代码[已结贴,结贴人:julia05082]
发表于:2007-05-22 16:24:53 楼主
现在我要实现的内容是:

比如,a列中,比较a2与a1的值,如果满足某一个条件,就在a2和a1间插入一行。之后,再比较a3和a2的值,以此类推,最后到表的结尾。

想写在宏里面。

代码方面,出现问题。想请教高手。

1   行是变化的,那么我该如何表示呢?(我对vb其实一点都不懂的)
我可以像以前学过的其他语言那样,设个变量i   然后就用ai来表示么?
2   插入行就用selection.insert   shift:=xldown   这个语句就可以了么?

恳求高手指教啊~~~~
发表于:2007-05-22 19:00:511楼 得分:60
sub   insert()
      dim   i   as   long
      i   =   1
      while   worksheets( "sheet1 ").range( "a "   &   i   +   1).value   <>   " "
            if   worksheets( "sheet1 ").range( "a "   &   i).value   <   worksheets( "sheet1 ").range( "a "   &   i   +   1).value   then   '插入条件为a   i <a   i+1
                    worksheets( "sheet1 ").rows(i   +   1   &   ": "   &   i   +   1).select
                    selection.insert   shift:=xldown
                    worksheets( "sheet1 ").range( "a "   &   i   +   1).value   =   worksheets( "sheet1 ").range( "a "   &   i).value   +   worksheets( "sheet1 ").range( "a "   &   i   +   2).value   '插入一行后附值:前后两个单元格的和,可随意制定
            end   if
            i   =   i   +   1
      wend
end   sub
发表于:2007-05-22 19:31:172楼 得分:10
我也是菜鸟,供你参考。(office   2003)
sub   插入空行()
        application.screenupdating   =   false                                   '刷屏停止   为提高速度
        max_h   =   sheets(1).usedrange.rows.count                           '最大行号
        for   i   =   1   to   max_h                                                                   '第一行到最大行号
                前值   =   cells(i,   1).value                                               '第一列,i行==a1(初值)
                后值   =   cells(i+1,   1).value                                           '第一列,i+1行==a2(初值)
                if   后值   =   前值   and   其它条件   then
                        rows(i   +   1).select                                                   '选中整行
                        selection.insert   shift:=xldown
                        max_h   =   max_h   +   1                                                     '最大行号增加
                end   if

        next   i
       
        application.screenupdating   =   true                                                               '刷屏恢复
end   sub
发表于:2007-05-23 08:02:303楼 得分:0
我一上来就看到了两位的方法   这就去试试   不管怎样   先谢过啦
发表于:2007-05-23 11:04:244楼 得分:0
按照threecolor大哥的方法,我按照自己的需要修改了代码,可是还有问题。先贴出代码

sub   part1_insert()

      dim   i   as   long
      i   =   2
     
      while   worksheets( "sheet1 ").range( "a "   &   i   +   1).value   <>   " "           '未到表尾
            if   worksheets( "sheet1 ").range( "d "   &   i).value   =   worksheets( "sheet1 ").range( "d "   &   i   +   1).value   and   worksheets( "sheet1 ").range( "o "   &   i).value   +   1   <>   worksheets( "sheet1 ").range( "d "   &   i   +   1).value   and   worksheets( "sheet1 ").range( "o "   &   i   +   1).value   <>   6   and   worksheets( "sheet1 ").range( "d "   &   i   +   1).value   <>   7   then   '插入条件
                    worksheets( "sheet1 ").rows(i   +   1   &   ": "   &   i   +   1).select
                    selection.insert   shift:=xldown
            end   if
            i   =   i   +   1
      wend
end   sub
发表于:2007-05-23 11:08:435楼 得分:0
我想实现的是:
当   oi不等于6,且不等于7,
且   o   i+1   等于oi   +1
且   d   i+1   等于di

满足上述条件的情况下,需要插入行。

可是按照上面的代码,似乎后面的几个条件都不起作用。
实在不知道错在哪里了。
请各位再帮忙指点一下!
谢谢
发表于:2007-05-23 12:16:176楼 得分:0
如果你上面写的条件是对的,(不知道你o和d有没有写错),下面是正确的条件

sub   part1_insert()

      dim   i   as   long
      i   =   2
     
      while   worksheets( "sheet1 ").range( "a "   &   i   +   1).value   <>   " "           '未到表尾
            if   worksheets( "sheet1 ").range( "o "   &   i).value   <>   6   and   worksheets( "sheet1 ").range( "o "   &   i).value   <>   7   _
                  and   worksheets( "sheet1 ").range( "o "   &   i   +   1).value   <>   worksheets( "sheet1 ").range( "o "   &   i).value   +   1   _
                  and   worksheets( "sheet1 ").range( "d "   &   i   +   1).value   <>   worksheets( "sheet1 ").range( "d "   &   i).value   then
                    worksheets( "sheet1 ").rows(i   +   1   &   ": "   &   i   +   1).select
                    selection.insert   shift:=xldown
            end   if
            i   =   i   +   1
      wend
end   sub
发表于:2007-05-23 12:41:337楼 得分:0
o和d   米有写错的说  
哈哈
马上去试一下
先小谢一下!
发表于:2007-05-23 12:46:528楼 得分:0
刚刚试了一下   还是不行!
为什么在一个地方不停的插入行?


快速检索

最新资讯
热门点击