Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3017|回复: 3

[已解决]如何用宏返回某列第一个负值所在的行数或者该行末尾行号

[复制链接]
发表于 2014-12-26 18:40 | 显示全部楼层 |阅读模式
昨天在此发帖求助:工作表中有一列数,想通过程序确定从某行开始第一个负数出现的行号。例如,从第三行开始,第一个负数出现在第6行,这个第6行的行号用程序定位并返回在c列相应单元格里;同理,从第8行开始,第一个负数出现在第11行;从第15行开始,第一个负数出现在第20行。只要在b列输入“起始行号”,则定位结果分别返回到c列相应单元格里。
感谢超级版主"爱疯"给我的回答是:
Function lastRow(x As Range) As Integer
    Dim r%, i%
    lastRow = -1    '表示找不到
    r = ActiveSheet.UsedRange.Rows.Count
    For i = x To r
        If Cells(i, 1) < 0 Then lastRow = i: Exit For
    Next i
End Function

这个函数运行效果不错,但是如图所示,当该列数的最后几个数都是正数时,例如从第21行开始,后面不再有负数,此时函数计算结果为"-1"。而我希望:如果某一数字的后面直到结尾都不再有负数出现,则在c列相应区域返回原始数据最后一行的行号。例如,在b5单元格输入“21”作为起始行号时,则在c5单元格返回23.
自己刚开始学VBA,修改了好长时间还是搞不定,麻烦哪位高手帮我看看上面的程序该怎么改才能达到这个效果。

最佳答案
2014-12-26 19:16
这样试试
  1. Function lastRow(x As Range) As Integer
  2.     Dim r%, i%
  3.     r = Cells(Rows.Count, 1).End(3).Row
  4.     lastRow = r    '表示找不到
  5.     For i = x To r
  6.         If Cells(i, 1) < 0 Then lastRow = i: Exit Function
  7.     Next i
  8. End Function
复制代码
修改程序.jpg

如何用宏返回某列第一个负值所在的行数2.rar

13.94 KB, 下载次数: 5

发表于 2014-12-26 18:53 | 显示全部楼层
“例如,在b5单元格输入“21”作为起始行号时,则在c5单元格返回23”


如果这么定义,则最后一个被查找值,无论是不是负数,都返回行号。
也就是说,最后一个数将无法判断正负了呀?
回复

使用道具 举报

发表于 2014-12-26 19:16 | 显示全部楼层    本楼为最佳答案   
这样试试
  1. Function lastRow(x As Range) As Integer
  2.     Dim r%, i%
  3.     r = Cells(Rows.Count, 1).End(3).Row
  4.     lastRow = r    '表示找不到
  5.     For i = x To r
  6.         If Cells(i, 1) < 0 Then lastRow = i: Exit Function
  7.     Next i
  8. End Function
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-12-31 11:00 | 显示全部楼层
感谢芐雨和爱疯的热情相助。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-18 20:45 , Processed in 0.297175 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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