Tìm tên trong cột bị lỗi

Liên hệ QC

alex-luu

Thành viên thường trực
Tham gia
10/3/15
Bài viết
300
Được thích
52
Chào các anh chị,
Em gặp 1 cái lỗi rất lạ, em có 1 file report xuất từ phần mềm xuống. Công việc của em là hàng tháng, copy file report đó vào file tổng rồi dùng nội dung đó làm dữ liệu cho các sheet khác lookup vào.

Nhưng không hiểu sao, em copy nội dung report đó, paste value vào sheet2 của file tổng hợp thì rất nhiều chỗ lookup bị NA. Em tìm thì mới phát hiện ra, có 1 số cái tên , rõ ràng là có, nhưng em chọn cột D, nhấn CTRL F tìm thì nó báo không có , em thử dùng filter, nó cũng báo không có . Nhưng nếu em nhấn delete, xóa bỏ nó đi rồi gõ lại thủ công thì lại tìm có.

Một số cái tên bị (không phải tất cả) như : Đàm Anh Tú , Đinh Đức Chi ....

1627053720506.png

1627053759551.png

1627053801945.png

1627053834707.png
 

File đính kèm

  • report.xlsx
    41.1 KB · Đọc: 3
  • tong hop.xlsx
    28.7 KB · Đọc: 7
Lần chỉnh sửa cuối:
Do chữ Đ trong file nó đặc biệt thôi, copy chữ Đ trong file, rồi dùng chức năng tìm kiếm và thay để thay thế chứ Đ đó bằng chữ Đ tự đánh bằng bàn phím là được
 
99% là do loại phông chữ không thống nhất.
Cái tên ở E23 là do tôi gõ vào

1627058864994.png

Tạm kết luận:
Cái Database mà phần mềm kia dựa vào để xuất ra chứa dữ liệu không thống nhất về cơ cấu.
 
Do chữ Đ trong file nó đặc biệt thôi, copy chữ Đ trong file, rồi dùng chức năng tìm kiếm và thay để thay thế chứ Đ đó bằng chữ Đ tự đánh bằng bàn phím là được
Không phải chỉ chữ Đ không đâu thôi bạn, nhiều lắm , Ví dụ Lương Đức Việt ...
Thử dùng hàm VLOOKUP("Tên", $D$3:$F$10000,3,0) nó ra NA ở rất nhiều chỗ. File report của mình khoảng hơn 10.000 dòng, mình xóa bớt cho nhẹ file để up lên đây thôi.

1627058943678.png
Bài đã được tự động gộp:

99% là do loại phông chữ không thống nhất.
Cái tên ở E23 là do tôi gõ vào

View attachment 262911

Tạm kết luận:
Cái Database mà phần mềm kia dựa vào để xuất ra chứa dữ liệu không thống nhất về cơ cấu.
Nếu vậy mình có cách nào xử lý không bạn. Mình thì chắc chắn không thể can thiệp vào database của phần mềm vì nó ở HO gởi xuống, mình chỉ là người làm báo cáo thôi.
 
...

Nếu vậy mình có cách nào xử lý không bạn. Mình thì chắc chắn không thể can thiệp vào database của phần mềm vì nó ở HO gởi xuống, mình chỉ là người làm báo cáo thôi.
Xử lý: tôi không biết nhiều về phông. Và cũng không có hứng muốn tìm hiểu thêm. Chịu khó chờ ở đây có vài người chuyên về cái này.

Can thiệp vào database của HO: đương nhiên là họ chả nghe bạn. Nhưng nếu bạn khéo léo tung tin đồn là database của họ bị vấn đề như thế thì khi đến tai họ sẽ tự biết mắc cở mà sửa.
 
thì nó vẫn chứa chứ Đ đó thôi bạn, trong tiếng việt có mấy chữ có thể có nhiều điểm mã: Đ, Ă, Â... mấy ký tự
Mình làm như bạn chỉ, nhấn Ctrl H, copy 1 chữ Đ trong tên Đàm Anh Tú, paste vào ô Find what ,rồi ô Replace with mình nhập tay chữ Đ, nhấn Replace All, nó báo vậy (thấy câu báo là thấy hổng êm rồi , hihihi). Sau đó tìm lại tên Đàm Anh Tú thì vẫn như cũ, không thấy.
Mình cũng đã thử đổi font chữ nguyên sheet thành 1 font khác, cũng không ăn thua
1627059694661.png
Bài đã được tự động gộp:

Đúng như bạn nói, tất cả những cái tên lỗi đều có chữ Đ trong tên. Hic, nhưng giờ Replace không được. Mình đã thử, nhấn F2 (kiểu sửa tên) rồi enter thì vẫn không được, mà phải xóa bỏ bằng phím delete , rồi nhập tay lại toàn bộ họ tên thì lại được.
thì nó vẫn chứa chứ Đ đó thôi bạn, trong tiếng việt có mấy chữ có thể có nhiều điểm mã: Đ, Ă, Â... mấy ký tự
 
Lần chỉnh sửa cuối:
Chào các anh chị,
Em gặp 1 cái lỗi rất lạ, em có 1 file report xuất từ phần mềm xuống.

Nhưng không hiểu sao, em copy nội dung report đó, paste value vào sheet2 của file tổng hợp thì rất nhiều chỗ lookup bị NA. Em tìm thì mới phát hiện ra, có 1 số cái tên , rõ ràng là có, nhưng em chọn cột D, nhấn CTRL F tìm thì nó báo không có ,

View attachment 262904

View attachment 262905
Không tìm thấy bởi "Đ" trong ô D17 và "Đ" do bạn gõ trong Find & Replace không như nhau. Nhiều khi nhìn cái gì đó nó thế nhưng không phải thế. Rõ ràng hot girl, nhưng nhìn kỹ hóa ra thằng H. mới đi Thái về.

"Đ" trong ô D17 và "Đ" gõ bằng Unikey không như nhau. Dễ thử nghiệm: copy D17 vào H1 -> trong H2 gõ "Đ" bằng Unikey -> chạy code
Mã:
Sub test()
Dim s As String
    s = Sheet2.Range("H1").Value
    s = Mid(s, 1, 1)
    Debug.Print Hex(AscW(s))
   
    s = Sheet2.Range("H2").Value
    s = Mid(s, 1, 1)
    Debug.Print Hex(AscW(s))
End Sub
Ta có 2 kết quả:
D0 (hex)
110 (hex)

Hai ký tự "Đ" rõ ràng có mã khác nhau.

Chạy code
Mã:
Sub test2()
    Sheet2.Range("J1").Value = ChrW(&HD0)
    Sheet2.Range("J2").Value = ChrW(&H110)
End Sub
Mắt nhìn thấy rõ ràng J1 và J2 như nhau, 2 hot girl. Nhưng thực tế là chỉ 1 cô nàng là hàng thật, còn nàng kia là hàng giả.

"Đ" trong ô D17 là ký tự unicode có điểm mã = D0 (hex = 00D0) và tên là "LATIN CAPITAL LETTER ETH"

1.jpg

"Đ" gõ bằng Unikey là ký tự unicode có điểm mã = 110 (hex = 0110) và tên là "LATIN CAPITAL LETTER D WITH STROKE"

2.jpg

Rõ ràng 2 ký tự khác nhau, có điểm mã khác nhau và tên khác nhau.

Ký tự tạo ra từ Unikey, có điểm mã = 0110 (hex), phù hợp với TCVN 6909:2001

3.jpg

Kết luận: phần mềm không dùng đúng các ký tự được liệt kê trong TCVN 6909:2001

Khắc phục: dò xem những ký tự nào xuất không đúng chuẩn, và viết code chuyển các ký tự đó trong dữ liệu về chuẩn.
 
Xin lỗi, ở bài #3 và #6 trên tôi dùng từ ngữ sai.
Xin đọc từ "phông" là "kiểu mã ký tự".
Vấn đề của thớt là mã ký tự khác nhau (điển hình là ký tự Đ), tuy rằng nhìn theo hiển thị trên ứng dụng Excel thì chúng giống nhau.

Mình làm như bạn chỉ, nhấn Ctrl H, copy 1 chữ Đ trong tên Đàm Anh Tú, paste vào ô Find what ,rồi ô Replace with mình nhập tay chữ Đ, nhấn Replace All, nó báo vậy (thấy câu báo là thấy hổng êm rồi , hihihi). Sau đó tìm lại tên Đàm Anh Tú thì vẫn như cũ, không thấy.
...
Với dữ liệu file của bạn, tôi replace được 256 mống.
Và kết quả ngon lành.

1627063553530.png
 
Không tìm thấy bởi "Đ" trong ô D17 và "Đ" do bạn gõ trong Find & Replace không như nhau. Nhiều khi nhìn cái gì đó nó thế nhưng không phải thế. Rõ ràng hot girl, nhưng nhìn kỹ hóa ra thằng H. mới đi Thái về.

"Đ" trong ô D17 và "Đ" gõ bằng Unikey không như nhau. Dễ thử nghiệm: copy D17 vào H1 -> trong H2 gõ "Đ" bằng Unikey -> chạy code
Mã:
Sub test()
Dim s As String
    s = Sheet2.Range("H1").Value
    s = Mid(s, 1, 1)
    Debug.Print Hex(AscW(s))
  
    s = Sheet2.Range("H2").Value
    s = Mid(s, 1, 1)
    Debug.Print Hex(AscW(s))
End Sub
Ta có 2 kết quả:
D0 (hex)
110 (hex)

Hai ký tự "Đ" rõ ràng có mã khác nhau.

Chạy code
Mã:
Sub test2()
    Sheet2.Range("J1").Value = ChrW(&HD0)
    Sheet2.Range("J2").Value = ChrW(&H110)
End Sub
Mắt nhìn thấy rõ ràng J1 và J2 như nhau, 2 hot girl. Nhưng thực tế là chỉ 1 cô nàng là hàng thật, còn nàng kia là hàng giả.

"Đ" trong ô D17 là ký tự unicode có điểm mã = D0 (hex = 00D0) và tên là "LATIN CAPITAL LETTER ETH"

View attachment 262918

"Đ" gõ bằng Unikey là ký tự unicode có điểm mã = 110 (hex = 0110) và tên là "LATIN CAPITAL LETTER D WITH STROKE"

View attachment 262919

Rõ ràng 2 ký tự khác nhau, có điểm mã khác nhau và tên khác nhau.

Ký tự tạo ra từ Unikey, có điểm mã = 0110 (hex), phù hợp với TCVN 6909:2001

View attachment 262920

Kết luận: phần mềm không dùng đúng các ký tự được liệt kê trong TCVN 6909:2001

Khắc phục: dò xem những ký tự nào xuất không đúng chuẩn, và viết code chuyển các ký tự đó trong dữ liệu về chuẩn.
Trăm sự em nhờ anh giúp, nếu có thể sẵn tiện anh viết cho em cái code import, để em click chuột 1 phát, nó sẽ hỏi em file report nằm ở đâu, rồi sau khi em cho nó biết thì nó lấy luôn vùng $B$9:$H$10000 , đưa thẳng vào vùng $E$9:$K$10000, trong sheet2 của file tổng hợp, rồi nó chuyển hết mấy cái định dạng như anh nói, chuyển về định dạng chuẩn gì đó (vụ này thì em chịu, không hiểu luôn á). Vậy là em cảm ơn nhiều nhiều lắm.
Bài đã được tự động gộp:

Xin lỗi, ở bài #3 và #6 trên tôi dùng từ ngữ sai.
Xin đọc từ "phông" là "kiểu mã ký tự".
Vấn đề của thớt là mã ký tự khác nhau (điển hình là ký tự Đ), tuy rằng nhìn theo hiển thị trên ứng dụng Excel thì chúng giống nhau.


Với dữ liệu file của bạn, tôi replace được 256 mống.
Và kết quả ngon lành.

View attachment 262921
Bạn Replace cách nào hay vậy. Nãy giờ mình suy nghĩ hay là có cách gì viết 1 đoạn code import data, để nó auto lấy nguyên cái file report, đưa vào sheet 2 cỉa file tổng hợp, rồi nó auto định dạng lại data theo chuẩn nào mà mình có thể dùng để lookup được thì hay quá.
 
Trăm sự em nhờ anh giúp, nếu có thể sẵn tiện anh viết cho em cái code import, để em click chuột 1 phát, nó sẽ hỏi em file report nằm ở đâu, rồi sau khi em cho nó biết thì nó lấy luôn vùng $B$9:$H$10000 , đưa thẳng vào vùng $E$9:$K$10000, trong sheet2 của file tổng hợp, rồi nó chuyển hết mấy cái định dạng như anh nói, chuyển về định dạng chuẩn gì đó (vụ này thì em chịu, không hiểu luôn á).
Cái này là tương ứng 1:1 thôi. Bạn dò xem những ký tự Việt nào (rõ ràng là số hữu hạn) mà phần mềm dùng không chuẩn, vì không phải là tất cả, và liệt kê các ký tự đó ra "một chỗ". Code sẽ đọc từng dữ liệu nguồn (STRING) -> duyệt từng ký tự từ đầu tới cuối -> nếu gặp ký tự có trong "một chỗ" thì chuyển nó sang ký tự tương ứng có trong TCVN -> chuỗi kết quả thay thế cho chuỗi nguồn. Thế thôi.

Code thì nhiều người viết được, bạn nhờ tất cả nhé. Nhưng phải có những ký tự mà phần mềm dùng chưa chuẩn thì mới biết ký tự nào cần chuyển về chuẩn chứ. Ngoài bạn không ai biết những ký tự đó có mã như thế nào. Việc từ một đống dữ liệu, có thể là nhiều đống vì 1 đống có thể không có hết các ký tự Việt cần kiểm tra, dò xem những ký tự nào phần mềm dùng chưa chuẩn là việc rất mất thời gian. Có lẽ bạn phải làm việc dò này vì có thể không ai cầy hộ bạn đâu.

Cái việc viết code chỉnh sửa là việc viết một lần dùng muôn đời. Dùng cho những trường hợp trong tương lai nữa. Việc chỉnh sửa đâu chỉ cần trong 1 tập tin này.
 
Copy đúng cái chỗ đã sửa rồi thì coi như công không, chọn chính xác chữ Đ đang bị lỗi ròi copy mới có tác dụng, mình thay thế xong thì tìm kiếm đã ngon lành trở lại.
Bạn hướng dẫn mình cách thay thế như bạn nói đi, vì mình thật sự không biết cách làm. Cảm ơn bạn
Bài đã được tự động gộp:

Cái này là tương ứng 1:1 thôi. Bạn dò xem những ký tự Việt nào (rõ ràng là số hữu hạn) mà phần mềm dùng không chuẩn, vì không phải là tất cả, và liệt kê các ký tự đó ra "một chỗ". Code sẽ đọc từng dữ liệu nguồn (STRING) -> duyệt từng ký tự từ đầu tới cuối -> nếu gặp ký tự có trong "một chỗ" thì chuyển nó sang ký tự tương ứng có trong TCVN -> chuỗi kết quả thay thế cho chuỗi nguồn. Thế thôi.

Code thì nhiều người viết được, bạn nhờ tất cả nhé. Nhưng phải có những ký tự mà phần mềm dùng chưa chuẩn thì mới biết ký tự nào cần chuyển về chuẩn chứ. Ngoài bạn không ai biết những ký tự đó có mã như thế nào. Việc từ một đống dữ liệu, có thể là nhiều đống vì 1 đống có thể không có hết các ký tự Việt cần kiểm tra, dò xem những ký tự nào phần mềm dùng chưa chuẩn là việc rất mất thời gian. Có lẽ bạn phải làm việc dò này vì có thể không ai cầy hộ bạn đâu.

Cái việc viết code chỉnh sửa là việc viết một lần dùng muôn đời. Dùng cho những trường hợp trong tương lai nữa. Việc chỉnh sửa đâu chỉ cần trong 1 tập tin này.
mình đã ngồi kiểm tra toàn bộ, và đúng là tất cả những cái tên nào có chữ Đ trong đó là đều bị NA hết ==> chỉ cần thay thế chữ Đ về định dạng chuẩn. Mình thì không biết code, nên mong nhờ các anh chị trên diễn đàn hỗ trợ giúp
 
mình đã ngồi kiểm tra toàn bộ, và đúng là tất cả những cái tên nào có chữ Đ trong đó là đều bị NA hết ==> chỉ cần thay thế chữ Đ về định dạng chuẩn. Mình thì không biết code, nên mong nhờ các anh chị trên diễn đàn hỗ trợ giúp
Nếu bạn cho là chỉ có vấn đề với Đ thì thử như sau: trong mỗi tập tin hãy thêm code dưới đây -> chạy code -> chọn vùng cần thao tác, vd. D3: D338 -> OK
Mã:
Sub chuyenD()
Dim cell_ As Range, rng As Range
    On Error Resume Next
    Set rng = Application.InputBox("Hay chon vung can thao tac", Type:=8)
    If rng Is Nothing Then Exit Sub
    On Error GoTo 0
    For Each cell_ In rng
        cell_.Value = Replace(cell_.Value, ChrW(&HD0), ChrW(&H110))
    Next cell_
End Sub
 
Đây là danh sách các ký tự không tìm thấy trong cột [Họ & Tên] trên file của bạn:

KTTT
1​
2​
3​
É
4​
é
5​
È
6​
è
7​
8​
9​
10​
11​
12​
13​
14​
15​
16​
17​
18​
19​
20​
21​
22​
23​
24​
25​
26​
27​
28​
29​
Đ
30​
đ
31​
 
Lần chỉnh sửa cuối:
Nếu bạn cho là chỉ có vấn đề với Đ thì thử như sau: trong mỗi tập tin hãy thêm code dưới đây -> chạy code -> chọn vùng cần thao tác, vd. D3: D338 -> OK
Mã:
Sub chuyenD()
Dim cell_ As Range, rng As Range
    On Error Resume Next
    Set rng = Application.InputBox("Hay chon vung can thao tac", Type:=8)
    If rng Is Nothing Then Exit Sub
    On Error GoTo 0
    For Each cell_ In rng
        cell_.Value = Replace(cell_.Value, ChrW(&HD0), ChrW(&H110))
    Next cell_
End Sub
Ôi, được rồi anh ạ, Cảm ơn anh nhiều lắm. Có điều nó chạy khá lâu, em thay câu lệnh
Set rng = Application.InputBox("Hay chon vung can thao tac", Type:=8)
bằng câu lệnh
Set rng =Range(D9: D10000)
Nó chạy gần 5 phút sau mới xong. Có thể làm cho nó nhanh hơn chút được không ạ , hihi, em cảm ơn
 
Lần chỉnh sửa cuối:
...
Bạn Replace cách nào hay vậy. Nãy giờ mình suy nghĩ hay là có cách gì viết 1 đoạn code import data, để nó auto lấy nguyên cái file report, đưa vào sheet 2 cỉa file tổng hợp, rồi nó auto định dạng lại data theo chuẩn nào mà mình có thể dùng để lookup được thì hay quá.
Bởi vì bạn chia mất 1/2 đầu óc ra nghĩ chuyện "auto" và "viết code" cho nên chính bản thân không thiết tha với chuyện "thủ công". Mà đã không thiết tha thì chính tiềm thức nó sẽ tìm đủ mọi lý do để không làm được.

Trong cái file ban đầu, trước khi chỉnh sửa gì cả, click vào đúng ô chứa cái tên "Đàm Anh Tú"
1627100824862.png
Đặt con trỏ ngay trước Đ, bấm và giữ phím shift, gõ phím mũi tên phải. Làm như vậy sẽ được nó chọn ký tự Đ như hình trên.
Bấm Ctrl+C (tức là copy cái đang chọn)
Bấm Esc để ra khỏi chế độ edit cell.
Bấm Ctrl+h (Find/Replace)
Ở Find What, bấm Ctrl+V (tức là paste cái đã copied xuống)
Ở Replace With, gõ ký tự Đ
Replace All sẽ replace một đống.
 
Web KT
Back
Top Bottom