• Nghi vấn bug lỗi dấu ngã khi vlookup trong Excel
  • Nghi vấn bug lỗi dấu ngã khi vlookup trong Excel

    Noname > 20-05-21, 06:02 PM

    Mình vừa bị lỗi khi vlookup ô có dấu Ngã (~) trong Excel, trong khi cũng cùng giá trị đó, mình Sumif thì bình thường.
    Mọi người kiểm chứng nhé

    [Hình: f7H7q6p.png]

    File ví dụ
    https://www.mediafire.com/file/ffgdsiuf9....xlsx/file
  • RE: Nghi vấn bug lỗi dấu ngã khi vlookup trong Excel

    ongke0711 > 20-05-21, 10:17 PM

    Theo tôi suy luận thì lỗi này do cách mà hàm SUMIF() và VLOOKUP() đối xử khác nhau với dấu "~".
    - Đối với VLOOKUP thì nó thuộc về tìm kiếm nên khi chuỗi điều kiện có dấu "~" nó xem như một ký tự đại diện (wildcards) như các ký tự "*", "?" v.v.. Vì vậy khi tìm chuỗi "KT 3~4" --> tìm "KT3" + chính xác ký tự "4" <=>Tìm chuỗi "KT34" mà chuỗi này không có trong bảng tham chiếu.
    - Đối với SUMIF thì nó như so sánh chính xác chuỗi chứ không tìm kiếm với Wildcards. Nếu chuỗi "KT 3~4" trong Range 1 bằng chuỗi "KT 3~4" trong Range 2 thì lấy SUM.

    Tận dụng việc VLOOKUP xem "~" như ký tự đại diện - tìm chính xác ký tự đứng sau nó. Ta dùng hàm SUBTITUTE thay thế nó
    Vd: =VLOOKUP(SUBSTITUTE(B13,"~","~~"),$B$3:$C$7,2,0)

    Đây chỉ là suy luận cá nhân thôi nhé chứ không đủ trình để phân tích Source code của 2 hàm trên với C++ để xem nó hoạt động như thế nào.  014
  • RE: Nghi vấn bug lỗi dấu ngã khi vlookup trong Excel

    Noname > 24-05-21, 12:10 PM

    (20-05-21, 10:17 PM)ongke0711 Đã viết: Theo tôi suy luận thì lỗi này do cách mà hàm SUMIF() và VLOOKUP() đối xử khác nhau với dấu "~".
    - Đối với VLOOKUP thì nó thuộc về tìm kiếm nên khi chuỗi điều kiện có dấu "~" nó xem như một ký tự đại diện (wildcards) như các ký tự "*", "?" v.v.. Vì vậy khi tìm chuỗi "KT 3~4" --> tìm "KT3" + chính xác ký tự "4" <=>Tìm chuỗi "KT34" mà chuỗi này không có trong bảng tham chiếu.
    - Đối với SUMIF thì nó như so sánh chính xác chuỗi chứ không tìm kiếm với Wildcards. Nếu chuỗi "KT 3~4" trong Range 1 bằng chuỗi "KT 3~4" trong Range 2 thì lấy SUM.

    Tận dụng việc VLOOKUP xem "~" như ký tự đại diện - tìm chính xác ký tự đứng sau nó. Ta dùng hàm SUBTITUTE thay thế nó
    Vd: =VLOOKUP(SUBSTITUTE(B13,"~","~~"),$B$3:$C$7,2,0)

    Đây chỉ là suy luận cá nhân thôi nhé chứ không đủ trình để phân tích Source code của 2 hàm trên với C++ để xem nó hoạt động như thế nào.  014

    Có vẻ suy luận của bác là đúng, sau khi dùng substitute để thay thế "~" thành"~~" thì lookup thấy rồi.