[算表] VBA Index+match問題

看板Office作者 (nino)時間6年前 (2017/07/21 00:30), 編輯推噓4(4026)
留言30則, 3人參與, 最新討論串1/1
軟體: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://www.ptt.cc/bbs/Office/M.1500568235.A.0AD.html

07/21 07:04, , 1F
如錯誤回傳空白,可以if配合iserror,match方面以
07/21 07:04, 1F

07/21 07:04, , 2F
application.match
07/21 07:04, 2F

07/21 07:06, , 3F
或以判斷range.find如is nothing回傳空白
07/21 07:06, 3F

07/21 07:08, , 4F
或以工作表函數countif,為0時回傳空白
07/21 07:08, 4F

07/22 00:55, , 5F
s大你好 是否可以再問一個迴圈的問題
07/22 00:55, 5F

07/22 00:57, , 6F
For i = 4 To Range("C4").End(xlDown).Row
07/22 00:57, 6F

07/22 00:57, , 7F
If Cells(i, 42) = 0 Then
07/22 00:57, 7F

07/22 00:57, , 8F
Rows(i).Delete Shift:=xlUp
07/22 00:57, 8F

07/22 00:57, , 9F
v=v-1
07/22 00:57, 9F

07/22 00:58, , 10F
想問這樣要怎麼改比較好 因為刪除的列上移
07/22 00:58, 10F

07/22 00:59, , 11F
所以讓刪除的時候v-1再跑一次確保每一列都比較過
07/22 00:59, 11F

07/22 00:59, , 12F
但發現這樣跑不動 不知為何
07/22 00:59, 12F

07/22 01:02, , 13F
我確定是v-1這一行的問題
07/22 01:02, 13F

07/22 06:12, , 14F
迴圈反過來跑,i = 4 to 1, step -1
07/22 06:12, 14F

07/22 10:03, , 15F
如f大所述反序,以回文來看為
07/22 10:03, 15F

07/22 10:03, , 16F
for i = range("c4").end(xldown).row to 4 step -1
07/22 10:03, 16F

07/22 10:07, , 17F
只是v=v-1這裡的變數v並無於回文內出現,所以不太清楚該變
07/22 10:07, 17F

07/22 10:07, , 18F
數和確保每一列都比較過的關係為?
07/22 10:07, 18F

07/22 10:08, , 19F
但如以反序的話,應就可取消該行試試
07/22 10:08, 19F

07/22 10:20, , 20F
對,i = i - 1 這行不用寫
07/22 10:20, 20F

07/22 10:22, , 21F
至於你原文的問題,如果查找的範圍很大,建議將資料寫成
07/22 10:22, 21F

07/22 10:22, , 22F
陣列,在陣列裡查找會比較快
07/22 10:22, 22F

07/22 10:25, , 23F
具體做法是A陣列存放查找key值、B陣列存放回傳值,兩個
07/22 10:25, 23F

07/22 10:25, , 24F
陣列的順序一致時,可以在A陣列找到key值的資料序號,然
07/22 10:25, 24F

07/22 10:25, , 25F
後帶回B陣列該序號的值,可以大幅加快運算速度
07/22 10:25, 25F

07/22 10:31, , 26F
請問f大那裡有i=i-1?我只有看到v=v-1
07/22 10:31, 26F

07/22 10:56, , 27F
s大,抱歉,我剛剛以為你回的那些訊息是原po問的… 他應
07/22 10:56, 27F

07/22 10:56, , 28F
該是key錯吧?
07/22 10:56, 28F

07/22 13:10, , 29F
v是打錯沒錯 很感謝兩位大大 改善非常多
07/22 13:10, 29F

07/22 13:11, , 30F
f大提供的方式我晚一點試試看 非常感謝
07/22 13:11, 30F
文章代碼(AID): #1PSDgh2j (Office)