Giúp code kiểm tra và so sánh thông tin nhân viên

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Phương Phương mito

Thành viên thường trực
Tham gia
1/5/19
Bài viết
275
Được thích
65
Em chào anh chị và các bạn

Em có trường hợp này mong mọi người giúp code với ạ. Cột A là Ten_NV là cột làm điều kiện tìm kiếm cho 2 cột B (Noi_dung1) và cột D (Noi_dung2) cụ thể

-Kiểm tra từng tên nhân viên từng dòng tại cột A và so sánh với từng tên nhân viên có cấu trúc dữ liệu như tại cột B => Nếu trùng thì lấy thông tin nhân viên đó như tại cột B cho ra cột F (Check1)

--Kiểm tra từng tên nhân viên từng dòng tại cột A và so sánh với các dòng tại cột D mà bắt đầu bằng chữ Check thì mới bắt đầu so sánh còn bắt đầu bằng chữ khác không cần check. Và nếu check trùng tên thì lấy kết quả ra tại cột G (Check2).
 

File đính kèm

  • Kiem tra thong tin nhan vien.xlsm
    8.9 KB · Đọc: 17
Tách tất cả các chuỗi ở nội dung 1 và nội dung 2 theo dấu "-" rồi so sánh với chuỗi ở cột A. Cái nào có thì nhặt ra. Bạn hãy thử code theo hướng đó coi
 
Upvote 0
Tách tất cả các chuỗi ở nội dung 1 và nội dung 2 theo dấu "-" rồi so sánh với chuỗi ở cột A. Cái nào có thì nhặt ra. Bạn hãy thử code theo hướng đó coi
Bài này lằng nhằng ở chỗ trong một ô lại có nhiều dòng, cấu trúc kiểu này khổ cả người nhập dữ liệu và người xử lý dữ liệu.
 
Upvote 0
Em chào anh chị và các bạn

Em có trường hợp này mong mọi người giúp code với ạ. Cột A là Ten_NV là cột làm điều kiện tìm kiếm cho 2 cột B (Noi_dung1) và cột D (Noi_dung2) cụ thể

-Kiểm tra từng tên nhân viên từng dòng tại cột A và so sánh với từng tên nhân viên có cấu trúc dữ liệu như tại cột B => Nếu trùng thì lấy thông tin nhân viên đó như tại cột B cho ra cột F (Check1)

--Kiểm tra từng tên nhân viên từng dòng tại cột A và so sánh với các dòng tại cột D mà bắt đầu bằng chữ Check thì mới bắt đầu so sánh còn bắt đầu bằng chữ khác không cần check. Và nếu check trùng tên thì lấy kết quả ra tại cột G (Check2).
Chờ mãi để xem code xịn mà không được.
Còn đây là code kiểu củ chuối, nông dân chính hiệu.
Mong các thành viên ghé xem cho ý kiến để tôi và các thành viên khác có nhu cầu học hỏi có thêm kiến thức. Trân trọng cảm ơn.
Làm theo đề bài của file này.
Mã:
Sub CuChuoi()
Dim i&, j&, t&, k&, Lr&
Dim Arr(), KQ(), S, S2
Dim Dic As Object, Key, Tmp
With Sheets("Data")
Lr = .Cells(1000000, 1).End(3).Row
Arr = .Range("A2:D" & Lr).Value
Set Dic = CreateObject("Scripting.Dictionary")
ReDim KQ(1 To UBound(Arr), 1 To 2)
For i = 1 To UBound(Arr)
    S = Split(Arr(i, 1), Chr(10))
    For j = 0 To UBound(S)
        If Len(S(j)) > 0 Then Key = S(j)
            If Not Dic.Exists(Key) Then
                t = t + 1: Dic.Add (Key), t
            End If
    Next j
Next i
For i = 1 To UBound(Arr)
    S = Split(Arr(i, 2), Chr(10))
        For j = 0 To UBound(S)
            If Len(S(j)) > 0 Then
                Tmp = Split(S(j), "-")(0)
                If Dic.Exists(Tmp) Then
                    If KQ(i, 1) = Empty Then KQ(i, 1) = S(j) Else KQ(i, 1) = KQ(i, 1) & Chr(10) & S(j)
                End If
            End If
        Next j
    S2 = Split(Arr(i, 4), Chr(10))
        For k = 0 To UBound(S2)
            If Len(S2(k)) > 0 Then
                If Split(S2(k), "-")(0) = "Check" Then
                    If Dic.Exists(Split(S2(k), "-")(2)) Then
                        If KQ(i, 2) = Empty Then
                            KQ(i, 2) = Split(S2(k), "-")(2) & "-" & Split(S2(k), "-")(3)
                        Else
                            KQ(i, 2) = KQ(i, 2) & Chr(10) & Split(S2(k), "-")(2) & "-" & Split(S2(k), "-")(3)
                        End If
                    End If
                End If
            End If
        Next k
Next i
.Range("I2").Resize(10000, 2).ClearContents
.Range("I2").Resize(UBound(Arr), 2) = KQ
End With
MsgBox " Done"
End Sub
 
Upvote 0
Tách tất cả các chuỗi ở nội dung 1 và nội dung 2 theo dấu "-" rồi so sánh với chuỗi ở cột A. Cái nào có thì nhặt ra. Bạn hãy thử code theo hướng đó coi
Hổng dám đâu. Bạn xúi người ta làm theo, dân ghiền code ở GPE bơ mỏ hết.
 
Upvote 0
Thử code tách chuỗi không dùng dict:
Mã:
Option Explicit
Option Compare Text
Sub NT()
Dim a(), b(), i&, j&, px&, p1&, p2&, va$, vb$, vd$, vf$, vg$, t, x$, chk&
With Sheets("Data")
    a = .Range("A2:D" & .Cells(Rows.Count, "A").End(xlUp).Row).Value
    ReDim b(1 To UBound(a), 1 To 2)
    x = Chr(10)
    For i = 1 To UBound(a)
        va = a(i, 1): vb = a(i, 2) & x: vd = x & a(i, 4) & x
        t = Split(va, x): vf = "": vg = ""
        For j = 0 To UBound(t)
            p1 = InStr(vb, t(j))
            If p1 > 0 Then
                p2 = InStr(p1, vb, x)
                vf = vf & x & Mid(vb, p1, p2 - p1)
            End If
            p1 = InStr(vd, t(j))
            If p1 > 0 Then
                px = InStrRev(vd, x, p1)
                chk = InStr(Mid(vd, px, p1 - px), "Check")
                If chk Then
                    p2 = InStr(p1, vd, x)
                    vg = vg & x & Mid(vd, p1, p2 - p1)
                End If
            End If
        Next
        b(i, 1) = Mid(vf, 2): b(i, 2) = Mid(vg, 2)
    Next
    .Range("F2").Resize(UBound(b), 2).Value = b
End With
End Sub
 
Upvote 0
Thử code tách chuỗi không dùng dict:
Mã:
Option Explicit
Option Compare Text
Sub NT()
Dim a(), b(), i&, j&, px&, p1&, p2&, va$, vb$, vd$, vf$, vg$, t, x$, chk&
With Sheets("Data")
    a = .Range("A2:D" & .Cells(Rows.Count, "A").End(xlUp).Row).Value
    ReDim b(1 To UBound(a), 1 To 2)
    x = Chr(10)
    For i = 1 To UBound(a)
        va = a(i, 1): vb = a(i, 2) & x: vd = x & a(i, 4) & x
        t = Split(va, x): vf = "": vg = ""
        For j = 0 To UBound(t)
            p1 = InStr(vb, t(j))
            If p1 > 0 Then
                p2 = InStr(p1, vb, x)
                vf = vf & x & Mid(vb, p1, p2 - p1)
            End If
            p1 = InStr(vd, t(j))
            If p1 > 0 Then
                px = InStrRev(vd, x, p1)
                chk = InStr(Mid(vd, px, p1 - px), "Check")
                If chk Then
                    p2 = InStr(p1, vd, x)
                    vg = vg & x & Mid(vd, p1, p2 - p1)
                End If
            End If
        Next
        b(i, 1) = Mid(vf, 2): b(i, 2) = Mid(vg, 2)
    Next
    .Range("F2").Resize(UBound(b), 2).Value = b
End With
End Sub
Ô A4 là
KHUC MINH CHIEN
LE VAN CON
kết quả tèo :p
 
Upvote 0
Ô A4 là
KHUC MINH CHIEN
LE VAN CON
kết quả tèo :p
Đúng là thiếu tình huống này bác ạ :D , nếu dữ liệu chuẩn như vậy thì nối chr(10) & chuỗi & "-" khi tìm cột B, và "-" & chuỗi & "-" khi tìm trong cột D là giải quyết được vấn đề (em chưa tính khoảng trắng xong gạch vì dữ liệu không thấy vậy)
 
Upvote 0
Web KT
Back
Top Bottom