作者arashi2014 (nino)
看板Office
标题[算表] VBA Index+match问题
时间Fri Jul 21 00:30:33 2017
软体: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的写法
有没有高手能提供一点建议呢 非常谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.114.233.182
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1500568235.A.0AD.html
1F:→ soyoso: 如错误回传空白,可以if配合iserror,match方面以 07/21 07:04
2F:→ soyoso: application.match 07/21 07:04
3F:→ soyoso: 或以判断range.find如is nothing回传空白 07/21 07:06
4F:→ soyoso: 或以工作表函数countif,为0时回传空白 07/21 07:08
5F:→ arashi2014: s大你好 是否可以再问一个回圈的问题 07/22 00:55
6F:→ arashi2014: For i = 4 To Range("C4").End(xlDown).Row 07/22 00:57
7F:→ arashi2014: If Cells(i, 42) = 0 Then 07/22 00:57
8F:→ arashi2014: Rows(i).Delete Shift:=xlUp 07/22 00:57
9F:→ arashi2014: v=v-1 07/22 00:57
10F:→ arashi2014: 想问这样要怎麽改比较好 因为删除的列上移 07/22 00:58
11F:→ arashi2014: 所以让删除的时候v-1再跑一次确保每一列都比较过 07/22 00:59
12F:→ arashi2014: 但发现这样跑不动 不知为何 07/22 00:59
13F:→ arashi2014: 我确定是v-1这一行的问题 07/22 01:02
14F:推 foolkids: 回圈反过来跑,i = 4 to 1, step -1 07/22 06:12
15F:→ soyoso: 如f大所述反序,以回文来看为 07/22 10:03
16F:→ soyoso: for i = range("c4").end(xldown).row to 4 step -1 07/22 10:03
17F:→ soyoso: 只是v=v-1这里的变数v并无於回文内出现,所以不太清楚该变 07/22 10:07
18F:→ soyoso: 数和确保每一列都比较过的关系为? 07/22 10:07
19F:→ soyoso: 但如以反序的话,应就可取消该行试试 07/22 10:08
20F:推 foolkids: 对,i = i - 1 这行不用写 07/22 10:20
21F:推 foolkids: 至於你原文的问题,如果查找的范围很大,建议将资料写成 07/22 10:22
22F:→ foolkids: 阵列,在阵列里查找会比较快 07/22 10:22
23F:→ foolkids: 具体做法是A阵列存放查找key值、B阵列存放回传值,两个 07/22 10:25
24F:→ foolkids: 阵列的顺序一致时,可以在A阵列找到key值的资料序号,然 07/22 10:25
25F:→ foolkids: 後带回B阵列该序号的值,可以大幅加快运算速度 07/22 10:25
26F:→ soyoso: 请问f大那里有i=i-1?我只有看到v=v-1 07/22 10:31
27F:推 foolkids: s大,抱歉,我刚刚以为你回的那些讯息是原po问的… 他应 07/22 10:56
28F:→ foolkids: 该是key错吧? 07/22 10:56
29F:→ arashi2014: v是打错没错 很感谢两位大大 改善非常多 07/22 13:10
30F:→ arashi2014: f大提供的方式我晚一点试试看 非常感谢 07/22 13:11