iT邦幫忙

0

VBA 中使用Match找不到對應的值

  • 分享至 

  • xImage

各位IT大:

我有個問題想請教

我想用VBA簡單做一個儲存格填值

SheetA:
https://ithelp.ithome.com.tw/upload/images/20231226/20164482eXFFYegrM7.png

SheetB:
https://ithelp.ithome.com.tw/upload/images/20231226/20164482XYwbM2dc02.png

我要再SheetB裡面自動比對特定欄位然後帶入值
但SheetA的Row2有缺值或不Match要搜尋的值
會出現下圖: (前面1個, 2個, 3個都有帶出值 1,2,3 但到用SheetB的4個搜尋SheetA找不到值就會出現)
https://ithelp.ithome.com.tw/upload/images/20231226/20164482BdfC067A64.png


程式碼如下:
Sub IndexMatch()

Dim i As Integer

' Perform index match
For i = 2 To 11

    If Cells(1, i) = "" Then
        
    Else
        Cells(2, i).Value = WorksheetFunction.Index(Worksheets("SheetA").Rows(1), WorksheetFunction.Match(Cells(1, i).Value, Worksheets("SheetA").Rows(2), 0))
        
    End If
    
Next i

End Sub

亂皮皮 iT邦新手 1 級 ‧ 2023-12-27 11:27:53 檢舉
If Cells(1, i) = "" Then >>>> If Cells(1, i).Value = "" Then
neil524 iT邦新手 5 級 ‧ 2023-12-27 17:51:35 檢舉
缺值用if可以,但我是要搜尋的值不再我要搜尋的row裡面就會出現異常。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
rakusa__
iT邦新手 5 級 ‧ 2023-12-27 21:25:44
最佳解答

以下思路供參考~
搭配在你If的改寫,應該可以解決你的問題

1.改使用Application.match()
用法一樣,但是match不到時會回傳錯誤碼,不會直接報錯

2.使用WorksheetFunction.countifs()判定範圍內有沒有要找的值,再使用match

看更多先前的回應...收起先前的回應...
neil524 iT邦新手 5 級 ‧ 2023-12-28 09:51:31 檢舉

感謝,不過這裡都要把WorksheetFunction(index, match)改為Application,不然index那還是會有型態不符合的異常。另外想請問WorksheetFunction跟Application有什麼差異嗎?

rakusa__ iT邦新手 5 級 ‧ 2023-12-28 11:11:03 檢舉

index會異常應該也是因為match錯誤的關係
可以在外層先判定match有沒有錯誤:
if not IsError(Application.Match(Cells(1, i).Value, Worksheets("SheetA").Rows(2), 0)) then

rakusa__ iT邦新手 5 級 ‧ 2023-12-28 11:12:07 檢舉

application/worksheetfunction差異,可參考看看 這篇

neil524 iT邦新手 5 級 ‧ 2023-12-29 11:45:59 檢舉

看完清楚了很多! 感謝你

我要發表回答

立即登入回答