[算表] VBA Index+match问题

楼主: arashi2014 (nino)   2017-07-21 00:30:33
软件:excel
版本:2007
最近用vba写查找的公式时 我是这样写的
r = 0
r = Application.WorksheetFunction.Match(r0.Cells(i), column1, 0)
Cells(i, 2).Value = Application.WorksheetFunction.Index(column2, r)
用循环来跑这样的式子
因为有时候会有对不到的情况 如果对不到我希望它显示空白
所以r就需在每次循环重新宣告为零
否则在没找到新的一笔资料时r会显示为前一个循环的r
但我发现这样效率好像很差 查找很慢
想问有没有更好的写法会更快的 有关设为零的部分还可以怎么做吗
或是直接用iferror会比较好吗 但是我没找到application+iferror的写法
有没有高手能提供一点建议呢 非常谢谢
作者: soyoso (我是耀宗)   2017-07-21 07:04:00
如错误回传空白,可以if配合iserror,match方面以application.match或以判断range.find如is nothing回传空白或以工作表函数countif,为0时回传空白
楼主: arashi2014 (nino)   2017-07-22 00:55:00
s大你好 是否可以再问一个循环的问题For i = 4 To Range("C4").End(xlDown).RowIf Cells(i, 42) = 0 ThenRows(i).Delete Shift:=xlUpv=v-1想问这样要怎么改比较好 因为删除的列上移所以让删除的时候v-1再跑一次确保每一列都比较过但发现这样跑不动 不知为何我确定是v-1这一行的问题
作者: foolkids (翼をください)   2017-07-22 06:12:00
循环反过来跑,i = 4 to 1, step -1
作者: soyoso (我是耀宗)   2017-07-22 10:03:00
如f大所述反序,以回文来看为for i = range("c4").end(xldown).row to 4 step -1只是v=v-1这里的变量v并无于回文内出现,所以不太清楚该变量和确保每一列都比较过的关系为?但如以反序的话,应就可取消该行试试
作者: foolkids (翼をください)   2017-07-22 10:20:00
对,i = i - 1 这行不用写至于你原文的问题,如果查找的范围很大,建议将资料写成阵列,在阵列里查找会比较快具体做法是A阵列存放查找key值、B阵列存放回传值,两个阵列的顺序一致时,可以在A阵列找到key值的资料序号,然后带回B阵列该序号的值,可以大幅加快运算速度
作者: soyoso (我是耀宗)   2017-07-22 10:31:00
请问f大那里有i=i-1?我只有看到v=v-1
作者: foolkids (翼をください)   2017-07-22 10:56:00
s大,抱歉,我刚刚以为你回的那些讯息是原po问的… 他应该是key错吧?
楼主: arashi2014 (nino)   2017-07-22 13:10:00
v是打错没错 很感谢两位大大 改善非常多f大提供的方式我晚一点试试看 非常感谢

Links booklink

Contact Us: admin [ a t ] ucptt.com