Hàm lọc số điện thoại theo đuôi (1 người xem)

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

truongsen

Thành viên mới
Tham gia
26/9/12
Bài viết
13
Được thích
0
Mình có 1 bảng số điện thoại dạng 9xx(có 9 số)
Mình muốn hỏi mọi người Làm thế nào để lọc ra những số điện thoại có dạng đuôi là AABB,ABCCAB,ABACAD...,mong mọi người ai biết về câu lệnh giúp mình với.
Hôm kia mình cũng đã post bài này hỏi nhưng không hiểu sao để sau 1 ngày thì tự bị xoá.
thanks
 
mình có 1 bảng số điện thoại dạng 9xx(có 9 số)
mình muốn hỏi mọi người làm thế nào để lọc ra những số điện thoại có dạng đuôi là aabb,abccab,abacad...,mong mọi người ai biết về câu lệnh giúp mình với.
Hôm kia mình cũng đã post bài này hỏi nhưng không hiểu sao để sau 1 ngày thì tự bị xoá.
Thanks
trước tiên bạn cần giúp đỡ thì gui file mẫu lên thì được nhiều người giúp.tránh hỏi quanh co
thứ 2 bài của bạn bị xóa chắc là do bạn vi pham nội quy khi post bài.
Chắc bạn là thành viên mới.nên cần đọc kỹ nội quy khi post bài
trước đây tôi cũng bị xóa bài hoài chứ gì
ẹc ẹc

NỘI QUY ĐÂY

Lưu ý khi gửi bài:
- Bài viết không dấu Tiếng Việt sẽ bị xóa
- Đặt tựa đề theo sát nội dung câu hỏi/ trả lời. Các bài viết có tựa đề chung chung như
Help me, cứu cứu, cứu em, gấp gấp,... sẽ bị xoá
- Giải thích/ mô tả câu hỏi càng chi tiết càng tốt
- Nên gửi thêm tập tin Excel kèm chú thích về câu hỏi nếu có
Xem thêm Nội Quy Diễn Đàn
 
Lần chỉnh sửa cuối:
Mình có 1 bảng số điện thoại dạng 9xx(có 9 số)
Mình muốn hỏi mọi người Làm thế nào để lọc ra những số điện thoại có dạng đuôi là AABB,ABCCAB,ABACAD...,mong mọi người ai biết về câu lệnh giúp mình với.
Hôm kia mình cũng đã post bài này hỏi nhưng không hiểu sao để sau 1 ngày thì tự bị xoá.
thanks

1. Bài của bạn bị xóa do gửi không đúng mục (bạn đã gửi ở mục "Hướng dẫn sử dụng diễn đàn")
2. Chỉ lọc 3 dạng đuôi thôi à? Nếu thế thì dấu 3 chấm dùng với ý gì? Còn nếu không thì bạn phải liệt kê ra hết chứ.
3. Mỗi dạng đuôi lọc riêng hay tất cả mọi số có 1 trong các dạng đuôi cho vào cùng một "bao"?
4. Gửi tập tin có chút dữ liệu lên
 
View attachment 1.xls các bạn xem hộ mình với,mình gửi thử 1 file lên đây để nhờ các bạn trợ giúp,mình mới tham gia diễn đàn và còn kém về excel nên mong mọi người thông cảm,ngoài các dạng cần lọc trên mình cần lọc thêm dạng đuôi ABC(Số liên tiếp nhau)
và ABAB

1. Bài của bạn bị xóa do gửi không đúng mục (bạn đã gửi ở mục "Hướng dẫn sử dụng diễn đàn")
2. Chỉ lọc 3 dạng đuôi thôi à? Nếu thế thì dấu 3 chấm dùng với ý gì? Còn nếu không thì bạn phải liệt kê ra hết chứ.
3. Mỗi dạng đuôi lọc riêng hay tất cả mọi số có 1 trong các dạng đuôi cho vào cùng một "bao"?
4. Gửi tập tin có chút dữ liệu lên
mình đã post lên 1 tập tin rồi,mình muốn các dạng số đuôi giống nhau cho vào cùng 1 bao,mong bạn biết thì giúp giùm mình,cảm ơn bạn nhé.
 
Chỉnh sửa lần cuối bởi điều hành viên:
mình đã post lên 1 tập tin rồi,mình muốn các dạng số đuôi giống nhau cho vào cùng 1 bao,mong bạn biết thì giúp giùm mình,cảm ơn bạn nhé.

"số đuôi giống nhau cho vào cùng 1 bao" có nghĩa là mỗi dạng cho vào 1 bao khác nhau?
Do bạn muốn liệt kê cả dạng ABC nên tôi suy luận ra là A, B, C khác nhau từng đôi một. Vì nếu không thì số điện thoại nào mà chả có đuôi dạng ABC?
Vậy tôi cũng giả thiết là trong tất cả các dạng đuôi còn lại thì A, B, C, D cũng khác nhau từng đôi một.

Nếu đúng thế thì
Mã:
Function DangDuoi(Arr)
Dim objRE As Object    ' VBScript.RegExp
Dim tmpArr, tmp, index(1 To 5) As Long, r As Long, c As Long
    Set objRE = CreateObject("VBScript.RegExp")
    If IsArray(Arr) Then
        tmpArr = Arr
    Else
        ReDim tmpArr(1 To 1, 1 To 1)
        tmpArr(1, 1) = Arr
    End If
    ReDim tmp(1 To UBound(tmpArr) - LBound(tmpArr) + 1, 1 To 5)
    
    For r = LBound(tmp) To UBound(tmp)
        For c = 1 To 5
            tmp(r, c) = ""
        Next c
    Next r
    
    For r = LBound(tmp) To UBound(tmp)
        For c = 1 To 5
            Select Case c
                Case 1: objRE.Pattern = "(\d)\1(?!\1)(\d)\2$"   [COLOR=#0000ff]' AABB[/COLOR]
                Case 2: objRE.Pattern = "(\d)(?!\1)(\d)\1\2$"  [COLOR=#0000ff] ' ABAB[/COLOR]
                Case 3: objRE.Pattern = "(\d)(?!\1)(\d)(?!\1|\2)(\d)\3\1\2$"    [COLOR=#0000ff]' ABCCAB[/COLOR]
                Case 4: objRE.Pattern = "(\d)(?!\1)(\d)\1(?!\1|\2)(\d)\1(?!\1|\2|\3)\d$"    [COLOR=#0000ff]' ABACAD[/COLOR]
                Case 5: objRE.Pattern = "(\d)(?!\1)(\d)(?!\1|\2)\d$"   [COLOR=#0000ff]' ABC[/COLOR]
            End Select
            If objRE.test(tmpArr(r, LBound(tmpArr, 2))) Then
                index(c) = index(c) + 1
                tmp(index(c), c) = tmpArr(r, LBound(tmpArr, 2))
                Exit For
            End If
        Next c
    Next r
    DangDuoi = tmp
    
    Set objRE = Nothing
End Function

Nếu bạn muốn xem vd. số điện thoại trong ô A2 thuộc dạng đuôi nào thì:
1. "Bôi đen" 5 ô liên tiếp của 1 dòng nào đó
2. Gõ công thức =DangDuoi(A2) và kết thúc bằng Ctrl + Shift + Enter

Trong ví dụ đính kèm tôi có 761 số từ ô A2 tới ô A762, và tôi "bôi đen" vùng B2:F762 và gõ công thức =DangDuoi($A$2:$A$762) và kết thúc bằng Ctrl + Shift + Enter
 

File đính kèm

"số đuôi giống nhau cho vào cùng 1 bao" có nghĩa là mỗi dạng cho vào 1 bao khác nhau?
Do bạn muốn liệt kê cả dạng ABC nên tôi suy luận ra là A, B, C khác nhau từng đôi một. Vì nếu không thì số điện thoại nào mà chả có đuôi dạng ABC?
Vậy tôi cũng giả thiết là trong tất cả các dạng đuôi còn lại thì A, B, C, D cũng khác nhau từng đôi một.

Nếu đúng thế thì
Mã:
Function DangDuoi(Arr)
Dim objRE As Object    ' VBScript.RegExp
Dim tmpArr, tmp, index(1 To 5) As Long, r As Long, c As Long
    Set objRE = CreateObject("VBScript.RegExp")
    If IsArray(Arr) Then
        tmpArr = Arr
    Else
        ReDim tmpArr(1 To 1, 1 To 1)
        tmpArr(1, 1) = Arr
    End If
    ReDim tmp(1 To UBound(tmpArr) - LBound(tmpArr) + 1, 1 To 5)
    
    For r = LBound(tmp) To UBound(tmp)
        For c = 1 To 5
            tmp(r, c) = ""
        Next c
    Next r
    
    For r = LBound(tmp) To UBound(tmp)
        For c = 1 To 5
            Select Case c
                Case 1: objRE.Pattern = "(\d)\1(?!\1)(\d)\2$"   [COLOR=#0000ff]' AABB[/COLOR]
                Case 2: objRE.Pattern = "(\d)(?!\1)(\d)\1\2$"  [COLOR=#0000ff] ' ABAB[/COLOR]
                Case 3: objRE.Pattern = "(\d)(?!\1)(\d)(?!\1|\2)(\d)\3\1\2$"    [COLOR=#0000ff]' ABCCAB[/COLOR]
                Case 4: objRE.Pattern = "(\d)(?!\1)(\d)\1(?!\1|\2)(\d)\1(?!\1|\2|\3)\d$"    [COLOR=#0000ff]' ABACAD[/COLOR]
                Case 5: objRE.Pattern = "(\d)(?!\1)(\d)(?!\1|\2)\d$"   [COLOR=#0000ff]' ABC[/COLOR]
            End Select
            If objRE.test(tmpArr(r, LBound(tmpArr, 2))) Then
                index(c) = index(c) + 1
                tmp(index(c), c) = tmpArr(r, LBound(tmpArr, 2))
                Exit For
            End If
        Next c
    Next r
    DangDuoi = tmp
    
    Set objRE = Nothing
End Function

Nếu bạn muốn xem vd. số điện thoại trong ô A2 thuộc dạng đuôi nào thì:
1. "Bôi đen" 5 ô liên tiếp của 1 dòng nào đó
2. Gõ công thức =DangDuoi(A2) và kết thúc bằng Ctrl + Shift + Enter

Trong ví dụ đính kèm tôi có 761 số từ ô A2 tới ô A762, và tôi "bôi đen" vùng B2:F762 và gõ công thức =DangDuoi($A$2:$A$762) và kết thúc bằng Ctrl + Shift + Enter
Thật sự cảm ơn bạn,mình sẽ nghiên cứu cách làm của bạn.

sao mình xoá những số điện thoại cũ đi và thay bằng 1 bảng số điện thoại mới thì lại không ra nữa nhỉ?,tiện đây bạn có thể giúp mình thêm hàm lọc số điện thoại theo ngày tháng năm sinh dạng abcdef vs a có thể trùng b,ab không quá 30,cd không quá 12 như ngày tháng năm sinh ý,è là 2 số cuối năm sinh.thanks
 
Chỉnh sửa lần cuối bởi điều hành viên:
sao mình xoá những số điện thoại cũ đi và thay bằng 1 bảng số điện thoại mới thì lại không ra nữa nhỉ?,tiện đây bạn có thể giúp mình thêm hàm lọc số điện thoại theo ngày tháng năm sinh dạng abcdef vs a có thể trùng b,ab không quá 30,cd không quá 12 như ngày tháng năm sinh ý,è là 2 số cuối năm sinh.thanks


Bạn nói không ra thì bạn gửi cái file có "không ra" ấy lên.
Không có file thì ai biết bạn xóa rồi nhập lại công thức thế nào?
Gửi lên thì biết chỗ sai ở đâu rồi cùng sửa chứ.
Mà bạn phải miêu tả chỗ sai ở đâu để người khác khỏi mất công đoán, tìm kiếm
 
Cái file số điện thoại thì thay đổi liên tục nên mình lấy vs cho bạn 1 file mình tải lên thôi,mình xóa hết những số điện thoại cũ trong cột A2 và thay vào đó là 1 cột mới cũng có 762 dòng thì lại k cho ra kết quả như file cũ được,vì file đổi liên tục nên mình k biết post rõ chi tiết như thế nào,mong bạn thông cảm và chỉ giúp mình
 
Cái file số điện thoại thì thay đổi liên tục nên mình lấy vs cho bạn 1 file mình tải lên thôi,mình xóa hết những số điện thoại cũ trong cột A2 và thay vào đó là 1 cột mới cũng có 762 dòng thì lại k cho ra kết quả như file cũ được,vì file đổi liên tục nên mình k biết post rõ chi tiết như thế nào,mong bạn thông cảm và chỉ giúp mình

và thay vào đó là 1 cột mới cũng có 762 dòng thì lại k cho ra kết quả như file cũ được

Sau khi thao tác "và thay vào đó là 1 cột mới cũng có 762 dòng" và nhận được kết quả "thì lại k cho ra kết quả như file cũ được" thì gửi cái file "không ra " lên đây chứ còn gửi gì?
Bạn thử, bạn thấy không ra thì cái tập tin mà bạn nhìn thấy trước mắt bạn ghi lại rồi gửi.
 
mình gửi thử file mà máy báo không xem được và ảnh lên,bạn xem giúp mình xem lỗi ở đâu với,mình gửi tệp tin excel lên thì không được lên phải up tạm lên mediafire,bạn xem giúp mình nhé http: đây là link mediafirehttp://www.mediafire.com/view/?bb4r2z28stnmlf6

untitled.JPG hình ảnh sai của hàm mình mới cho thêm vào
 
Chỉnh sửa lần cuối bởi điều hành viên:
View attachment 91331 hình ảnh sai của hàm mình mới cho thêm vào

Bạn nên miêu tả cái mà bạn cho là sai chứ cái hình của bạn nhỏ như 2 bao diêm mthì sao tôi nhìn được?
Đại loại: chỗ này phải "thế này thế này" nhưng lại có "thế này thế này".
Tôi gửi hình ở trên máy tôi. Bạn hãy chỉ sai chỗ nào. Vd. nếu bạn cho là các ô E2, E3, E4 sai thì theo bạn nó phải thế nào?

View attachment 91341
 
mình đã gửi file mediafire excel sai theo kèm mà,mình nghĩ nó sai thì hiện luôn lên và bạn cũng thấy tất cả các ô còn lại từ B2->B762;C2->C762(Cả D,E,F) trên bảng excel đều hiện #NAME? sau khi mình cho 1 dãy số cũng 762 số vào,dãy số và bảng excel thì mình đã đính kèm trên file ở mediafire đó,bạn thử xem giúp mình với và cả 1 số hàm mình hỏi thêm ở trên,bạn thử xem có thế thêm giúp mình được không,thanks
 
mình đã gửi file mediafire excel sai theo kèm mà,mình nghĩ nó sai thì hiện luôn lên và bạn cũng thấy tất cả các ô còn lại từ B2->B762;C2->C762(Cả D,E,F) trên bảng excel đều hiện #NAME? sau khi mình cho 1 dãy số cũng 762 số vào,dãy số và bảng excel thì mình đã đính kèm trên file ở mediafire đó,bạn thử xem giúp mình với và cả 1 số hàm mình hỏi thêm ở trên,bạn thử xem có thế thêm giúp mình được không,thanks

Bạn ạ, bạn có kiểm tra không? Cái file mà tôi mở và chụp ảnh cho bạn xem là file của bạn mà tôi tải từ mediafire về mà. Bạn nhìn kỹ thì biết

À mà bạn có bật "cho phép Macro" không vậy? Cái Name kia là do bạn chưa bật Macro nên code VBA không được thực thi.
Tôi đã nói là phải mô tả cái sai nhưng bạn cố tình không. Nếu bạn nghe lời tôi thì tôi không phải mất công và bạn cũng không phải mất công viết thêm 1 bài nữa. Bạn cung cấp thông tin kiểu nhỏ giọt nên tốn nhiều điện nước.
 
Lần chỉnh sửa cuối:
quả thật mình không rành lắm về vấn đề code trong excel này nên có hơi chậm và cung cấp thông tin không được như bạn mong muốn chứ không phải mình cố tình không mô tả nó,sự thật thì mình rất muốn làm xong bảng excel này lắm chứ,mình vẫn chưa bật được marco do không biết chỉnh sercurity,bạn có thể chỉ giúp mình được không? mình đã vào biểu tượng sercurity nhưng không thấy nơi đặt các chế độ,liệu có phải phần mềm diệt virus CMC anti của mình đã vô hiệu hóa nó không?
 
quả thật mình không rành lắm về vấn đề code trong excel này nên có hơi chậm và cung cấp thông tin không được như bạn mong muốn chứ không phải mình cố tình không mô tả nó,

Nếu tôi đã viết: "Mà bạn phải miêu tả chỗ sai ở đâu để người khác khỏi mất công đoán, tìm kiếm"
Thì bạn có thể viết: "thì lại k cho ra kết quả như file cũ được vì giá trị các ô toàn là #NAME?", đúng không?
Nhưng sau yêu cầu bạn chỉ viết: "thì lại k cho ra kết quả như file cũ được"

sự thật thì mình rất muốn làm xong bảng excel này lắm chứ,mình vẫn chưa bật được marco do không biết chỉnh sercurity,bạn có thể chỉ giúp mình được không? mình đã vào biểu tượng sercurity nhưng không thấy nơi đặt các chế độ,liệu có phải phần mềm diệt virus CMC anti của mình đã vô hiệu hóa nó không?

Tôi chỉ có Excel 2007 nên tôi hướng dẫn cho 2007.
Nhấn biểu tượng Excel (góc trên bên trái) --> Excel options --> Trust Center --> Trust Center Settings ... --> Macro Settings --> chọn "Enable all macros" --> Ok --> OK
Nếu bạn chọn "Disable all macros with notifications" thì khi mở file có macro bạn sẽ được báo - trên thanh công thức có thanh "Security Warning: Macros have been disabled Options". Lúc này nếu muốn chạy được macro thì phải nhấn Options và chọn Enable this content --> OK
 
mình đã làm được rồi,cảm ơn bạn rất nhiều nhé,chỉ cần chọn enable all marco là ra rồi,cảm ơn rất nhiều,nếu bạn dùng sim trả sau mobifone thì liên hệ với mình,mình sẽ tặng bạn 1 sim miễn phí để cảm ơn bạn,thanks

à mình quên còn cái hàm theo ngày sinh dạng ddmmyy(Theo ngày tháng năm sinh) mình hỏi và dạng ABCCBA thì chắc không được à bạn?
 
Chỉnh sửa lần cuối bởi điều hành viên:
à mình quên còn cái hàm theo ngày sinh dạng ddmmyy(Theo ngày tháng năm sinh) mình hỏi và dạng ABCCBA thì chắc không được à bạn?

Về dạng ABCCBA thì tôi thêm vào hàm cũ DangDuoi. Tôi vẫn giả thiết như cũ là A, B, C khác nhau từng đôi một
------------
Dữ liệu của bạn là số điện thoại? Tôi thử phát biểu lại và bạn bổ sung.
Có các số điện thoại dạng: "xyz...abcdef". Hãy lọc tất cả các số đt thỏa điều kiện sao cho ab-cd-ef là một ngày nào đó (ab là ngày, cd là tháng, và ef là năm)
----------
Một vài ví dụ:
Có các số 902118243, 902118247, 902111257, 902118284, 902110801, 902118342, 902300201
Thì chỉ có 2 số thỏa là: 902111257 (11-12-57 là ngày đúng - năm là 1857, 1957?), 902110801 (11-08-01 là ngày đúng - năm là 1801, 1901, 2001?)
Ví dụ số 902300201 không thỏa vì không có ngày 30-02-01 (không có tháng Hai nào có 30 ngày)
--------------
Tôi phát biểu như thế có đúng không? Nếu đúng thì thực ra ef là tùy ý vì luôn có năm tận cùng bằng 00 - 99 (năm 2000, 1899, 1999). Hay là bạn chỉ xét năm trong khoảng? Vd. Từ 1912 tới 2012?
Tức số 902120113 thỏa mặc dù "ông" sinh ngày 12-01-1913 có lẽ đã chết từ lâu?
Nếu bạn mô tả kỹ lưỡng dữ liệu và yêu cầu thì những người giúp bạn sẽ đỡ mất thời gian rất nhiều. Việc của mình nên cần miêu tả sao cho người ta hiểu mình và sao cho người ta mất ít thời gian nhất.
Tôi thêm vào bài trước 1 hàm riêng là DangNgaySinh. Tôi viết với giả thiết như đã nêu ở trên, tức năm tận cùng bằng 00 - 99
Chọn cột G từ dòng 2 tới vd. dòng 762.
Công thức =DangNgaySinh($A$2:$A$762) kết thức bằng Ctrl + Shift + Enter
 

File đính kèm

Lần chỉnh sửa cuối:
cảm ơn bạn nhé,mình quên mất là định viết năm sinh từ 70->97 vs dạng đuôi ABC ban đầu mình mô tả đó là số liên tiếp(vd như 123,345,567) nhưng giờ làm tiếp thì phiền bạn quá,dừng lại vậy cũng được rồi,cảm ơn nhiều.

bạn có thể giúp mình sắp xếp bảng số sau theo năm sinh 2 số cuối ở đuôi được không,trong bảng 2 số cuối của số điện thoại từ 70->99,bạn sắp xếp hộ mình với(sắp xếp hết 70 rồi đến 71,72...cho đến 99 ở cuối(nếu được,bạn giúp mình sắp xếp vẫn như vậy nhưng thêm cả tháng nữa được không(vd dãy số trong năm 70 sẽ theo tuần tự tháng 1,2,3..12),nếu không xếp theo cả tháng nữa được thì chỉ cần xếp theo năm?),giúp mình với mình đang cần gấp.hic..Thanks

http://www.mediafire.com/view/?ihuxqtsm0c2110b đây là link mediafire bảng excel mình cần lọc,mình đã giải trình và cung cấp bảng excel cần lọc,nếu còn thiếu sót hay giải thích thông tin gây khó hiểu thì mong bạn chỉ rõ và bỏ qua cho mình,thanks..giúp mình với nhé,thật sự đang cần gấp
 
Chỉnh sửa lần cuối bởi điều hành viên:
http://www.mediafire.com/view/?ihuxqtsm0c2110b đây là link mediafire bảng excel mình cần lọc,mình đã giải trình và cung cấp bảng excel cần lọc,nếu còn thiếu sót hay giải thích thông tin gây khó hiểu thì mong bạn chỉ rõ và bỏ qua cho mình,thanks..giúp mình với nhé,thật sự đang cần gấp


Trong dữ liệu có số đt có dạng ngày sinh mà năm sinh là 57 - không thuộc 70 - 99 - đó là số tại ô A608.
Sau khi sắp xếp thì số đt có năm sinh 57 nằm ở hàng đầu tiên.
Các số được sắp xếp theo thứ tự: năm, tháng, ngày
 

File đính kèm

Cảm ơn bạn nhiều,bạn giỏi thật đó

Bạn ơi mình có 1 bảng số khác nhưng vẫn dạng 9x... như các bảng trên,bạn có thể lọc giúp mình ra 3 dạng đuôi là 9x....ABA(B+1) tức là đuôi là 2 số có 2 chữ số liền nhau vd đuôi là 3536,dạng hai là ABCAB(C+1) là dạng đuôi là 2 số có 3 chữ số liền nhau vd là:905.386.387
và dạng nữa là đuôi A(A+1)(A+2) tức là đuôi là 3 số liên tiếp như 567,123,234... được không,mình cảm ơn trước nhé,mình đính kèm file excel ở bên dưới

http://www.mediafire.com/view/?s047osmxgd1cx16 file excel kèm
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn ơi mình có 1 bảng số khác nhưng vẫn dạng 9x... như các bảng trên,bạn có thể lọc giúp mình ra 3 dạng đuôi là 9x....ABA(B+1) tức là đuôi là 2 số có 2 chữ số liền nhau vd đuôi là 3536,

Có đk A <> B không? Tức 3334 có lấy không?

dạng hai là ABCAB(C+1) là dạng đuôi là 2 số có 3 chữ số liền nhau vd là:905.386.387

Có đk A, B, C khác nhau từng đôi một không? Tức 333334, 133134 ... có lấy không?
 
A,BvàA,B,C có thể trùng nhau,vd 333334 và 133134 có lấy hết
Tất cả 2 dạng đó mình đều muốn lọc gồm cả A<>B và A=B,bạn giúp mình với
 
A,BvàA,B,C có thể trùng nhau,vd 333334 và 133134 có lấy hết
Tất cả 2 dạng đó mình đều muốn lọc gồm cả A<>B và A=B,bạn giúp mình với

Bạn làm gì mà lọc đuôi số đt liên tục thế? Để làm gì vậy? Những dạng đuôi đó có ý nghĩa gì?
---------------
Nói chung có nhiều cách. Tôi nghĩ qua thì có thể làm thế này:
1. Với mỗi chuỗi là số điện thoại ta "cắt (MID) "những đoạn cuối" rồi kiểm tra xem chúng có thỏa đk không.
2. Cũng có thể dùng RegExp nhưng không phải lúc nào cũng cho code tối ưu.
Tôi nghĩ rằng với bài cụ thể này ta dùng cách "Thiên về Toán".
vd. Ta cần lọc đuôi dạng ABA(B+1):
Ta đọc 4 ký tự cuối vào a (Long): a = CLng(số đt) mod 10000
IF (a mod 10 <> 0) and (a mod 101 = 1) then Lấy "số đt"
Hai cách đầu nếu ai thích thì tự viết. Tôi nghĩ hai cách đó "chậm hơn" cách "thiên về Toán" cỡ chục lần. Tốc độ chắc là chóng mặt luôn.
Mã:
Private Declare Function GetTickCount Lib "kernel32" () As Long
Function DuoiLienTiep(Arr)
Dim tmpArr, tmp, index(1 To 3) As Long, r As Long, c As Long, a As Long, lay As Boolean, t As Double
    t = GetTickCount
    If IsArray(Arr) Then
        tmpArr = Arr
    Else
        ReDim tmpArr(1 To 1, 1 To 1)
        tmpArr(1, 1) = Arr
    End If
    ReDim tmp(1 To UBound(tmpArr) - LBound(tmpArr) + 1, 1 To 3)
    
    For r = LBound(tmp) To UBound(tmp)
        For c = 1 To 3
            tmp(r, c) = ""
        Next c
    Next r
    
    For r = LBound(tmp) To UBound(tmp)
        For c = 1 To 3
            Select Case c
                Case 1: ' dang duoi ABA(B+1)
                    a = CLng(tmpArr(r, LBound(tmpArr, 2))) Mod 10000
                    lay = (a Mod 10 <> 0) And (a Mod 101 = 1)
                Case 2: ' dang duoi ABCAB(C+1)
                    a = CLng(tmpArr(r, LBound(tmpArr, 2))) Mod 1000000
                    lay = (a Mod 10 <> 0) And (a Mod 1001 = 1)
                Case 3: ' dang duoi A(A+1)(A+2)
                    a = CLng(tmpArr(r, LBound(tmpArr, 2))) Mod 1000
                    lay = (a Mod 10 > 1) And (a Mod 111 = 12)
            End Select
            If lay Then
                index(c) = index(c) + 1
                tmp(index(c), c) = tmpArr(r, LBound(tmpArr, 2))
            End If
        Next c
    Next r
    DuoiLienTiep = tmp
    
    Debug.Print "toan: " & (GetTickCount - t) / 1000
End Function

---------------
Trong tập tin đính kèm: chọn C2:E19816 rồi nhập công thức rồi kết thúc bằng Ctrl + Shift + Enter

http://www.mediafire.com/?vb2c5uk5k7u2j5c
 
mình bán sim nên cần lọc nhiều sim theo các dạng đuôi ưa chuộng bạn à
 
Hi bạn. CHo mình hỏi lộc danh sách theo dang abcabc không bạn. Nhờ bạn làm giúp hàm này giup minh. Cam on ban nhieu
 
Hi bạn. CHo mình hỏi lộc danh sách theo dang abcabc không bạn. Nhờ bạn làm giúp hàm này giup minh. Cam on ban nhieu

Bạn Hi ai đấy?
Mà bạn muốn hỏi ai, nói chuyện với ai thì bạn phải trích bài của người ấy hoặc bằng cách nào đấy để mọi người biết bạn hỏi ai.
Mà bạn kiệm lời quá. Bạn là người hỏi mới thì bạn phải trình bầy dữ liệu của mình. Có người cứ làm, lạc đề thì làm lại. Nhưng cũng có người không muốn mất công không đáng có.
Bạn nên rút kinh nghiệm.
------------
Tôi cho là a, b, c là các chữ số. Nếu không là vậy, hoặc còn "vài" điều kiện nữa - vd. a, b, c khác nhau từng đôi một - thì tôi cũng không tham gia nữa.
------------
Code có thể viết theo nhiều kiểu. Tôi dùng "kiểu Toán học". Tốc độ nhanh "chóng mặt" luôn. Tôi tin là không còn cách nào nhanh hơn. Còn nếu có cách nhanh hơn thì tôi cũng rất muốn biết.
-------------
[GPECODE=vb]
Function DuoiABCABC(Arr)
Dim tmpArr, tmp, index As Long, r As Long, a As Long
If IsArray(Arr) Then
tmpArr = Arr
Else
ReDim tmpArr(1 To 1, 1 To 1)
tmpArr(1, 1) = Arr
End If
ReDim tmp(1 To UBound(tmpArr) - LBound(tmpArr) + 1, 1 To 1)

For r = LBound(tmp) To UBound(tmp)
tmp(r, 1) = ""
Next r

For r = LBound(tmp) To UBound(tmp)
On Error GoTo end_
a = CLng(tmpArr(r, 1)) Mod 1000000
If (a <> 0) And (a Mod 1001 = 0) Then
index = index + 1
tmp(index, 1) = tmpArr(r, 1)
End If
end_:
Next r

DuoiABCABC = tmp
End Function
[/GPECODE]

Cách dùng: Vd. nếu dữ liệu của bạn từ A1 tới A200000 và kết quả trả trong cột B từ B1 thì:
1. Chọn vùng B1: B200000
2. Công thức là =DuoiABCABC(A1:A200000) và kết thúc bằng Shift + Ctrl + Enter
 
Lần chỉnh sửa cuối:
Thử sử dụng công thức trong excel

Với đề bài bạn đưa ra mình thử sử dụng các hàm trong excel xem sao.
1.Nhược điểm:
- Lọc ra các số, nhưng chưa Sort lại
- Sử dụng công thức mảng -> số lượng dữ liệu đừng lớn quá nha
2. Ưu điểm:
- Có thể thêm tùy biến điều kiện ABCD... tùy thích (với giả định A, B, C, D là các số khác biệt từng đôi một không sắp thứ tự)
(mình làm phần 1 thôi, chưa thử với điều kiện ngày sinh)
Bạn xem theo file đính kèm.
 

File đính kèm

Với đề bài bạn đưa ra mình thử sử dụng các hàm trong excel xem sao.
1.Nhược điểm:
- Lọc ra các số, nhưng chưa Sort lại
- Sử dụng công thức mảng -> số lượng dữ liệu đừng lớn quá nha
2. Ưu điểm:
- Có thể thêm tùy biến điều kiện ABCD... tùy thích (với giả định A, B, C, D là các số khác biệt từng đôi một không sắp thứ tự)
(mình làm phần 1 thôi, chưa thử với điều kiện ngày sinh)
Bạn xem theo file đính kèm.
cái này của bác đúng là có thế nhân bản dễ dàng ra nhiều dạng, cơ à ko sort lại nên chưa tiện lắm, dữ liệu nhiều nhiều chút thỉnh thoảng đơ luôn :D
Thanks bác!
 
Với đề bài bạn đưa ra mình thử sử dụng các hàm trong excel xem sao.
1.Nhược điểm:
- Lọc ra các số, nhưng chưa Sort lại
- Sử dụng công thức mảng -> số lượng dữ liệu đừng lớn quá nha
2. Ưu điểm:
- Có thể thêm tùy biến điều kiện ABCD... tùy thích (với giả định A, B, C, D là các số khác biệt từng đôi một không sắp thứ tự)
(mình làm phần 1 thôi, chưa thử với điều kiện ngày sinh)
Bạn xem theo file đính kèm.

bác làm thế nào mà nó sort được nữa thì ngon
 
Bác quả là cao nhân. file rất hữu ích trong việc lọc số. Bọn em làm sim số thường cập nhật bảng sim (bao gồm số và giá thu về của thợ) , em muốn lập một bảng cơ bản như trên nhưng thêm vào 2 cột : Giá và Người nắm số bác có thể giúp em không ạ. khi lọc số theo dạng xong bảng có thể hiển thị rõ số dạng nào, ai đang nắm giữ và giá là bao nhiêu. kính mong bác chỉ bảo

Về dạng ABCCBA thì tôi thêm vào hàm cũ DangDuoi. Tôi vẫn giả thiết như cũ là A, B, C khác nhau từng đôi một
------------
Dữ liệu của bạn là số điện thoại? Tôi thử phát biểu lại và bạn bổ sung.
Có các số điện thoại dạng: "xyz...abcdef". Hãy lọc tất cả các số đt thỏa điều kiện sao cho ab-cd-ef là một ngày nào đó (ab là ngày, cd là tháng, và ef là năm)
----------
Một vài ví dụ:
Có các số 902118243, 902118247, 902111257, 902118284, 902110801, 902118342, 902300201
Thì chỉ có 2 số thỏa là: 902111257 (11-12-57 là ngày đúng - năm là 1857, 1957?), 902110801 (11-08-01 là ngày đúng - năm là 1801, 1901, 2001?)
Ví dụ số 902300201 không thỏa vì không có ngày 30-02-01 (không có tháng Hai nào có 30 ngày)
--------------
Tôi phát biểu như thế có đúng không? Nếu đúng thì thực ra ef là tùy ý vì luôn có năm tận cùng bằng 00 - 99 (năm 2000, 1899, 1999). Hay là bạn chỉ xét năm trong khoảng? Vd. Từ 1912 tới 2012?
Tức số 902120113 thỏa mặc dù "ông" sinh ngày 12-01-1913 có lẽ đã chết từ lâu?
Nếu bạn mô tả kỹ lưỡng dữ liệu và yêu cầu thì những người giúp bạn sẽ đỡ mất thời gian rất nhiều. Việc của mình nên cần miêu tả sao cho người ta hiểu mình và sao cho người ta mất ít thời gian nhất.
Tôi thêm vào bài trước 1 hàm riêng là DangNgaySinh. Tôi viết với giả thiết như đã nêu ở trên, tức năm tận cùng bằng 00 - 99
Chọn cột G từ dòng 2 tới vd. dòng 762.
Công thức =DangNgaySinh($A$2:$A$762) kết thức bằng Ctrl + Shift + Enter
 

File đính kèm

Lần chỉnh sửa cuối:
Tôi không còn tham gia diễn đàn và mất thời gian nữa. Mà bạn nhìn kỹ thì thấy người ta đã đình chỉ nick siwtom rồi.
Tôi giờ chỉ lâu lâu mới vào xem với mục đích giải quyết những trường hợp như của bạn mà thôi, hoặc phán ứng khi có những bàn luận về những bài của siwtom. Họ đình chỉ nick siwtom nhưng có lẽ họ chiếm đoạt những bài viết của siwtom làm tài nguyên cho diễn đàn của mình nên họ không xóa. Nếu xóa thì tôi cũng chả vào đây làm gì.
 
Lần chỉnh sửa cuối:
vâng. em cũng thấy nick kia của bác đã bị khóa rồi :(. đã tìm đủ cách để liên lạc với bác nhưng không được. bác có thể giúp em được không? nếu được bác cho em số đt hoặc email để em liên lạc với bác ạ
 

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

Back
Top Bottom