Dò trùng điểm đầu và điểm cuối!!!

Liên hệ QC

tinhgiomay

Thành viên mới
Tham gia
13/3/09
Bài viết
4
Được thích
0
Em thống kê tuyến đường từ điểm đầu đến điểm cuối.Khó một cái là có những row điểm đầu và điểm cuối bị nghịch đảo như row 6 và row 88,row 9 va row 109.Mà fie thống kê của cty em thi khoảng 1500 row.Giúp em cách tìm ra những row bi trù nghịch đảo như thế với.Thank all.**~**
 

File đính kèm

  • loc diem dau cuoi.xls
    31 KB · Đọc: 16
Em thống kê tuyến đường từ điểm đầu đến điểm cuối.Khó một cái là có những row điểm đầu và điểm cuối bị nghịch đảo như row 6 và row 88,row 9 va row 109.Mà fie thống kê của cty em thi khoảng 1500 row.Giúp em cách tìm ra những row bi trù nghịch đảo như thế với.Thank all.**~**
Không rõ bạn muốn lọc thế nào, tôi gửi thử 1 phương pháp dùng CF để đánh dấu xem sao.
 

File đính kèm

  • loc diem dau cuoi.xls
    32 KB · Đọc: 20
Em thống kê tuyến đường từ điểm đầu đến điểm cuối.Khó một cái là có những row điểm đầu và điểm cuối bị nghịch đảo như row 6 và row 88,row 9 va row 109.Mà fie thống kê của cty em thi khoảng 1500 row.Giúp em cách tìm ra những row bi trù nghịch đảo như thế với.Thank all.**~**
Bạn xem file. Nếu trùng nhiền lần thì kết quả sẽ hiện ở những cột tiếp theo.
 

File đính kèm

  • loc diem dau cuoi.rar
    17.3 KB · Đọc: 66
Thêm 1 cách làm bằng macro để tham khảo

PHP:
Option Explicit
Sub FirstAndEnd()
 Dim Rng As Range, sRng As Range, Clls As Range
 Dim eRw As Long, Jj As Long
 Dim Color_ As Byte, Lap As Integer
 
 Set Rng = Range([I5], [I65500].End(xlUp)):        Lap = 1
 eRw = Rng.Rows.Count:                             Color_ = 34
 [g6].CurrentRegion.Interior.ColorIndex = 0
 For Each Clls In [g6].Resize(eRw)
   If Clls.Value <> "" Then
   Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole)
      
      If Not sRng Is Nothing Then
         If Clls.Offset(, 2).Value = sRng.Offset(, -2).Value Then
            sRng.Offset(, -2).Resize(, Lap).Interior.ColorIndex = Color_
            Clls.Resize(, Lap).Interior.ColorIndex = Color_
            Color_ = 1 + Color_
            If Color_ > 41 Then
               Color_ = 34:         Lap = 1 + Lap
         End If:           End If
      End If
   End If
 Next Clls
End Sub
--=0 :-= --=0
 
@rollover79 and @huuthang_bd :
- Hai bạn lọc rất chính xác,nhưng hướng dẫn mình làm đựơc ko?Vì file thống kê của cty thì trùng rất nhiêu lần và rất nhiều row.^^!chứ nhìn kết quả thì mình chịu.
@HYen17 :
-Mình add vào script trong mảco thì chạy không được.T_T.hok bít tại sao nữa.

thank all
 

File đính kèm

  • GPE.rar
    12 KB · Đọc: 27
Dùng công thức

PHP:
=IF(TYPE(MATCH($G6;$I$6:$I$1000;0))=16;"";MATCH($G6;$I$6:$I$1000;0)+5)
Dùng VBA (tà đạo "VBD")

PHP:
Sub TimDauCuoi()
    With [Q6:Q200]
        .Value = "=IF(TYPE(MATCH(RC7,R6C9:R1000C9,0))=16,"""",MATCH(RC7,R6C9:R1000C9,0)+5)"
        .Value = .Value
    End With
End Sub
 
Dùng công thức

PHP:
=IF(TYPE(MATCH($G6;$I$6:$I$1000;0))=16;"";MATCH($G6;$I$6:$I$1000;0)+5)
Dùng VBA (tà đạo "VBD")

PHP:
Sub TimDauCuoi()
    With [Q6:Q200]
        .Value = "=IF(TYPE(MATCH(RC7,R6C9:R1000C9,0))=16,"""",MATCH(RC7,R6C9:R1000C9,0)+5)"
        .Value = .Value
    End With
End Sub
Công thức này không đúng đâu nha bạn. Thuật toán của bạn là lấy điểm đầu dò trong cột điểm cuối, nếu có thì hiện kết quả của dòng dò được. Đây mới chỉ là một chiều. Nếu điểm đầu của A là điểm cuối của B nhưng điểm đầu của B không phải là điểm cuối của A thì công thức của bạn trả về kết quả là vị trí của B mà đúng ra theo ý tác giả thì trường hợp đó là bình thường.
@rollover79 and @huuthang_bd :
- Hai bạn lọc rất chính xác,nhưng hướng dẫn mình làm đựơc ko?Vì file thống kê của cty thì trùng rất nhiêu lần và rất nhiều row.^^!chứ nhìn kết quả thì mình chịu.
@HYen17 :
-Mình add vào script trong mảco thì chạy không được.T_T.hok bít tại sao nữa.

thank all
Công thức thì có sẵn trong file rồi. Nếu bạn muốn hiểu thì phải tìm hiểu từ từ từng hàm. Còn nếu như chỉ muốn áp dụng thì chỉ việc copy và thay đổi vùng tham chiếu thôi.
 
--=0thank ban,mình copy công thức cho nhanh.Cám ơn bạn nhìu nhìu.
 
@thang_bd :
hic,copy nguyên cái formula của bạn thì bị báo lỗi vì thiếu cái dấu { bắt đầu và } kết thúc.chỗ {=if đó mà.click vào để copy là nó tự động mất tiu.+-+-+-+
 
Công thức này không đúng đâu nha bạn. Thuật toán của bạn là lấy điểm đầu dò trong cột điểm cuối, nếu có thì hiện kết quả của dòng dò được. Đây mới chỉ là một chiều. Nếu điểm đầu của A là điểm cuối của B nhưng điểm đầu của B không phải là điểm cuối của A thì công thức của bạn trả về kết quả là vị trí của B mà đúng ra theo ý tác giả thì trường hợp đó là bình thường.
.

@ huuthang: Cảm ơn bạn đã kiểm tra giúp bài của mình, đúng là hôm qua mình ẩu quá không kiểm tra lại kết quả, hôm nay xem lại thấy sai lung tung (ngượng quá) nên sửa lại bài trên như sau.

Cũng với thuật toán trên

Nếu làm thủ công thì ta dùng 2 cột phụ nối chuỗi 2 cột (nối đảo nhau)
Ví dụ: U6=$G6&$I6 ; V6=$I6&$G6 Fill xuống
Sau đó vẫn dùng công thức trên (bổ sung thêm hàm bẫy lỗi khi ô dữ liệu = 0) dò tìm trong 2 cột phụ.
PHP:
=IF($G6=0;"";IF(TYPE(MATCH($U6;$V$6:$V$1000;0))=16;"";MATCH($U6;$V$6:$V$1000;0)+5))
Nếu dùng VBA cũng lấy dữ liệu ra 2 cột phụ, tìm xong thì xoá cột phụ đi.
PHP:
Sub TimDauCuoi2()
[U6:U200] = "=RC7&RC9"
[V6:V200] = "=RC9&RC7"
    With [R6:R200]
        .Value = "=IF(RC7=0,"""",IF(TYPE(MATCH(RC21,R6C22:R1000C22,0))=16,"""",MATCH(RC21,R6C22:R1000C22,0)+5))"
        .Value = .Value
    End With
    [U6:V200].Clear
End Sub
Mục đích chính của bài là tìm thêm cách làm đơn giản hơn, ngắn gọn hơn có thể không hay hơn nhưng hy vọng người hỏi sẽ hiểu và áp dụng được vào công việc của mình.

p/s Thang xem lại bài của Thang tại dòng 26 tìm thấy trùng tại 46 nhưng tại 46 thì không tìm thấy 26 mặc dù vân có công thức.
 
Lần chỉnh sửa cuối:
@thang_bd :
hic,copy nguyên cái formula của bạn thì bị báo lỗi vì thiếu cái dấu { bắt đầu và } kết thúc.chỗ {=if đó mà.click vào để copy là nó tự động mất tiu.+-+-+-+
Công thức mảng thì phải Ctrl + Shift + Enter mới được chứ !$@!!
 
Web KT
Back
Top Bottom