我正在编写一个宏来搜索大型数据表,以查找满足多个条件的行并从中获取一些值。有时候没有要查找的行,在这种情况下我希望我的值为0.我使用的算法是:
row = 2
Do Until (row satisfies cond1 And cond2 And cond 3) Or Range("A" & row).Value = ""
row = row + 1
Loop
If Range("A" & row).Value = "" Then
myval = 0
Else
myval = something taken from row
End If
每当我的一个条件评估为在空行上测试时键入不匹配时出现问题* - 如果没有找到行并且代码到达结尾,我得到一个错误并且宏从未检查它确实是在数据的最后。
*示例:我的一个条件针对存储为文本的日期测试Date变量,因此我使用mydate = Datevalue(text in row)
进行测试,如果文本为空,则会导致类型不匹配。
您知道这个问题的简单解决方案吗?我能想到的最容易的事情是计算之前的行数并转换到For
循环,但这肯定会增加一些额外的变量和计算。
答案 0 :(得分:1)
放手一搏:
row = 2
Do Until Range("A" & row).Value = ""
If (row satisfies cond1 And cond2 And cond 3) Then Exit Do
row = row + 1
Loop
If Range("A" & row).Value = "" Then
myval = 0
Else
myval = something taken from row
End If
所以基本上,循环直到你到达表的末尾,但如果你找到一个合适的值,就会跳出循环。