CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  Office开发/ VBA

关于VBA循环问题请指教!

楼主yyzzff(呆头鱼)2004-08-04 20:49:18 在 其他开发语言 / Office开发/ VBA 提问

我现在想在EXCEL表中的第一列中查找出值为'AA'(有很多行)的所在行的行号,并付给变量K,用MSGBOX(K),显示出来,请问这个循环怎么写呀?请大家指教! 问题点数:20、回复次数:10Top

1 楼yyzzff(呆头鱼)回复于 2004-08-05 16:10:41 得分 0

没人知道吗?Top

2 楼dunkel(内心和夜 哪个黑)回复于 2004-08-05 20:23:19 得分 18

'   这个应该很简单吧?    
   
  Sub   ShowAA()  
   
          Dim   xCell   As   Range  
          Dim   xUsed   As   Range  
          Dim   xRange   As   Range  
          Dim   K   As   String  
   
          '   使用   UsedRange   是为了不必要的对没有数据区域的操作  
          Set   xUsed   =   ActiveSheet.UsedRange  
          '   形成首列中可能存在数据的范围  
          Set   xRange   =   Range(Cells(xUsed.Row,   1),   Cells(xUsed.Rows.Count   +   xUsed.Row   -   1,   1))  
          K   =   ""  
          '   逐个单元格进行检查  
          For   Each   xCell   In   xRange  
                  If   xCell.Text   =   "AA"   Then  
                          K   =   K   &   Str(xCell.Row)     '   是   'AA'   的话,   就将行号保存到   K  
                  End   If  
          Next   xCell  
          MsgBox   K     '   最后显示所有为   'AA'   的行号  
           
          Set   xRange1   =   Nothing:     Set   xRange   =   Nothing  
   
  End   Sub     '   End   of   ShowAA()Top

3 楼yyzzff(呆头鱼)回复于 2004-08-05 22:05:37 得分 0

可我现在想要把  
  AA  
  2004-2-3  
  2004-3-4  
  2004-4-4  
  AA  
  2004-2-4  
  2004-3-4  
   
  AA  
  2004-3-4  
  2004-5-6  
  这样一个EXCEL表中的AA所在的行号,以及中间日期的行数!日期的行数很不好确定,因为其中包含有空行,这要用循环实现,不知道怎么写才好!不知道是不是可以先清掉其中的空行,但这怎么做请指教!Top

4 楼dunkel(内心和夜 哪个黑)回复于 2004-08-06 06:58:04 得分 0

如果只是要剔除空行的话,   这个不算太难吧.   我想可以增加两个变量,   一个保存上个   'AA'   的行号,   一个逐行检查是同时看看是否为空行,   是的话就增   1.   在找到下一个   'AA'   行时,   当前行号,   上个行号,   还有这个空行数,   一减就可以了.   至于这个行数,   即可以用   K   的方法保存,   也可以用动态数组.   前者做的时候方便,   但后续操作繁些;   后者正相反.   所以,   具体用那个,   看你实际情况了.Top

5 楼yyzzff(呆头鱼)回复于 2004-08-06 22:29:10 得分 0

For   Each   xCell   In   xRange  
                  If   xCell.Text   <>   "AA"   And   xCell.Text   <>   ""   Then  
                  l   =   l   +   1  
                  End   If  
                  If   xCell.Text   =   "AA"   Then  
                        K   =   xCell.Row  
                        m   =   K   -   1  
                        n   =   l   -   1   '两个AA之间记录的行数  
                        MsgBox   m  
                        MsgBox   n  
                        l   =   0  
                    End   If  
          Next   xCell  
  这段是按你所说的写的,要得到的是AA所在行号和两个AA之间的记录的行数,但是现在有个问题解决不了,就是在EXCEL表的第一个AA前有两排是表头,每次运行后第一个N就是不需要的,因为我要是从第一个AA到第二个AA之间的行数以及以后的行数,并在后面需要调用,请问用什么办法可以让第一个N不要!再就是最后一个AA后面还有几行记录,可N只显示到最后一AA和倒数第二个AA之间的行数,最后一个AA后的记录行数就不显示出来了,这个用什么方法可以解决呢?由于是新手,实在不好意思!请多指教!Top

6 楼dunkel(内心和夜 哪个黑)回复于 2004-08-07 08:44:18 得分 0

>>     在EXCEL表的第一个AA前有两排是表头   ...   请问用什么办法可以让第一个N不要  
  如果表格的格式是固定的,   亦即第一个   'AA'   的位置是已知的话   (比如总是在第三行,   前面两行是表头),   很简单啊,   只要调整一下   xRange   的范围就可以了:    
      Set   xRange   =   Range(Cells(4,   1),   Cells(xUsed.Rows.Count   +   xUsed.Row   -   1,   1))  
      '   即现在从第四行开始检查匹配,   跳过第一个的   'AA'   行  
   
  >>     最后一个AA后的记录行数就不显示出来了  
  这个,   可以在   Next   xCell   之后   MsgBox   n   就可以显示最后一组的有效记录行数了  
   
  >>     n   =   l   -   1   '两个AA之间记录的行数  
  这里,   l   就是两个   AA   之间的有效记录行数吧,   为什么还要   'l   -   1'   ?Top

7 楼yyzzff(呆头鱼)回复于 2004-08-07 13:03:14 得分 0

n=l-1这是因为第个AA的上一行还有一行内容,是不需要计算在行数内的!  
  现在发现这样还是不行,表格的格式是固定的不错,第一个AA总是在第三行,若xrange的范围从第四行开始,那么第一个AA的行号就不能得到,因为K在下面的一个循环中要用不能单独用一次,若把xrange的范围改成从第三行开始,那么第一个行数就变成-1了,而这个n也是在后面的循环中要用的,不知道怎么解决才好!  
  以下是程序  
  For   Each   xCell   In   xRange  
                  If   xCell.Text   <>   "AA"   And   xCell.Text   <>   ""   Then  
                  l   =   l   +   1  
                  End   If  
                  If   xCell.Text   =   "AA"   Then  
                        K   =   xCell.Row  
                        m   =   K   -   1'AA所在的行号  
                        n   =   l   -   1'两个AA间的行数  
                        MsgBox   m                                                   //第一次循环M到这儿还是第一个AA的行数  
                        Windows("table.xls").Activate  
                        q   =   K  
                        For   ii   =   1   To   n  
                        q   =   q   +   1   //但到这儿就成第二个AA的行数了(xrange从第三行开始的情况下)  
                newworksheets.Cells(i,   1).Value   =   oldworksheets.Cells(m,   3).Value  
                newworksheets.Cells(i,   2).Value   =   oldworksheets.Cells(m,   2).Value  
                newworksheets.Cells(i,   3).Value   =   oldworksheets.Cells(q,   1).Value  
                newworksheets.Cells(i,   4).Value   =   oldworksheets.Cells(q,   2).Value  
                newworksheets.Cells(i,   5).Value   =   b  
                                    i   =   i   +   1  
                                    b   =   b   +   1  
                                    Next   ii  
                                    l   =   0  
                    End   If  
          Next   xCell  
          Set   xRange1   =   Nothing:     Set   xRange   =   Nothing  
          MsgBox   l  
        End   If  
  Top

8 楼wodeyouxian(人生如梦)回复于 2004-08-07 16:02:52 得分 2

Range("A1:A250").Name   =   "得分"                                           '先将来用的列命名  
  Dim   i   As   Integer                            
   
  For   i   =   1   To   Range("得分").Cells.Count                           '遍历这一列  
   
    if(Range("得分").Cells(i).Value=="AA")   then  
    msgbox("ActiveCell.Column   ")                                             '这里就是显示你要的东西了  
    endif                                                                                           '连K都省了  
  next   iTop

9 楼dunkel(内心和夜 哪个黑)回复于 2004-08-07 16:27:36 得分 0

那还是从开始就进行检查,   设个逻辑变量,   初始值为   False,   找到第一个   'AA'   后置为   True,   如果这个变量为   True   时在统计有效数据项数就是了.   虽然这样速度上有些微的牺牲.Top

10 楼yyzzff(呆头鱼)回复于 2004-08-08 08:23:40 得分 0

谢谢了,问题已解决,可能要多设一个变量,来保存前一个AA所在的行号!Top

相关问题

  • 请教循环问题......
  • 请问,for 循环如何使用步长
  • for循环的疑惑,请各位帮忙!
  • 该如何来循环呢?请指教
  • 请教循环显示问题!
  • 请问一下如何作个循环?
  • 请帮忙,循环问题,在线waiting~~~~~~~~~~~======
  • 循环链表问题(请教)
  • 对for循环的不理解,请教!!
  • 请教一个循环的问题

关键词

  • 循环
  • excel
  • 解决
  • xcell
  • xrange
  • aa
  • 行号
  • xused
  • newworksheets
  • 行数

得分解答快速导航

  • 帖主:yyzzff
  • dunkel
  • wodeyouxian

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo