Nhờ các anh chị diễn đàn GPE sửa giúp em đoạn code ạ

Liên hệ QC

MỹHạnhCB

Đi mây, về gió. !!!
Tham gia
25/3/22
Bài viết
123
Được thích
18
Em xin chào các anh chị GPE.
Em muốn tìm tên được truyền vào ở ô "F1" sheets"KetQua" với dữ liệu của những cột chứa "Tên" và "Tên mới" của sheets"TongHop". Nếu trùng thì sẽ lấy dữ liệu của hàng đó và trả về ở sheets"KetQua".
Em có gửi file mẫu đính kèm và "code" em đã thực hiện ạ. (em chạy có nháp 5 dòng dữ liệu mà sao đơ luôn máy, dữ liệu thực có thể lên hơn 10.000 dòng và hơn 150 cột ạ).
Em xin cám ơn nhiều
 

File đính kèm

  • ScansName_HOI.xlsm
    980.4 KB · Đọc: 21
Em xin chào các anh chị GPE.
Em muốn tìm tên được truyền vào ở ô "F1" sheets"KetQua" với dữ liệu của những cột chứa "Tên" và "Tên mới" của sheets"TongHop". Nếu trùng thì sẽ lấy dữ liệu của hàng đó và trả về ở sheets"KetQua".
Em có gửi file mẫu đính kèm và "code" em đã thực hiện ạ. (em chạy có nháp 5 dòng dữ liệu mà sao đơ luôn máy, dữ liệu thực có thể lên hơn 10.000 dòng và hơn 150 cột ạ).
Em xin cám ơn nhiều
Có 5 dòng mà đã đơ rồi á
 
Upvote 0
Mình thấy font chữ ở 2 sheet kết quả và tổng hợp không giống nhau
Dạ đúng rồi anh, đó là lý do không tìm được khi thực hiện nhập tên vào. Không biết anh có thể chuyển thành không dấu hết trước để mình thực hiện tìm kiếm được không anh nhỉ?
 
Upvote 0
Dạ đúng rồi anh, đó là lý do không tìm được khi thực hiện nhập tên vào. Không biết anh có thể chuyển thành không dấu hết trước để mình thực hiện tìm kiếm được không anh nhỉ?
Cũng có thể xài cách căn cơ hơn đó là:
Tạo bảng danh mục gồm chí ít 2 trường [Mã] & [Họ & Tên]
Ví dụ:

Mã NVHọ & Tên
BXT00Bùi Xuân Thắm
BXT01Bùi Thị Xuân Thành
CCH00Châu Chấn Huy
CJL00Cù Lân
CMN00Công Tằng Tôn Nữ Minh Nguyệt
CNM00Công Tằng Tôn Nữ Nguyệt Minh
CNS00Chu Ngọc Sơn
CVA00Cỗ Văn Ẩn
DAH00Dương Ánh Hòa
FFD00Đào Đức Dương
FFD01Đỗ Đăng Dung
FLT00Đinh La Thăng
LCM00Lê Công Minh
LCM01Lã Chí Mai
LCT00Lê Công Thành
NHB00Nguyễn Hòa Bình
NHB01Ngô Thị Hòa Biền
NHB02Nhữ Thái Hải Hà
 
Upvote 0
Cũng có thể xài cách căn cơ hơn đó là:
Tạo bảng danh mục gồm chí ít 2 trường [Mã] & [Họ & Tên]
Ví dụ:

Mã NVHọ & Tên
BXT00Bùi Xuân Thắm
BXT01Bùi Thị Xuân Thành
CCH00Châu Chấn Huy
CJL00Cù Lân
CMN00Công Tằng Tôn Nữ Minh Nguyệt
CNM00Công Tằng Tôn Nữ Nguyệt Minh
CNS00Chu Ngọc Sơn
CVA00Cỗ Văn Ẩn
DAH00Dương Ánh Hòa
FFD00Đào Đức Dương
FFD01Đỗ Đăng Dung
FLT00Đinh La Thăng
LCM00Lê Công Minh
LCM01Lã Chí Mai
LCT00Lê Công Thành
NHB00Nguyễn Hòa Bình
NHB01Ngô Thị Hòa Biền
NHB02Nhữ Thái Hải Hà
dạ có nghĩa là lọc tất cả các tên có trong danh sách và cho mỗi tên 1 mã khác nhau hả anh?
 
Upvote 0
Em xin chào các anh chị GPE.
Em muốn tìm tên được truyền vào ở ô "F1" sheets"KetQua" với dữ liệu của những cột chứa "Tên" và "Tên mới" của sheets"TongHop". Nếu trùng thì sẽ lấy dữ liệu của hàng đó và trả về ở sheets"KetQua".
Em có gửi file mẫu đính kèm và "code" em đã thực hiện ạ. (em chạy có nháp 5 dòng dữ liệu mà sao đơ luôn máy, dữ liệu thực có thể lên hơn 10.000 dòng và hơn 150 cột ạ).
Em xin cám ơn nhiều
Chỉnh lại Unicode tổ hợp với Unicode dựng sẵn bạn thử code này.
Mã:
Sub abc()
    Dim i As Long, lr As Long, T(), kq, dk As String, ten As String, tenmoi As String
    Dim arr, b As Long, j As Integer, a As Long, k As Integer
    With Sheets("Ketqua")
         dk = UCase(.Range("F1").Value)
    End With
    With Sheets("Tonghop")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         arr = .Range("A1:DJ" & lr).Value
         ReDim kq(1 To UBound(arr), 1 To 114)
         ten = "Tên"
         tenmoi = "Tên m" & ChrW(7899) & "i"
         For i = 1 To 88
             If arr(1, i) = ten Or arr(1, i) = tenmoi Then
                b = b + 1
                ReDim Preserve T(1 To b)
                T(b) = i
             End If
         Next i
         For i = 2 To UBound(arr)
             For j = 1 To b
                 If InStr(UCase(arr(i, T(j))), dk) > 0 Then
                    a = a + 1
                    For k = 1 To 114
                        kq(a, k) = arr(i, k)
                    Next k
                    Exit For
                 End If
             Next j
         Next i
    End With
    With Sheets("ketqua")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr > 2 Then .Range("A3:DJ" & lr).ClearContents
         If a Then .Range("A3:DJ3").Resize(a).Value = kq
    End With
   
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Chỉnh lại Unicode tổ hợp với Unicode dựng sẵn bạn thử code này.
Mã:
Sub abc()
    Dim i As Long, lr As Long, T(), kq, dk As String, ten As String, tenmoi As String
    Dim arr, b As Long, j As Integer, a As Long, k As Integer
    With Sheets("Ketqua")
         dk = UCase(.Range("F1").Value)
    End With
    With Sheets("Tonghop")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         arr = .Range("A1:DJ" & lr).Value
         ReDim kq(1 To UBound(arr), 1 To 88)
         ten = "Tên"
         tenmoi = "Tên m" & ChrW(7899) & "i"
         For i = 1 To 88
             If arr(1, i) = ten Or arr(1, i) = tenmoi Then
                b = b + 1
                ReDim Preserve T(1 To b)
                T(b) = i
             End If
         Next i
         For i = 2 To UBound(arr)
             For j = 1 To b
                 If InStr(UCase(arr(i, T(j))), dk) > 0 Then
                    a = a + 1
                    For k = 1 To 88
                        kq(a, k) = arr(i, k)
                    Next k
                    Exit For
                 End If
             Next j
         Next i
    End With
    With Sheets("ketqua")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr > 2 Then .Range("A3:DJ" & lr).ClearContents
         If a Then .Range("A3:DJ3").Resize(a).Value = kq
    End With
   
End Sub
Vâng cám ơn anh ạ, em sẽ làm thử ạ
Chỉnh lại Unicode tổ hợp với Unicode dựng sẵn bạn thử code này.
Em vẫn không biết cách đổi kiểu chữ như thế nào ạ. Mong anh giúp ạ
 
Upvote 0
dạ có nghĩa là lọc tất cả các tên có trong danh sách và cho mỗi tên 1 mã khác nhau hả anh?
Chịu khó tạo lại danh sách (duy nhất càng tốt) toàn thể những ai có trong 2 cột bạn đã nêu;
Sau đó tạo cho họ mã duy nhất;
& chỉ sau khi í, ta chỉ làm việc với mã, không làm với [Họ & Tên]

Mà sao dữ liệu của bạn lôm côm quá vậy:

TênTên mới
Đinh Xuân Phát - Nguyễn Thị Mai Loan
lưu đức hoa + bé 7
anh 4
Đinh Xuân Phát - Nguyễn Thị Mai Loan
Từ Mỹ Nga, chacha
Trần Văn Qúi + Đoàn Thị Nguyệt, Lưu Á Hoa
 
Upvote 0
Dạ không anh, dòng thông tin phía trên là cố định ạ.
Ngoài tên ở cột J thì các tên mới bắt đầu từ cột AD và cách nhau 8 cột?

KetQua!F1 = Đinh Xuân Phát unicode dựng sẵn có LEN = 14
TongHop!J2 chứa Đinh Xuân Phát unicode tổ hợp có LEN = 15

Vì lý do trên khi tìm thì chắc chắn không tìm được. Không thể biến thành không dấu rôi tìm vì có nhiều tên khác nhau nhưng bỏ dấu thì giống nhau. Vd. "Lê Ánh My" và "Lê Anh Mỵ"

Ngoài ra hãy mô tả dữ liệu đầu vào. Hiện thời tôi thấy dạng "Tên" (1 tên), "Tên 1, Tên 2", "Tên 1 +- Tên 2" (2 tên cách nhau dấu phẩy, dấu trừ hoặc dấu cộng). Trước và/hoặc sau dấu phẩy cộng trừ luôn có 1 dấu cách. Có luôn 1 dấu cách hay có thể không có hoặc có nhiều dấu cách? Phân cách là dấu phẩy cộng hoặc trừ hay còn có thể là dấu khác? Noi rõ ra, nói huỵch toẹt ra.

Nhập liệu bừa bãi, làm việc mà mỗi người thích thế nào thì nhập thế đó rồi mất công chỉnh sửa? Riêng khoản luôn dùng 1 loại unicode, vd. unicode dựng sẵn, đã đỡ nhiều công sức về sau.

Chỉnh lại Unicode tổ hợp với Unicode dựng sẵn bạn thử code này.
Sao tôi thử code của bạn thì không tìm thấy? Tôi làm như sau.

TongHop!J2 = "Đinh Xuân Phát - Nguyễn Thị Mai Loan" trong đó "Nguyễn Thị Mai Loan" là unicode tổ hợp. Tôi chuyển về thành "Nguyễn Thị Mai Loan" unicode dựng sẵn. Tôi copy "Nguyễn Thị Mai Loan" từ TongHop!J2 = "Đinh Xuân Phát - Nguyễn Thị Mai Loan" và dán vào TextBox tại KetQua!F1. Như vậy code phải tìm thấy. Nhưng chạy code không ra kết quả.
 
Upvote 0
Chịu khó tạo lại danh sách (duy nhất càng tốt) toàn thể những ai có trong 2 cột bạn đã nêu;
Sau đó tạo cho họ mã duy nhất;
& chỉ sau khi í, ta chỉ làm việc với mã, không làm với [Họ & Tên]

Mà sao dữ liệu của bạn lôm côm quá vậy:

TênTên mới
Đinh Xuân Phát - Nguyễn Thị Mai Loan
lưu đức hoa + bé 7
anh 4
Đinh Xuân Phát - Nguyễn Thị Mai Loan
Từ Mỹ Nga, chacha
Trần Văn Qúi + Đoàn Thị Nguyệt, Lưu Á Hoa
Dạ dữ liệu do gom từ nhiều nguồn về nên có không đồng bộ được ạ. Vâng, cám ơn anh đã hướng dẫn
 
Upvote 0
Chuyện không đồng bộ ta có thể để sau;
Chuyện giờ có thể là vầy:

Họ & Tên
FXP00Đinh Xuân Phát
NML00Nguyễn Thị Mai Loan
TMN00Từ Mỹ Nga
TVQ00Trần Văn Quí
FTN00Đoàn Thị Nguyệt
LAH00Lưu Ái Hoa
FXP01Đỗ Xuân Phi
NML01Ngô T. Mỹ Lan

(Vấn đề là các mã này không bị ảnh hưởng bỡi Font chữ thông thường nào hết.)
 
Upvote 0
Vâng cám ơn anh ạ, em sẽ làm thử ạ

Em vẫn không biết cách đổi kiểu chữ như thế nào ạ. Mong anh giúp ạ
Bạn Copy dữ liệu cần chuyển rồi bấm tổ hợp ctrl+shift+F6 ra bảng unicode chọn nguồn và đích đều là unicode bấm vào chuyển mã xong dán vào ô excel là xong.
Sao tôi thử code của bạn thì không tìm thấy? Tôi làm như sau.

TongHop!J2 = "Đinh Xuân Phát - Nguyễn Thị Mai Loan" trong đó "Nguyễn Thị Mai Loan" là unicode tổ hợp. Tôi chuyển về thành "Nguyễn Thị Mai Loan" unicode dựng sẵn. Tôi copy "Nguyễn Thị Mai Loan" từ TongHop!J2 = "Đinh Xuân Phát - Nguyễn Thị Mai Loan" và dán vào TextBox tại KetQua!F1. Như vậy code phải tìm thấy. Nhưng chạy code không ra kết quả.
Em thử thì vẫn thấy có kết quả mà anh.
 
Upvote 0
Em thử thì vẫn thấy có kết quả mà anh.
Chắc chắn là tôi không có kết quả. Cả ngay bây giờ cũng không có kết quả.

Vì tò mò tôi đã kiểm tra. Tôi so sánh code tôi dán vào VBE và code bài #12 thì có khác nhau.
1. Code bài #12 sau khi nhấn "Sao chép" rồi Ctrl + V vào VBE thì có

ten = "Ten"

2. Code bài #12

ten = "Tên"

Tức khi dán vào VBE thì bị chuyển thành ten = "Ten". Chính vì ten = "Ten" nên code không kiểm tra cột J (tiêu đề J là Tên chứ không là Ten), vì thế không tìm thấy.

Tôi không dùng Unikey nên cũng không thể thử tự gõ được, còn dùng bàn phím của Windows thì không được vì nó chỉ sản xuất ra unicode tổ hợp mà thôi (trong khi ngoài sheet là unicode dựng sẵn).

Tôi thay bằng (đã tạo chuỗi mã thì tạo toàn bộ chứ không nửa vời tenmoi = "Tên m" & ChrW(7899) & "i"):

ten = "T" & ChrW(234) & "n"
tenmoi = "T" & ChrW(234) & "n m" & ChrW(7899) & "i"


thì đã chạy có kết quả.

Tuy nhiên nhìn vào If InStr(UCase(arr(i, T(j))), dk) > 0 Then thì biết code chưa chuẩn. Vd. TongHop!J3 = "Đinh Xuân Phát - Nguyễn Thị Mai Loan" và KetQua!F1 = "Nguyễn Thị Mai" thì code vẫn tìm thấy trong khi Nguyễn Thị Mai Loan và Nguyễn Thị Mai là 2 tên khác nhau.
 
Upvote 0
Web KT

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

Back
Top Bottom