Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2013)
エラー値(#N/A)を表示したい&エラーとして認識してくれない
投稿日時: 20/07/29 13:11:31
投稿者: vaioyuki

 
またまたお世話になります。
今回はmatch関数のエラーについてです。
 

Set SerchI = setSh.Range("B1").CurrentRegion
Set SerchM = setSh.Range("A1:A" & r_cntS)


With flowSh
  
    For i = 44 To 46
        On Error Resume Next
        ix = WorksheetFunction.Match(.Cells(i, 3), SerchM, 0)
        
        .Cells(i, 4) = WorksheetFunction.Index(SerchI, ix, 12)
        
        On Error GoTo 0
        
        If ix = 0 Then
            .Cells(i, 4) = "#N/A"
        End If
    Next i

End With

 
エラー回避についてきちんと把握していないのかもしれませんが、
上記コードを実行するとエラーなのにその上の番号を認識しています。
近似値みたいなもの?
 
本当はたくさん行数があるのですが、
45行目が実際はエラーのはずなのに44行目と同じものが入力されます。
 
完全に一致する「0」を指定しているのになぜでしょうか?
 
 
よろしくお願いします。

回答
投稿日時: 20/07/29 14:27:21
投稿者: WinArrow
投稿者のウェブサイトに移動

エラートラップしたからといって
「0」が返るわけではありません。
  
エラー判定の方法は、Err.Number を使いましょう。
   
     
対応策
   
With flowSh
       
      For i = 44 To 46
          On Error Resume Next
          ix = WorksheetFunction.Match(.Cells(i, 3), SerchM, 0)
          If Err.Number = 0 Then
              .Cells(i, 4).Value = WorksheetFunction.Index(SerchI, ix, 12)
          Else
              .Cells(i, 4).Value = "#N/A"
          End If
          On Error GoTo 0
             
      Next i
     
  End With

投稿日時: 20/07/29 17:18:34
投稿者: vaioyuki

なるほど!!
 
てっきり ix が0と判定したら。。。だとばかり思ってました。(^^;)
 
いつも本当にありがとうございます。