So sánh dữ liệu giữa hai cột

Liên hệ QC

Thư Tín

Thành viên chính thức
Tham gia
3/5/19
Bài viết
75
Được thích
4
Trong file đính kèm em muốn so sánh dữ liệu giữa cột C với cột E, nếu dữ liệu ở cột C tương đương với dữ liệu ở cột E sẽ cho ra kết quả đúng ở cột G. Với điều kiện so sánh như sau:
- Nếu qui cách nào giống nhau sẽ cho ra kết quả đúng
- Dò tìm không phân biệt thứ tự
- Qui cách đảo được chấp nhận như nhau, chẳng hạn: 12*2000*4000 tương đương với 12*4000*2000
- Qui cách cho sai số +/- 10, ví dụ 10*2939*1457 = 10*2939*1452
Rất mong mọi người dành chút thời gian giúp đỡ
Em xin chân thành cảm ơn
 

File đính kèm

Trong file đính kèm em muốn so sánh dữ liệu giữa cột C với cột E, nếu dữ liệu ở cột C tương đương với dữ liệu ở cột E sẽ cho ra kết quả đúng ở cột G. Với điều kiện so sánh như sau:
- Nếu qui cách nào giống nhau sẽ cho ra kết quả đúng
- Dò tìm không phân biệt thứ tự
- Qui cách đảo được chấp nhận như nhau, chẳng hạn: 12*2000*4000 tương đương với 12*4000*2000
- Qui cách cho sai số +/- 10, ví dụ 10*2939*1457 = 10*2939*1452
Rất mong mọi người dành chút thời gian giúp đỡ
Em xin chân thành cảm ơn
- Qui cách cho sai số +/- 10, ví dụ 10*2939*1457 = 10*2939*1452
Qui cách có 3 tham số, chỉ 1 tham số được phép có sai số hay cả 3 ?
10*2939*1457 và 1*2930*1452 ?
 
Upvote 0
Dạ thường là 2 qui cách sau anh, qui cách đầu ít sai
 
Upvote 0
Không anh nó chủ yếu bị đảo 2 tham số sau thôi anh, tham số đầu không có đảo
 
Upvote 0
Trong file đính kèm em muốn so sánh dữ liệu giữa cột C với cột E, nếu dữ liệu ở cột C tương đương với dữ liệu ở cột E sẽ cho ra kết quả đúng ở cột G. Với điều kiện so sánh như sau:
- Nếu qui cách nào giống nhau sẽ cho ra kết quả đúng
- Dò tìm không phân biệt thứ tự
- Qui cách đảo được chấp nhận như nhau, chẳng hạn: 12*2000*4000 tương đương với 12*4000*2000
- Qui cách cho sai số +/- 10, ví dụ 10*2939*1457 = 10*2939*1452
Rất mong mọi người dành chút thời gian giúp đỡ
Em xin chân thành cảm ơn

- Dò tìm không phân biệt thứ tự
Thứ tự
là thứ tự gì??? (thứ tự dòng, hay thứ tự ô, hay là thứ tự khác?)

và * Dữ liệu trong file kèm tất cả đều OK (cột G) thì cần chi công thức so sánh làm chi (?)
 
Upvote 0
- Dò tìm không phân biệt thứ tự
Thứ tự
là thứ tự gì??? (thứ tự dòng, hay thứ tự ô, hay là thứ tự khác?) ---> cái này là thứ tự dòng nha anh

và * Dữ liệu trong file kèm tất cả đều OK (cột G) thì cần chi công thức so sánh làm chi (?)----> em cần công thức hay VBA để so sánh dữ liệu ở cột C & F để ra kết quả ở cột G đó anh nếu so sánh thỏa các điều kiện đã nêu ở trên ạ.
 
Upvote 0
Thứ tự dòng là sao? là không so sánh cùng dòng ---> so sánh không cùng dòng anh à, trong file em chỉ để minh họa thôi dòng nào thỏa các điều kiện đã nêu thì cho kết quả tương ứng có thể bỏ cột SL cũng được chủ yếu là so sánh qui cách
Theo file kèm thì theo từng dòng tương ứng
 
Upvote 0
--> so sánh không cùng dòng anh à, trong file em chỉ để minh họa thôi dòng nào thỏa các điều kiện đã nêu thì cho kết quả tương ứng có thể bỏ cột SL cũng được chủ yếu là so sánh qui cách
Vậy thì mô tả lại, thì may ra hiểu

Còn không thì thử kiểm tra trong file kèm đã đúng chưa?
Xem các names bằng cách bấm Ctrl+F3 để hiểu công thức
 

File đính kèm

Upvote 0
Trong file đính kèm em muốn so sánh dữ liệu giữa cột C với cột E, nếu dữ liệu ở cột C tương đương với dữ liệu ở cột E sẽ cho ra kết quả đúng ở cột G. Với điều kiện so sánh như sau:
- Nếu qui cách nào giống nhau sẽ cho ra kết quả đúng
- Dò tìm không phân biệt thứ tự
- Qui cách đảo được chấp nhận như nhau, chẳng hạn: 12*2000*4000 tương đương với 12*4000*2000
- Qui cách cho sai số +/- 10, ví dụ 10*2939*1457 = 10*2939*1452
Rất mong mọi người dành chút thời gian giúp đỡ
Em xin chân thành cảm ơn
Chạy code
Mã:
Sub SoSanh()
  Dim aChuan(), aThuc(), S, Arr, Arr2, Res()
  Dim eR&, eR2&, sR&, i&, j&, n&, q&, a&
  Dim tc&, tc2&, tt&, tt2&
  Dim iKey$, tmp$, strThuc$
  Const d = 10 'Do lech cho phep
 
  With Sheets("so sanh")
    eR = .Range("C" & Rows.Count).End(xlUp).Row
    eR2 = .Range("E" & Rows.Count).End(xlUp).Row
    If eR < 4 Or eR2 < 4 Then MsgBox ("Khong co du lieu"): Exit Sub
    aThuc = .Range("C4:C" & eR).Value
    aChuan = .Range("E4:E" & eR2).Value
  End With
 
  With CreateObject("scripting.dictionary")
    sR = UBound(aChuan)
    For i = 1 To sR
      tmp = aChuan(i, 1)
      j = InStr(1, tmp, "*")
      If j > 0 Then
        S = Split(tmp, "*")
        iKey = S(0)
        If .exists(iKey) = False Then
          .Add iKey, Array(Array(S(1), S(2)))
        Else
          Arr = .Item(iKey)
          ReDim Preserve Arr(0 To UBound(Arr))
          Arr(UBound(Arr)) = Array(S(1), S(2))
          .Item(iKey) = Arr
        End If
        For a = 1 To 2
          iKey = S(0) & "*" & S(a)
          If .exists(iKey) = False Then
            .Add iKey, Array(S(3 - a))
          Else
            Arr = .Item(iKey)
            ReDim Preserve Arr(0 To UBound(Arr))
            Arr(UBound(Arr)) = S(3 - a)
            .Item(iKey) = Arr
          End If
        Next a
      End If
    Next i
    sR = UBound(aThuc)
    ReDim Res(1 To sR, 1 To 1)
    For i = 1 To sR
      tmp = aThuc(i, 1)
      j = InStr(1, tmp, "*")
      If j > 0 Then
        S = Split(tmp, "*")
        iKey = S(0)
        If .exists(iKey) Then
          Arr = .Item(iKey)
          For j = 0 To UBound(Arr)
            For n = 0 To 1
              tc = CLng(Arr(j)(n))
              For q = 1 To 2
                tt = CLng(S(q))
                If tt - d <= tc And tt + d >= tc Then
                  tt2 = CLng(S(3 - q))
                  iKey = iKey & "*" & tc
                  Arr2 = .Item(iKey)
                  For a = 0 To UBound(Arr2)
                    tc2 = CLng(Arr2(a))
                    If tt2 - d <= tc2 And tt2 + d >= tc2 Then
                      Res(i, 1) = "OK"
                      GoTo DongKe
                    End If
                  Next a
                End If
              Next q
            Next n
          Next j
        End If
      End If
DongKe:
    Next i
  End With
  Sheets("so sanh").Range("G4").Resize(sR) = Res
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom