So sánh 2 chuỗi ký tự và cho ra kết quả so sánh theo quy tắc.

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

Small Learner

Thành viên mới
Tham gia
23/1/23
Bài viết
5
Được thích
0
Chào anh, chị,
Em đang phải so sánh 2 đoạn văn bản để tìm ra sự khác biệt theo quy tắc như sau:
- Nếu "Đoạn được so sánh" có từ được viết hoa mà "Đoạn so sánh" không có hoặc ngược lại thì tô màu cambôi đậm ở từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có từ mà "Đoạn so sánh" không có thì tô màu xanh lábôi đậm ở từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có từ mà "Đoạn so sánh" không có nhưng ở cùng vị trí tương ứng trong "Đoạn so sánh" thì tô màu tímbôi đậm từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có dấu ngắt câu khác với dấu ngắt câu ở cùng vị trí bên "Đoạn so sánh" thì điền 2 dấu ngắt câu trong dấu ngoặc đơn nối tiếp nhau trong "Đoạn được so sánh".
- Nếu "Đoạn so sánh" có từ mà "Đoạn được so sánh" không có thì điền cụm từ trong dấu ngoặc đơn "(thiếu từ)" vào vị trí thiếu ở "Đoạn được so sánh".
Em đã làm mẫu kết quả mong muốn trong file. Nghĩ cả tuần cũng chưa ra phải viết code thế nào, mong mọi người chỉ giáo cho.
Em cảm ơn rất nhiều.
 

File đính kèm

  • So sánh chuỗi.xlsx
    9.5 KB · Đọc: 14
Bạn đang có 5 yêu cầu cần so sánh, nhưng lười quá nên chỉ mới viết có 2 ví dụ:= CHÁN NGẮT

PHP:
[/SIZE]
[SIZE=4]Sub SoSanhCau()
 Dim AaA As String, BbB As String
 Dim J As Long, Rws As Long
 
 Rws = [B2].CurrentRegion.Rows.Count
 For J = 2 To Rws
    AaA = Cells(J, "A").Value:  BbB = Cells(J, "B").Value
    If Len(AaA) = Len(BbB) And UCase$(AaA) = UCase$(BbB) Then
        Cells(J, "C").Interior.ColorIndex = 35
        ' . . . .   '
    End If

 Next J
' . . . . . . . . . '
End Sub
 
Chào anh, chị,
Em đang phải so sánh 2 đoạn văn bản để tìm ra sự khác biệt theo quy tắc như sau:
- Nếu "Đoạn được so sánh" có từ được viết hoa mà "Đoạn so sánh" không có hoặc ngược lại thì tô màu cambôi đậm ở từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có từ mà "Đoạn so sánh" không có thì tô màu xanh lábôi đậm ở từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có từ mà "Đoạn so sánh" không có nhưng ở cùng vị trí tương ứng trong "Đoạn so sánh" thì tô màu tímbôi đậm từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có dấu ngắt câu khác với dấu ngắt câu ở cùng vị trí bên "Đoạn so sánh" thì điền 2 dấu ngắt câu trong dấu ngoặc đơn nối tiếp nhau trong "Đoạn được so sánh".
- Nếu "Đoạn so sánh" có từ mà "Đoạn được so sánh" không có thì điền cụm từ trong dấu ngoặc đơn "(thiếu từ)" vào vị trí thiếu ở "Đoạn được so sánh".
Em đã làm mẫu kết quả mong muốn trong file. Nghĩ cả tuần cũng chưa ra phải viết code thế nào, mong mọi người chỉ giáo cho.
Em cảm ơn rất nhiều.
Nếu như bạn muốn từ nào cần tô màu trong câu thì tôi may ra còn giúp bạn bằng công thức, chứ kiểu so sánh của bạn, nói thiệt, tôi là con người còn rối rắm, huống hồ chi máy móc.

1717683445684.png
 
Nếu như bạn muốn từ nào cần tô màu trong câu thì tôi may ra còn giúp bạn bằng công thức, chứ kiểu so sánh của bạn, nói thiệt, tôi là con người còn rối rắm, huống hồ chi máy móc.

View attachment 301470
Em cũng thấy rối, nhưng là công việc thì phải nghĩ cách thôi. Em vẫn đang so sánh bằng mắt, rồi tô màu bằng tay. Làm cực quá ạ.
 
Em cũng thấy rối, nhưng là công việc thì phải nghĩ cách thôi. Em vẫn đang so sánh bằng mắt, rồi tô màu bằng tay. Làm cực quá ạ.
Vậy bạn xài macro bài trên của mình; Nó sẽ giúp bạn giảm 1/10 công việc rồi đó;
Nếu chịu khó thêm sẽ là 1/5 công việc bớt đi sự nặng nề!
 
Chào anh, chị,
Em đang phải so sánh 2 đoạn văn bản để tìm ra sự khác biệt theo quy tắc như sau:
- Nếu "Đoạn được so sánh" có từ được viết hoa mà "Đoạn so sánh" không có hoặc ngược lại thì tô màu cambôi đậm ở từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có từ mà "Đoạn so sánh" không có thì tô màu xanh lábôi đậm ở từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có từ mà "Đoạn so sánh" không có nhưng ở cùng vị trí tương ứng trong "Đoạn so sánh" thì tô màu tímbôi đậm từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có dấu ngắt câu khác với dấu ngắt câu ở cùng vị trí bên "Đoạn so sánh" thì điền 2 dấu ngắt câu trong dấu ngoặc đơn nối tiếp nhau trong "Đoạn được so sánh".
- Nếu "Đoạn so sánh" có từ mà "Đoạn được so sánh" không có thì điền cụm từ trong dấu ngoặc đơn "(thiếu từ)" vào vị trí thiếu ở "Đoạn được so sánh".
Em đã làm mẫu kết quả mong muốn trong file. Nghĩ cả tuần cũng chưa ra phải viết code thế nào, mong mọi người chỉ giáo cho.
Em cảm ơn rất nhiều.
Vì sao không làm ngược lại: đánh dấu các từ "cùng vị trí trong câu & giống nhau cả về hoa thường"?

Việc so sánh này dùng để làm gì vậy bạn?
 
Vì sao không làm ngược lại: đánh dấu các từ "cùng vị trí trong câu & giống nhau cả về hoa thường"?

Việc so sánh này dùng để làm gì vậy bạn?
Mục đích cuối cùng là để phát hiện lỗi chính tả và việc chỉnh sửa giữa bản gốc và các bản copy. Em cần tô màu, làm nổi bật sai lệch để phục vụ mục đích trên. Tô màu giống nhau thì không cần và mất thời gian hơn.
 
Mục đích cuối cùng là để phát hiện lỗi chính tả và việc chỉnh sửa giữa bản gốc và các bản copy. Em cần tô màu, làm nổi bật sai lệch để phục vụ mục đích trên. Tô màu giống nhau thì không cần và mất thời gian hơn.
Cách nào hiệu quả hơn có lẽ cũng chưa biết được.

Với yêu cầu như bài 1: Có lẽ bạn cần lập 1 bảng quy tắc so sánh chuẩn, sau đó mới tính tiếp được.
Bạn gửi file mẫu với dữ liệu gần giống thật lên xem sao, tức là các câu văn so sánh dài hết cỡ có thể & số lượng dòng dữ liệu cũng tương đối lớn 1 chút
 
Yêu cầu này rất phức tạp, có đưa ra quy tắc chặt chẽ thế nào thì cũng sẽ có trường hợp ngoại lệ cần phải xét đoán.
Trường hợp này nên tận dụng công cụ Compare của Microsoft Word.
 
Làm thế nào phát hiện được không?
Mà làm thế thì phát hiện không được.

Hai câu này đúng chính tả mà không biết tô màu kiểu gì nè.
 
Chào anh, chị,
Em đang phải so sánh 2 đoạn văn bản để tìm ra sự khác biệt theo quy tắc như sau:
- Nếu "Đoạn được so sánh" có từ được viết hoa mà "Đoạn so sánh" không có hoặc ngược lại thì tô màu cambôi đậm ở từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có từ mà "Đoạn so sánh" không có thì tô màu xanh lábôi đậm ở từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có từ mà "Đoạn so sánh" không có nhưng ở cùng vị trí tương ứng trong "Đoạn so sánh" thì tô màu tímbôi đậm từ đó trong "Đoạn được so sánh".
- Nếu "Đoạn được so sánh" có dấu ngắt câu khác với dấu ngắt câu ở cùng vị trí bên "Đoạn so sánh" thì điền 2 dấu ngắt câu trong dấu ngoặc đơn nối tiếp nhau trong "Đoạn được so sánh".
- Nếu "Đoạn so sánh" có từ mà "Đoạn được so sánh" không có thì điền cụm từ trong dấu ngoặc đơn "(thiếu từ)" vào vị trí thiếu ở "Đoạn được so sánh".
Em đã làm mẫu kết quả mong muốn trong file. Nghĩ cả tuần cũng chưa ra phải viết code thế nào, mong mọi người chỉ giáo cho.
Em cảm ơn rất nhiều.
trong khi chờ các giải pháp, giải thích khác hãy thử code củ chuối (làm theo ý hiểu của bản thân ) sau. Hy vọng đáp ứng được >= 50% công việc trên dữ liệu đã đăng
Mã:
Option Explicit
Sub SoSanh()
Dim i&, j&, k&, t&, n&, A&
Dim S, Text
Dim Rng
Dim WF As Object
Set WF = Application.WorksheetFunction
With Sheet1
Set Rng = .Range("A1:B" & .Cells(Rows.Count, 1).End(3).Row)

If Not Rng.Find("*Thiêu tư*") Is Nothing Then MsgBox "hay xóa bo ghi chu (Thiêu tư) ơ: " & Rng.Find("*Thiêu tư*").Address: Exit Sub

For i = 2 To .Cells(Rows.Count, 1).End(3).Row
    S = Split(Trim(.Cells(i, 1)), " ")
    Text = Split(Trim(.Cells(i, 2)), " ")
    For j = 0 To UBound(S)
        If InStr(UCase(.Cells(i, 2)), UCase(S(j))) > 0 Then
            For k = 0 To UBound(Text)
               If UCase(S(j)) = UCase(Text(k)) Then
                    If InStr(S(j), Text(k)) = 0 Then
                        t = InStr(.Cells(i, 2), Text(k))
                            With .Cells(i, 2).Characters(Start:=t, Length:=Len(Text(k))).Font
                                .FontStyle = "đậm"
                                .ColorIndex = 45
                            End With
                    End If
                Else
                    If InStr(.Cells(i, 1), Text(k)) = 0 Then
                            t = InStr(.Cells(i, 2), Text(k))
                            With .Cells(i, 2).Characters(Start:=t, Length:=Len(Text(k))).Font
                                .FontStyle = "đậm"
                                .ColorIndex = 26
                            End With
                    End If
                End If
            Next k
        Else
                If .Cells(i, 2).Find(S(j)) Is Nothing Then
                    A = A + 1
                    With .Cells(i, 1).Characters(Start:=InStr(.Cells(i, 1), S(j)), Length:=Len(S(0))).Font
                        .FontStyle = "đậm"
                        .Underline = xlUnderlineStyleSingle
                        .Color = -11489280
                    End With
                        If A = 1 Then .Cells(i, 2) = "(Thiêu tư:" & S(j) & ")" & " " & .Cells(i, 2)
                End If
        End If
    
    Next j
Next i
End With
MsgBox "Done"
End Sub
trên file hãy click vào mặt cười để cùng cười nhé.
 

File đính kèm

  • So sánh chuỗi.xlsm
    21.1 KB · Đọc: 8
Làm thế nào phát hiện được không?
Mà làm thế thì phát hiện không được.

Hai câu này đúng chính tả mà không biết tô màu kiểu gì nè.
"Đoạn được so sánh" là nguyên gốc ban đầu, các "Đoạn so sánh" sẽ được so với bản gốc để tìm ra sự khác biệt, rồi điền sự khác biệt vào bản gốc để ra được kết quả so sánh. Trường hợp anh đưa ra không phải mục đích của em vì không biết câu nào là nguyên gốc cả.
 
Thử mấy câu sau với nhau không thấy code phát hiện gì cả:
Code này đúng chưa
Code này chưa đúng
Code chưa đúng này
Cảm ơn anh @huuthang_bd đã xem bài và cho ý kiến.
Tôi sửa lại code tuy không được như ý nhưng thôi cũng coi là tạm được.

Tất cả các chuỗi của cột b không đúng với vị trí bên cột a đều bị gach ngang.
Bạn có thể làm được. Bạn giỏi hơn bạn nghĩ rất nhiềubạn có thể làm được. bạn giỏi hơn Bạn nghĩ rất nhiều
Ới Bác Hải ơi. Chị Trang đi đâu rồi(Thiêu tư: Ới) Bác Hải ơi, Chị Trang có nhà không vậy?
Code này đúng chưaCode này chưa đúng
Code này chưa đúngCode chưa đúng này
Code chưa đúng nàyCode này đúng chưa
Không biết dữ liệu thật thì thế nào?
Mã:
Option Explicit

Sub SoSanh()
Dim i&, j&, k&, t&, n&, A&
Dim S, Text
Dim Rng
Dim WF As Object
Set WF = Application.WorksheetFunction
With Sheet1
Set Rng = .Range("A1:B" & .Cells(Rows.Count, 1).End(3).Row)

If Not Rng.Find("*Thiêu tư*") Is Nothing Then MsgBox "hay xóa bo ghi chu (Thiêu tư) ơ: " & Rng.Find("*Thiêu tư*").Address: Exit Sub

For i = 2 To .Cells(Rows.Count, 1).End(3).Row
    S = Split(Trim(.Cells(i, 1)), " ")
    Text = Split(Trim(.Cells(i, 2)), " ")
    For j = 0 To UBound(S)
        If InStr(UCase(.Cells(i, 2)), UCase(S(j))) > 0 Then
            For k = 0 To UBound(Text)
               If UCase(S(j)) = UCase(Text(k)) Then
                    If InStr(S(j), Text(k)) = 0 Then
                        t = InStr(.Cells(i, 2), Text(k))
                            With .Cells(i, 2).Characters(Start:=t, Length:=Len(Text(k))).Font
                                .FontStyle = "đậm"
                                .ColorIndex = 45
                            End With
                    End If
                Else
                   If InStr(.Cells(i, 1), Text(k)) = 0 Then
                            t = InStr(.Cells(i, 2), Text(k))
                            With .Cells(i, 2).Characters(Start:=t, Length:=Len(Text(k))).Font
                                .FontStyle = "đậm"
                                .ColorIndex = 26
                            End With
                    End If

                End If
            Next k
        Else
             
 If .Cells(i, 2).Find(S(j)) Is Nothing Then
                    A = A + 1
                    With .Cells(i, 1).Characters(Start:=InStr(.Cells(i, 1), S(j)), Length:=Len(S(j))).Font
                        .FontStyle = "đậm"
                        .Underline = xlUnderlineStyleSingle
                        .Color = -11489280
                    End With
                        If A = 1 Then .Cells(i, 2) = "(Thiêu tư: " & S(j) & ")" & " " & .Cells(i, 2)
                End If
        End If
       
            If .Cells(i, 1).Characters(Start:=InStr(.Cells(i, 1), S(j)), Length:=Len(S(j))).Font.Underline = xlUnderlineStyleNone Then
If UCase(S(j)) <> UCase(Text(j)) Then
                    With .Cells(i, 2).Characters(Start:=InStr(.Cells(i, 2), S(j)), Length:=Len(S(j))).Font
                        .FontStyle = "đậm"
                        .Strikethrough = True
                        .Color = -11489280
                    End With
            End If
        End If
    Next j
Next i
End With
MsgBox "Done"
End Sub
 
Làm thế nào phát hiện được không?
Mà làm thế thì phát hiện không được.
Hai câu này đúng chính tả mà không biết tô màu kiểu gì nè.
Trường hợp anh đưa ra không phải mục đích của em
Tác giả đưa ra ví dụ có mỗi 2 trường hợp thì ai đoán được các trường hợp khác như thế nào thì mới đúng mục đich đây.
 
Web KT
Back
Top Bottom