So sánh số điện loại trong 2 bảng (1 người xem)

Người dùng đang xem chủ đề này

neit2089

Thành viên mới
Tham gia
28/4/13
Bài viết
15
Được thích
0
rất mong đươc mọi người giúp đỡ, bài toán như sau:
cột A và cột B gồm các giá trị
bài toán yêu cầu tìm các giá trị ở cột B mà giống với giá trị ở cột A, sau đó trả về kết quả về cột C là giá trị của cột A & cột B
theo đó: nếu giá trị A1 bằng bất kỳ giá trị nào ở cột B thì ở cột C sẽ được đánh dấu vị trí cùng dòng với giá trị cột b
tương tự so sánh A2 với b1, b2,b3,...bn
rồi a3 với b1, b2,..bn
mong được giúp đỡ sớm, xin chân thành cảm ơn

[WARNING1]
Với tiêu để "cần giúp đỡ về thuật toán và hàm" lý ra tôi sẽ xóa toàn bộ topic mà không cần cảnh báo gì cả
Xét thấy đã có nhiều người tham gia giúp bạn nên tôi đã sửa lại tiêu đề
Lần sau lưu ý hơn khi đặt tiêu đề nhé![/WARNING1]
 
Lần chỉnh sửa cuối:
rất mong đươc mọi người giúp đỡ, bài toán như sau:
cột A và cột B gồm các giá trị
bài toán yêu cầu tìm các giá trị ở cột B mà giống với giá trị ở cột A, sau đó trả về kết quả về cột C là giá trị của cột A & cột B
theo đó: nếu giá trị A1 bằng bất kỳ giá trị nào ở cột B thì ở cột C sẽ được đánh dấu vị trí cùng dòng với giá trị cột b
tương tự so sánh A2 với b1, b2,b3,...bn
rồi a3 với b1, b2,..bn
mong được giúp đỡ sớm, xin chân thành cảm ơn
ai biết xin giúp đỡ em với, chỉ cần nhá vào máy em số 0902 245 247 em sẽ gọi lại ngay ạ
Yêu cầu này không khó, nhưng, theo mình, bạn nên gởi file + yêu cầu + vài kết quả minh họa thì.............có ngay kết quả
Thân
 
Em nói thế này cho anh em dễ hình dung hơn
Cho cột giá trị A và C ( ký tự số)
Lần lượt so sánh 6 ký tự cuối của A1 với C1, C2,…Cn
Rồi A2 với C1,C2,…Cn
Tương tự đến hết cột A
Nếu 6 ký tự cuối của A1 = 6 ký tự cuối của C1 thì D1= A1 vs C1, ngược lại thì trống
Nếu 6 ký tự cuối của A1=6 ký tự cuối của C2 thì D2=A1 Vs C2, ngược lại bỏ trống
ex.jpg

Theo hình trên anh sẽ thấy những ô có màu giống nhau là những ô đạt điều kiện, cho nên khi tính xong, kết quả sẽ hiện ở cột D (hay cột nào đó) như sau(ở đây là cột D):
e12.jpg


Như vậy ta thấy rằng khi so sánh A1 với C1 cho tới C14, thì ở ô C8 xuất hiện giá trị thỏa mãn điều kiện(6 ký tự cuối của A1=6 ký tự cuối của C8) cho nên ở ô D8 sẽ là kết quả là A1 vs C8
Tiếp tục so sánh A2 với các ô của cột C, không có giá trị nào thỏa mãn đk nên trống ô D
Tương tự tới A4 thì có C1 thỏa mãn, vậy D1 = A4 Vs C1
Theo hình trên những ô cột D xuất hiện giá trị tức là thỏa mãn, trống là không thỏa mãn điều kiện
Lưu ý: số dòng trên cột A và C có thể chênh lệch nhau( theo hình trên thì là đang chênh lệch, A có 11 dòng, C có 14 dòng)
có mẫu sẵn cho anh em làm giúp cho nhanh nè, mong được giúp đỡ
 

File đính kèm

Lần chỉnh sửa cuối:
Em nói thế này cho anh em dễ hình dung hơn

Trăm nghe không bằng 1 thấy,
Trăm thấy không bằng 1 thực

Vậy bạn nên up file lên đi, hơn nữa với excel thì phải có file số liệu thì người giúp mới giúp bạn nhanh được - không lẽ người giúp lại gõ lộp bộp lại dữ liệu của bạn chăng?
 
Trăm nghe không bằng 1 thấy,
Trăm thấy không bằng 1 thực

Vậy bạn nên up file lên đi, hơn nữa với excel thì phải có file số liệu thì người giúp mới giúp bạn nhanh được - không lẽ người giúp lại gõ lộp bộp lại dữ liệu của bạn chăng?
up lên rồi mà anh, anh xem lại với ạ
 
dạ vâng, dc rồi, cảm ơn anh rất nhiều, vậy là nếu cột A có 1000 dòng thì mình chỉ thay 11 trong hàm trên=1000 đúng ko ạ, không quan trong số dòng cột C, nó sẽ tự động tham chiếu phải không anh
 
dạ vâng, dc rồi, cảm ơn anh rất nhiều, vậy là nếu cột A có 1000 dòng thì mình chỉ thay 11 trong hàm trên=1000 đúng ko ạ, không quan trong số dòng cột C, nó sẽ tự động tham chiếu phải không anh

Đúng bạn thay cho hợp lý,

Tuy nhiên hạn chế công thức là:

- nếu có 2 (hay >=2) giá trị bên cột A (6 số cuối) trùng với 1 giá trị cột C thì --> công thức chỉ liệt kê 1 thui

- nếu số lượng bên cột A lớn đến 1000 dòng thì tốc độ cũng là vấn đề (bạn cứ thử xem) khi đó file có thể nặng (nếu chỉ dùng 1 lần thì có thể khắc phục: sau khi tính toán xong, bạn copy và paste special ..VALUE là giúp file nhẹ đi)

đó là hạn chế , muốn khắc phục thì chỉ có thể dùng VBA
 
Lần chỉnh sửa cuối:
dạ vâng,hiện em đang làm việc với hơn 40 000 dòng cột A và 50 000 cột C ạ, thấy nó đơ lun :D, VBA thì em đang ước mơ dc học đây ạ, nhưng hog có điều kiện và thời gian
1 lần nữa cảm ơn anh rất nhiều, có thể xin yahoo, face hay gì đó của anh để lần sau...chỉ giúp được không ạ :D
 
dạ vâng,hiện em đang làm việc với hơn 40 000 dòng cột A và 50 000 cột C ạ, thấy nó đơ lun :D, VBA thì em đang ước mơ dc học đây ạ, nhưng hog có điều kiện và thời gian
1 lần nữa cảm ơn anh rất nhiều, có thể xin yahoo, face hay gì đó của anh để lần sau...chỉ giúp được không ạ :D

nHIỀU VẬY THÌ THUA

VẬY BẠN dùng VBA thử file này xem sao

Copy dữ liệu thử to đùng của bạn xem sao, nhớ thay đổi côgn thức hàm VBA của cột C

=trung(C1,$A$1:$A$11)

Lưu ý file chứa code ở excel 2007 trở lên phải ghi dưới dạng *.xlsm

bạn thử xem tốc độ xem thế nào, nếu cần thì up file to đó lên đây
 

File đính kèm

Về việc nick Yahoo hay FB, thì không quan trọng đâu, cần hỏi bạn cứ up GPE có nhiều cơ hội Các thành viên khác giúp nhiều hơn
 
Như vậy ta thấy rằng khi so sánh A1 với C1 cho tới C14, thì ở ô C8 xuất hiện giá trị thỏa mãn điều kiện(6 ký tự cuối của A1=6 ký tự cuối của C8) cho nên ở ô D8 sẽ là kết quả là A1 vs C8
Tiếp tục so sánh A2 với các ô của cột C, không có giá trị nào thỏa mãn đk nên trống ô D

Thế nếu A2 cũng "khớp" với C8 thì sao? Bạn đang có A1 = 902214563, A2 = 936214695, C8 = 936214563. Tức A1 "khớp" với C8. Thế bây giờ nếu A2 = 932214563 thì cũng "khớp" với C8. Như vậy ghi "932214563 vs 936214563" đè lên "902214563 vs 936214563" ở ô D8?

Nếu bạn muốn xử lý như thế thì
công thức cho D1
Mã:
=IFERROR(LOOKUP(2;1/(MOD($C1-$A$1:$A$11;10^6)=0);$A$1:$A$11)&" vs "&$C1;"")

kéo xuống dưới
-----------
Bây giờ mới để ý thấy tiêu đề là cần hàm

Lấy hết nếu cột A có nhiều ô khớp
Mã:
Function Trung(ByVal Value As Long, cot As Range) As String
Dim Arr, index As Long, result As String
    Arr = cot
    For index = LBound(Arr) To UBound(Arr)
        If (Value - Arr(index, 1)) Mod 10 ^ 6 = 0 Then result = result & Arr(index, 1) & " vs "
    Next index
    If result <> "" Then Trung = result & Value
End Function

Chỉ lấy A đầu tiên
Mã:
Function Trung(ByVal Value As Long, cot As Range) As String
Dim Arr, index As Long, result As String
    Arr = cot
    For index = LBound(Arr) To UBound(Arr)
        If (Value - Arr(index, 1)) Mod 10 ^ 6 = 0 Then
            Trung = Arr(index, 1) & " vs " & Value
            Exit For
        End If
    Next index
End Function

Chỉ lấy A cuối cùng
Mã:
Function Trung(ByVal Value As Long, cot As Range) As String
Dim Arr, index As Long, result As String
    Arr = cot
    For index = UBound(Arr) To LBound(Arr) Step -1
        If (Value - Arr(index, 1)) Mod 10 ^ 6 = 0 Then
            Trung = Arr(index, 1) & " vs " & Value
            Exit For
        End If
    Next index
End Function
 
Lần chỉnh sửa cuối:
Về việc nick Yahoo hay FB, thì không quan trọng đâu, cần hỏi bạn cứ up GPE có nhiều cơ hội Các thành viên khác giúp nhiều hơn

Ha, gà chưa gáy mà bạn vodoi2x đã dậy rồi hả. Mà sao nhanh thế. Tôi bắt đầu viết thì chưa thấy gì thế mà viết xong đã thấy có mấy bài rồi. Cũng là vừa viết vừa cà phê thuốc lá v...v

@neit2089: bạn đừng giận nhé. Mọi người khác tôi cũng đã trả lời y hệt thế. Tôi biết có người không hài lòng.
 
nhờ anh chị em giúp tiện thể ghé ngang giúp em luôn caí này ạ
trong bảng excel, cột A chứa các giá trị là số ( mỗi ô chứa 9 ký tự)

so sánh A1 với A2, A3,...An, nếu: 8 ký tự đầu của A1=A2( hoặc A3,..An), thì ở cột B tương ứng sẽ trả về kết quả là "A1 vs A2" hoặc An nếu An thỏa mãn điều kiện
tiếp theo A2 với A3,A4,...An, nếu: 8 ký tự đầu của A2=A3( hoặc A4,..An), thì ở cột B tương ứng sẽ trả về kết quả là "A2 vs A3"hoặc An nếu An thỏa mãn điều kiện
cứ tiếp tục như vậy cho đến hết
như vậy mình cần hàm dò tìm những giá trị của cột A sao cho chúng giống nhau 8 ký tự đầu, kết quả trả về cột B ở dòng tương ứng ( cột B sẽ chứa 2 giá trị của cột A nếu thỏa mãn điều kiện)
bảng kèm theo có những ô cùng màu là những ô thỏa mãn điều kiện
Cảm ơn rất nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
nhờ anh chị em giúp tiện thể ghé ngang giúp em luôn caí này ạ
trong bảng excel, cột A chứa các giá trị là số ( mỗi ô chứa 9 ký tự)

so sánh A1 với A2, A3,...An, nếu: 8 ký tự đầu của A1=A2( hoặc A3,..An), thì ở cột B tương ứng sẽ trả về kết quả là "A1 vs A2" hoặc An nếu An thỏa mãn điều kiện
tiếp theo A2 với A3,A4,...An, nếu: 8 ký tự đầu của A2=A3( hoặc A4,..An), thì ở cột B tương ứng sẽ trả về kết quả là "A2 vs A3"hoặc An nếu An thỏa mãn điều kiện
cứ tiếp tục như vậy cho đến hết
như vậy mình cần hàm dò tìm những giá trị của cột A sao cho chúng giống nhau 8 ký tự đầu, kết quả trả về cột B ở dòng tương ứng ( cột B sẽ chứa 2 giá trị của cột A nếu thỏa mãn điều kiện)
bảng kèm theo có những ô cùng màu là những ô thỏa mãn điều kiện
Cảm ơn rất nhiều!

Tôi cũng đã đọc bài này ở chủ đề trước nhưng không muốn thử sức vì còn khúc mắc. Tất nhiên có 2 lựa chọn:

1. Cứ làm bừa, nếu không đúng ý thì mất công.
2. Hỏi cho chắc chắn. Nhưng chả nhẽ cứ bài nào cũng phải giúp người hỏi trình bầy? Nhiều khi không có hứng. Anh cần giúp thì anh trình bầy cho người khác hiểu. Và lường mọi trường hợp.

Bạn viết
so sánh A1 với A2, A3,...An, nếu: 8 ký tự đầu của A1=A2( hoặc A3,..An), thì ở cột B tương ứng sẽ trả về kết quả là "A1 vs A2" hoặc An nếu An thỏa mãn điều kiện
tiếp theo A2 với A3,A4,...An, nếu: 8 ký tự đầu của A2=A3( hoặc A4,..An), thì ở cột B tương ứng sẽ trả về kết quả là "A2 vs A3"hoặc An nếu An thỏa mãn điều kiện
cứ tiếp tục như vậy cho đến hết

Câu hỏi của tôi.

Giả sử A(k1), A(k2), ..., A(k9), A(k10) cùng có 8 ký tự đầu giống nhau, với k1 < k2 < ... < k10

Khi xét A(k1) với A(k1+n) với n = 1, 2, 3, ... thì ta sẽ có B(k2) = A(k1) & A(k2), ..., B(k10) = A(k1) & A(k10)

Khi xét A(k2) với A(k2+n) với n = 1, 2, 3, ... thì ta sẽ có B(k3) = A(k2) & A(k3), ..., B(k10) = A(k2) & A(k10)

Tức B(k3), ..., B(k10) bị ghi đè

Xét tiếp ta có B(k4), ..., B(k10) bị ghi đè.

v...v

Vậy thì giải quyết thế nào đây?

Trong chủ đề trước tôi đã chỉ cho bạn là có những tình huống ghi đè mà trong chủ đề này bạn không rút kinh nghiệm để mà trình bầy cặn kẽ.

Đấy là chưa xét trường hợp cột A có chứa số trùng.

Làm hộ người khác mà cứ phải đoán hoặc tự thêm điều kiện thì chưa chắc đúng ý người hỏi. Thôi thì chọn phương án "ngồi im" cho nó khỏe.
 
Và cũng như bác siwtom hỏi, chỉ thêm ý này,

Bạn muốn dùng kết quả vào việc gì, có phải chăng là việc nhắn tin sim rác không? nếu đúng thì làm khó chúng tôi rùi, vì tiếp tay cho 1 việc nhắn rác vô tội vạ,

Vậy bạn nói thêm chút ứng dụng vào đâu, tại sao nhé

Và phần trước mọi người thi nhau giúp bạn cũng không 1 dòng hồi âm, giờ lại mong mọi người ghé qua: ghé qua thi tôi lại đi lun
 
Lần chỉnh sửa cuối:
thực sự những câu trả lời liên quan tới code em không biết gì nên chỉ nhấn thanks, nhưng việc em đang có cần nói chi tiết không ạ, thật ra cũng chỉ là lọc số và tung nó lên mạng, những hàm cơ bản thì em đã làm dc, em đang dần hoàn thiện hệ thống lọc số cho mình và cần sự giúp đỡ của anh chị có hiểu biết, thật ra cái cảm giác ngồi viết hàm cho ra kết quả cũng sướng lắm, nhưng đối với những bài toán khó hơn thì ko đủ khả năng, vậy mới lên GPE chứ ạ

Tôi cũng đã đọc bài này ở chủ đề trước nhưng không muốn thử sức vì còn khúc mắc. Tất nhiên có 2 lựa chọn:

1. Cứ làm bừa, nếu không đúng ý thì mất công.
2. Hỏi cho chắc chắn. Nhưng chả nhẽ cứ bài nào cũng phải giúp người hỏi trình bầy? Nhiều khi không có hứng. Anh cần giúp thì anh trình bầy cho người khác hiểu. Và lường mọi trường hợp.

Bạn viết


Câu hỏi của tôi.

Giả sử A(k1), A(k2), ..., A(k9), A(k10) cùng có 8 ký tự đầu giống nhau, với k1 < k2 < ... < k10

Khi xét A(k1) với A(k1+n) với n = 1, 2, 3, ... thì ta sẽ có B(k2) = A(k1) & A(k2), ..., B(k10) = A(k1) & A(k10)

Khi xét A(k2) với A(k2+n) với n = 1, 2, 3, ... thì ta sẽ có B(k3) = A(k2) & A(k3), ..., B(k10) = A(k2) & A(k10)

Tức B(k3), ..., B(k10) bị ghi đè

Xét tiếp ta có B(k4), ..., B(k10) bị ghi đè.

v...v

Vậy thì giải quyết thế nào đây?

Trong chủ đề trước tôi đã chỉ cho bạn là có những tình huống ghi đè mà trong chủ đề này bạn không rút kinh nghiệm để mà trình bầy cặn kẽ.

Đấy là chưa xét trường hợp cột A có chứa số trùng.

Làm hộ người khác mà cứ phải đoán hoặc tự thêm điều kiện thì chưa chắc đúng ý người hỏi. Thôi thì chọn phương án "ngồi im" cho nó khỏe.
còn việc trên thì không có trường hợp đó xảy ra đâu ạ, em đã cố gắng trình bày cặn kẽ và đơn giản nhất có thể, chỉ cần điều kiện như trên thôi, mấy anh bớt nóng giận mà giúp em với ạ
 
Tôi cũng chả biết mục đích của bạn là gì nhưng nếu bạn mà dùng vào mục đích xấu thì tôi không dám "nhìn" bạn vodoi2x nữa đấy

còn việc trên thì không có trường hợp đó xảy ra đâu ạ, em đã cố gắng trình bày cặn kẽ và đơn giản nhất có thể, chỉ cần điều kiện như trên thôi, mấy anh bớt nóng giận mà giúp em với ạ

Tùy bạn thôi

Mã:
Sub DoSomething()
Dim Arr, r As Long, k As Long, result, currLong As Long
    Arr = Range([A1], [A65535].End(xlUp)).Value
    ReDim result(1 To UBound(Arr), 1 To 1)
    
    For r = 1 To UBound(Arr) - 1
        currLong = Arr(r, 1)
        
        For k = r + 1 To UBound(Arr)
            If Abs(currLong - Arr(k, 1)) < 10 Then
                result(k, 1) = currLong & " & " & Arr(k, 1)
            End If
        Next k
    Next r
    
    Range("B1").Resize(UBound(result)).Value = result
End Sub
 

File đính kèm

Tôi cũng chả biết mục đích của bạn là gì nhưng nếu bạn mà dùng vào mục đích xấu thì tôi không dám "nhìn" bạn vodoi2x nữa đấy



Tùy bạn thôi

Mã:
Sub DoSomething()
Dim Arr, r As Long, k As Long, result, currLong As Long
    Arr = Range([A1], [A65535].End(xlUp)).Value
    ReDim result(1 To UBound(Arr), 1 To 1)
    
    For r = 1 To UBound(Arr) - 1
        currLong = Arr(r, 1)
        
        For k = r + 1 To UBound(Arr)
            If Abs(currLong - Arr(k, 1)) < 10 Then
                result(k, 1) = currLong & " & " & Arr(k, 1)
            End If
        Next k
    Next r
    
    Range("B1").Resize(UBound(result)).Value = result
End Sub
cảm ơn anh rất nhiều! tưởng anh cho hàm để ngồi thủ công, có cái VBA quá tốt rồi ạ;;;;;;;;;;;
 

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

Back
Top Bottom