IFERROR tidak berfungsi

  1. tahun lalu
    Sub LookupDataAndStoreResult()
        Dim lookupValue As Variant
        Dim lookupRange As Range
        Dim result As Variant
        Dim ws As Worksheet
        
        ' Set the lookup value from the 'data bpjs.xlsx' B2 cell
        lookupValue = Workbooks("data bpjs.xlsx").Sheets(1).Range("B2").Value
        
        ' Set the lookup range from 'status pegawai.xlsx' B2:C20 range
        Set lookupRange = Workbooks("status pegawai.xlsx").Sheets(1).Range("B2:C20")
        
        ' Perform the VLOOKUP
        On Error Resume Next ' Ignore errors temporarily
        result = Application.WorksheetFunction.VLookup(lookupValue, lookupRange, 2, False)
        On Error GoTo 0 ' Restore error handling
        
        ' Check if there was an error in the VLOOKUP
        If IsError(result) Then
            ' If an error occurred, display "Data tidak ditemukan"
            result = "Data tidak ditemukan"
        End If
        
        ' Store the result in cell C2 of the active sheet (where the VBA code is run)
        Set ws = ActiveSheet
        ws.Range("C2").Value = result
    End Sub
    

    ketika di coba didata yang error hasilnya kosong

    untuk rumus excelnya

    =IFERROR(VLOOKUP('data bpjs.xlsx'!B2, 'Status pegawai.xlsx'!$B$2:$C$20, 2, FALSE), "Data tidak ditemukan")

  2. Caton

    2 Aug 2023 Terverifikasi Indonesia + 20.102 Poin

    @Rez Kautsar ...

    Pada baris perintah berikut ini :

    ...
        ' Perform the VLOOKUP
        On Error Resume Next ' Ignore errors temporarily
        result = Application.WorksheetFunction.VLookup(lookupValue, lookupRange, 2, False)
        On Error GoTo 0 ' Restore error handling
        
        ' Check if there was an error in the VLOOKUP
        If IsError(result) Then
            ' If an error occurred, display "Data tidak ditemukan"
            result = "Data tidak ditemukan"
        End If
    ...

    jika fungsi Application.WorksheetFunction.VLookup tidak menemukan data yang dicari, maka VBA akan menimbulkan kesalahan (Error). Namun karena pada baris sebelumnya ada perintah On Error Resume Next, maka kesalahan yang terjadi tidak akan muncul, namun tetap tersimpan pada object Err (Error), sampai perintah berikutnya (yakni On Error GoTo 0) dieksekusi.

    Jadi, untuk mengetahui apakah terjadi kesalahan pada script di atas, yang diperiksa seharusnya adalah object Err, bukan pada nilai variabel result karena variabel tersebut tidak akan menghasilkan nilai kesalahan yang terjadi. Solusinya :

    ...
        ' Perform the VLOOKUP
        On Error Resume Next ' Ignore errors temporarily
        result = Application.WorksheetFunction.VLookup(lookupValue, lookupRange, 2, False)    
        
        ' Check if there was an error in the VLOOKUP
        If Err.Number <> 0 Then '+-- Periksa object Error!
            ' If an error occurred, display "Data tidak ditemukan"
            result = "Data tidak ditemukan"
        End If
    
        On Error GoTo 0 ' Restore error handling
    ...

    Solusi lainnya, karena tipe variabel result adalah Variant, maka gunakan fungsi VLookup langsung dari object Application seperti berikut :

        ' Perform the VLOOKUP
        On Error Resume Next ' Ignore errors temporarily
    
        '+-- Dengan Application.VLookup, jika data tidak ditemukan maka
        '+-- variabel result akan menyimpan nilai error.
        result = Application.VLookup(lookupValue, lookupRange, 2, False)
        On Error GoTo 0 ' Restore error handling
        
        ' Check if there was an error in the VLOOKUP
        If IsError(result) Then
            ' If an error occurred, display "Data tidak ditemukan"
            result = "Data tidak ditemukan"
        End If

    Pada solusi kedua ini, jika terjadi kesalahan, maka fungsi Application.VLookup akan mengembalikan nilai kesalahan ke dalam variabel result, sehingga bisa diuji dengan fungsi IsError.

    Demikian.

 

atau Mendaftar untuk ikut berdiskusi!