[CODE VLOOKUP] LỖI KHÔNG TRẢ VỀ NHƯ TRONG BẪY LỖI

  • Thread starter Thread starter subv
  • Ngày gửi Ngày gửi
Liên hệ QC

subv

code vẽ người
Tham gia
29/6/12
Bài viết
36
Được thích
15
Giới tính
Nam
Nghề nghiệp
Tự do
Em chào các anh chị!
Em có 2 vấn đề nhờ các anh chị giúp em ạ.

V/đ 1.
Như tiêu đề, em gặp phải một lỗi khi code Vlookup là khi dò tìm không có giá trị thì không trả về kết quả như bẫy lỗi mà trả về kết quả liền kề trước đó.
Trong file đính kèm của em, Range("K62:P655") là nơi bị lỗi (nếu dùng công thức), tuy nhiên nó vẫn hiện thị giá trị (sai, không mong muốn).
Code em gán tại Button myVlookup. Các anh chị xem qua, giúp em với ạ.
V/đ 2.
Nếu với cấu trúc dữ liệu của em như vậy, em chưa giải quyết được số liệu tại cột "J", vì code trên là Vlookup.
Nên anh chị có thể hướng dẫn em code index macth trong trường hợp này không ạ.

Em đính kèm file.

Em cám ơn!
Bài đã được tự động gộp:

subv.png
 

File đính kèm

Lần chỉnh sửa cuối:
V/đ 1.
Như tiêu đề, em gặp phải một lỗi khi code Vlookup là khi dò tìm không có giá trị thì không trả về kết quả như bẫy lỗi mà trả về kết quả liền kề trước đó.
Trong file đính kèm của em, Range("K62:p655") là nơi bị lỗi (nếu dùng công thức), tuy nhiên nó vẫn hiện thị giá trị (sai, không mong muốn).
Code em gán tại Button myVlookup. Các anh chị xem qua, giúp em với ạ.
Tôi không bàn chuyện code có làm đúng ý hay không vì bạn không mô tả.

Nếu chỉ nói về chuyện trả về "Dang cap nhat" thì ... Lưu ý là tôi dùng Application.VLookup chứ không phải là Application.WorksheetFunction.VLookup
Mã:
Sub Testing1()
On Error Resume Next

Dim lr1 As Long, lastCol As Integer
Dim sh1 As Worksheet: Set sh1 = ThisWorkbook.Worksheets("HCM_Sale")
lr1 = Sheets("HCM_Sale").Range("A1046876").End(xlUp).Row
lastCol = Sheets("HCM_Sale").Range("A6").SpecialCells(xlCellTypeLastCell).Column - 2
Dim sh2 As Worksheet: Set sh2 = ThisWorkbook.Worksheets("Suply")
Dim rngLook As Range: Set rngLook = sh2.Range("C7:O" & lr1)
Dim clock As Variant
Dim DR24 As Variant
Dim i As Integer, j As Integer
Application.ScreenUpdating = False

    For j = 10 To lastCol
                For i = 7 To lr1
                        clock = sh1.Cells(i, 3).Value
                        DR24 = Application.VLookup(clock, rngLook, j - 2, 0)
                        If IsError(DR24) Then
                            sh1.Cells(i, j + 1).Value = "Dang cap nhat"
                        Else
                            sh1.Cells(i, j + 1).Value = DR24
                        End If
                Next i
    Next j
    Exit Sub
    Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Em chào các anh chị!
Em có 2 vấn đề nhờ các anh chị giúp em ạ.

V/đ 1.
Như tiêu đề, em gặp phải một lỗi khi code Vlookup là khi dò tìm không có giá trị thì không trả về kết quả như bẫy lỗi mà trả về kết quả liền kề trước đó.
Trong file đính kèm của em, Range("K62:p655") là nơi bị lỗi (nếu dùng công thức), tuy nhiên nó vẫn hiện thị giá trị (sai, không mong muốn).
Code em gán tại Button myVlookup. Các anh chị xem qua, giúp em với ạ.
V/đ 2.
Nếu với cấu trúc dữ liệu của em như vậy, em chưa giải quyết được số liệu tại cột "J", vì code trên là Vlookup.
Nên anh chị có thể hướng dẫn em code index macth trong trường hợp này không ạ.

Em đính kèm file.

Em cám ơn!
Bài đã được tự động gộp:

View attachment 211979
Bài của bạn thì muốn kết quả như thế nào nhỉ.Mình thấy 1 phiếu xuất có tận 2 tên thì lấy tên nào nhỉ.
 
Upvote 0
Cám ơn Hoàng anh Thơ!
Vấn đề đã được giải quyết một cách tuyệt vời!
 
Upvote 0
Hàm gọi qua đối tượng WorksheetFunction chỉ gây hiện tượng lỗi chứ không trả về giá trị lỗi.
Hàm gọi thẳng qua đói tượng Application tự bẫy hiện tượng lỗi trên và trả về giá trị lỗi.

Bạn có hai chọn lựa:

1. Dùng WorksheetFunction như code sẵn có:
Mã:
On Error Resume Next
Application.ScreenUpdating = False
    For j = 10 To lastCol
                For i = 7 To lr1
                        sh1.Cells(i, j + 1).Value = "Dang cap nhat" ' đặt trước, nếu dòng kế lỗi thì nó giữ trị này
                        sh1.Cells(i, j + 1).Value = wsFunc.VLookup(sh1.Cells(i, 3).Value, rngLook, j - 2, 0)
                Next i
    Next j
    Exit Sub
    Application.ScreenUpdating = True
End Sub

1. Không dùng WorksheetFunction:
(bỏ dòng On Error Goto ... đi, vì nó vô dụng)
Mã:
Application.ScreenUpdating = False
    For j = 10 To lastCol
                For i = 7 To lr1
                        DR24 = Application.VLookup(sh1.Cells(i, 3).Value, rngLook, j - 2, 0)
                        If IsError(DR24) Then DR24 = "Dang cap nhat"
                        sh1.Cells(i, j + 1).Value = DR24
                Next i
    Next j
    Exit Sub
    Application.ScreenUpdating = True
End Sub

Chú: tôi chỉ mách cho nguyên tắc bẫy lỗi thôi. Code của bạn có hiệu quả hay không là chuyện khác.
 
Upvote 0
Cám ơn Hoàng anh Thơ!
Vấn đề đã được giải quyết một cách tuyệt vời!

Hihi, chắc bạn nhìn nhầm giữa thành viên viết bài với thành viên cảm ơn(like), người giúp bạn (viết bài #2) là bác @batman1 ạ chứ không phải Oanh Thơ ạ :)
--------------------------------
Nhân dịp đầu xuân Kỷ Hợi, Oanh xin kính chúc toàn thể Anh/Chị/Em/Cô/Gì/Chú/Bác một năm mới nhiều sức khỏe,công việc luôn thành công, cuộc sống gặp nhiều may mắn ạ.

OT
 
Upvote 0
Tết , nhà nước còn quy định nghỉ, mà các bác cứ chiến thế này: nghỉ ngơi đi thôi, nâng chén vui xuân.
Người hỏi thì cứ hỏi, ngay ngày đầu năm mới tết luôn.
 
Upvote 0
Tết , nhà nước còn quy định nghỉ, mà các bác cứ chiến thế này: nghỉ ngơi đi thôi, nâng chén vui xuân.
Người hỏi thì cứ hỏi, ngay ngày đầu năm mới tết luôn.

Bạn không hề nghe câu "khai bút đầu xuân" à?
Có lẽ tục ấy đã chết với thế hệ mới rồi :(:(:(
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom