Hàm vlookup dò giá trị khác font. (9 người xem)

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

Người dùng đang xem chủ đề này

caocat

Thành viên chính thức
Tham gia
1/6/09
Bài viết
87
Được thích
9
Em chào cả nhà.
Em có 1 file gồm 2 sheet (sheet1, sheet2). Ở sheet 2 cột B (số lượng) em sử dụng vlookup để tìm tên hàng bên sheet1 lấy giá trị cột E (màu vàng). Nhưng do khác font nên hàm không ra kết quả.
Mong anh chị trong diễn đàn hướng dẫn cách đưa về 1 font. Sheet1 là font tiếng nhật, sheet2 là font Unicode.
Em cảm ơn.
 

File đính kèm

Em chào cả nhà.
Em có 1 file gồm 2 sheet (sheet1, sheet2). Ở sheet 2 cột B (số lượng) em sử dụng vlookup để tìm tên hàng bên sheet1 lấy giá trị cột E (màu vàng). Nhưng do khác font nên hàm không ra kết quả.
Mong anh chị trong diễn đàn hướng dẫn cách đưa về 1 font. Sheet1 là font tiếng nhật, sheet2 là font Unicode.
Em cảm ơn.
Của bạn không phải do lỗi phông, đó là do không có mã nào tại cột B bên sheet1 giống mã nào tại cột A bên sheet 2 cho dù đã cùng một phông, bạn nên kiểm tra lại nhé.
 
Không đúng mã là không có chứ sửa gì nữa bạn.
Dạ! Tên sản phẩm bên sheet2 dò bên sheet1 đều có một số mã. Nếu nhìn bằng mắt thì thấy là có. Chỉ là kiểu chữ nó khác nhau. Nên em không hiểu tại sao hàm không lấy kết quả được. Mong các anh chị trên GPE giúp em.
 
Dạ! Tên sản phẩm bên sheet2 dò bên sheet1 đều có một số mã. Nếu nhìn bằng mắt thì thấy là có. Chỉ là kiểu chữ nó khác nhau. Nên em không hiểu tại sao hàm không lấy kết quả được. Mong các anh chị trên GPE giúp em.
Cái này không phải lỗi font mà là 2 kí tự khác nhau, mặc dù nhìn thì cùng là "A" nhưng vị trí của chúng nó trong bảng mã Unicode cách nhau 65248 (cây số). Để Vloookup được thì bạn phải đưa nó về cùng một mối.
Mình viết một cái code VBA để bạn thực hiện việc này. Chỉ cần quét chọn vùng cần chuyển, bấm "Convert" là được.
Hiện tại thì mình chỉ chuyển các kí tự A-Z,0-9, và dấu "-". Dữ liệu trong file của bạn giờ chỉ gồm các kí tự này, sau này có phát sinh thêm thì bạn bổ sung vào cột A sheet "Bang do" (kí tự chuẩn nhập từ bàn phím), kéo công thức cột B xuống.
 

File đính kèm

Tìm google mà không thấy chỗ nào chỉ chuyển Shift_Jis sang UTF-8.
 
Cái này không phải lỗi font mà là 2 kí tự khác nhau, mặc dù nhìn thì cùng là "A" nhưng vị trí của chúng nó trong bảng mã Unicode cách nhau 65248 (cây số). Để Vloookup được thì bạn phải đưa nó về cùng một mối.
Mình viết một cái code VBA để bạn thực hiện việc này. Chỉ cần quét chọn vùng cần chuyển, bấm "Convert" là được.
Hiện tại thì mình chỉ chuyển các kí tự A-Z,0-9, và dấu "-". Dữ liệu trong file của bạn giờ chỉ gồm các kí tự này, sau này có phát sinh thêm thì bạn bổ sung vào cột A sheet "Bang do" (kí tự chuẩn nhập từ bàn phím), kéo công thức cột B xuống.
Dạ! Em cảm ơn nhiều. Chúc bác nhiều sức khoẻ.
Tiện thể nếu được bác chia sẻ thêm phần làm sao mình dò ra được khoảng cách trong bảng mã Unicode vậy ạ?
 
Dạ! Em cảm ơn nhiều. Chúc bác nhiều sức khoẻ.
Tiện thể nếu được bác chia sẻ thêm phần làm sao mình dò ra được khoảng cách trong bảng mã Unicode vậy ạ?
Không cần phần mềm đâu, bạn có thể dùng hàm UNICODE() của Excel. Tham khảo công thức mình làm ở cột B sheet "Bang do" nhé
 
1 cách khác, 1 cột sử dụng cột phụ sẽ nhẹ hơn và 1 cột không cột phụ khá nặng.
 

File đính kèm

Những ký tự nhìn thấy - ký tự văn bản có điểm mã từ 33 tới 126 (hex từ &H21 tới &H7E) mà hàng ngày ta gõ vd. trong Excel thuộc Unicode Block “Basic Latin” (xem https://www.compart.com/en/unicode/block/U+0000).

B1.jpg

Các ký tự nhìn bằng mắt thấy có vẻ giống như các ký tự kể trên chúng có điểm mã từ &FF01 tới &HFF5E, và thuộc Unicode Block “Halfwidth and Fullwidth Forms” (xem https://www.compart.com/en/unicode/block/U+FF00).

B2.jpg

Nếu các ký tự ở vùng 1 có tên vd. là Hichic thì ký tự nhìn có vẻ giống như thế nhưng ở vùng 2 sẽ có tên là Fullwidth Hichic. Vd. "A" hàng ngày ta gõ trên bàn phím có tên là LATIN CAPITAL LETTER A, còn "A" nhái kia có tên là FULLWIDTH LATIN CAPITAL LETTER A.

Từ đâu có 65248? Dễ thấy 65248 = &HFEE0.
Nhìn hình 1 ta thấy "A" có điểm mã là &H41 (hex), còn nhìn hình 2 thấy "A" nhái có điểm mã là &HFF21. 2 ký tự này có điểm mã cách nhau đúng &HFEE0 (65248) - &H41 + &HFEE0= &HFF21
----------
Code convert trong bài #10 chưa chuẩn. Cụ thể vd. kết quả cho B177 là "SI-E2軸筒(更新型)" (trước ( và sau ) nhìn thấy "dãn cách") trong khi phải là "SI-E2軸筒(更新型)", hoặc kết quả cho B161 là "STM-EC/T" trong khi phải là "STM-EC/T".

Tôi đề nghị như sau, không dám khẳng định là chuẩn nhưng ai thích thì thử.
Mã:
Sub convert()
Dim k As Long, r As Long, c As Long, code As Long, s As String, text As String, mot_o As Boolean, vung As Range, o_dau As Range, dulieu()
    On Error Resume Next
    Set vung = Application.InputBox("Hay chon vung du lieu can bien doi", Type:=8)
    If vung Is Nothing Then Exit Sub
    Set o_dau = Application.InputBox("Hay chon o dau tien cho ket qua", Type:=8)
    If o_dau Is Nothing Then Exit Sub
    On Error GoTo 0
    If vung.Count = 1 Then mot_o = True
    If mot_o Then
        dulieu = vung.Resize(2).Value
    Else
        dulieu = vung.Value
    End If
    Set o_dau = o_dau(1)
    For r = 1 To UBound(dulieu, 1) + mot_o
        For c = 1 To UBound(dulieu, 2)
            text = ""
            s = dulieu(r, c)
            For k = 1 To Len(s)
                code = AscW(Mid(s, k, 1))
                If code > &HFF00 And code < &HFF5F Then
                    text = text & Chr(code + 288)
                Else
                    text = text & ChrW(code)
                End If
            Next k
            dulieu(r, c) = text
        Next c
    Next r
    o_dau.Resize(UBound(dulieu, 1) + mot_o, UBound(dulieu, 2)).Value = dulieu
End Sub
 
Những ký tự nhìn thấy - ký tự văn bản có điểm mã từ 33 tới 126
Cám ơn bác, giờ em mới biết các kí tự thường dùng có mã code từ 33 đến 126. Qua đó sửa lại code của bài #10 như này cho chuẩn, không cần bảng dò luôn :p

PHP:
Sub convert2()
Dim i As Long
For i = 33 To 126
    Selection.Replace What:=ChrW(i + 65248), Replacement:=ChrW(i), SearchOrder:=xlByRows
Next
End Sub
 
Web KT

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

Back
Top Bottom