Chia dữ liệu theo nhóm

Liên hệ QC

huy26th

Thành viên mới
Tham gia
24/6/14
Bài viết
3
Được thích
0
Em xin các bác giúp em vấn đề này.
Em có 1 bảng số điện thoại :
A
0987 280 474
0914 258 697
0935 259 412
01687 258 963
01234 587 236

Em muốn cột B nó list ra tự động các danh sách nhà mạng. Chuỗi dữ liệu nào bắt đầu là 097,098,0168 thì nó sẽ show là là VIETTEL...v...v..
 
Chuỗi dữ liệu nào bắt đầu là 097,098,0168 thì nó sẽ show là là VIETTEL...v...v..
Cái "...V...v" của bạn là cái gì? mọi người đâu có biết hết được các đầu số, tốt nhất là bạn đưa file đính kèm lên (có liệt kê tất cả các đầu số muốn lọc, trình bày ra sao)
 
cái ...v...v của em là ngoài viettel ra còn vinafone, mobifone chẳng hạn. còn về các đầu số điện thoại mình kiểm soát được mà. ví như viettel 096 097 098 0166 0167 0168, Vina thì 091 094 0123 0124 0125. Mọi người đưa hàm cho em thôi. Còn em sẽ thay các đầu số vào để nó tính ạ.
Cái "...V...v" của bạn là cái gì? mọi người đâu có biết hết được các đầu số, tốt nhất là bạn đưa file đính kèm lên (có liệt kê tất cả các đầu số muốn lọc, trình bày ra sao)
 
File ví dụ ạ. Mọi người xem giúp em. Em hơi gà Exel.
 
- bài này mà giải bằng .Regexp thì rất hay, mình mới mò nó mấy hôm nay chắc có lẽ ... --=0
- bạn tải file đính kèm xem sao nhé ! cho chạy Macro (click Enable Content)

hàm tự tạo:
Mã:
Function CheckNum(soDT As Variant, vung As Range)
Dim Arr(), i As Long, Regex As String
Dim oMatches As Object
  
    Arr = vung.Value
    For i = 1 To UBound(Arr)
    If Arr(i, 1) <> "" Then
        Regex = IIf(Regex = "", Arr(i, 1), Regex & "|" & Arr(i, 1))
    End If
    Next
    '----------
    With CreateObject("Vbscript.Regexp")
        .Pattern = "(" & Regex & ")?"
        .IgnoreCase = True
        Set oMatches = .Execute(CStr(soDT)) 'converts a value to a string
    End With


    If oMatches.Count > 0 Then
        CheckNum = Trim(oMatches(0).SubMatches(Item))
    End If
    
End Function

công thức trên sheet:
Mã:
=VLOOKUP(CheckNum(B7,$I$2:$I$20),$I$2:$J$20,2,0)
'------
liệt kê các đầu số vào vùng màu xanh
 

File đính kèm

  • kiem tra so dien thoai.xlsm
    15.5 KB · Đọc: 9
cái ...v...v của em là ngoài viettel ra còn vinafone, mobifone chẳng hạn. còn về các đầu số điện thoại mình kiểm soát được mà. ví như viettel 096 097 098 0166 0167 0168, Vina thì 091 094 0123 0124 0125. Mọi người đưa hàm cho em thôi. Còn em sẽ thay các đầu số vào để nó tính ạ.
Công thức còn thiếu nhà mạng cũng như đầu số, bạn bổ sung thêm nha!
 

File đính kèm

  • SO_DT.xls
    19.5 KB · Đọc: 11
- bài này mà giải bằng .Regexp thì rất hay, mình mới mò nó mấy hôm nay chắc có lẽ ... --=0
- bạn tải file đính kèm xem sao nhé ! cho chạy Macro (click Enable Content)

hàm tự tạo:
Mã:
Function CheckNum(soDT As Variant, vung As Range)
Dim Arr(), i As Long, Regex As String
Dim oMatches As Object
  
    Arr = vung.Value
    For i = 1 To UBound(Arr)
    If Arr(i, 1) <> "" Then
        Regex = IIf(Regex = "", Arr(i, 1), Regex & "|" & Arr(i, 1))
    End If
    Next
    '----------
    With CreateObject("Vbscript.Regexp")
        .Pattern = "(" & Regex & ")?"
        .IgnoreCase = True
        Set oMatches = .Execute(CStr(soDT)) 'converts a value to a string
    End With


    If oMatches.Count > 0 Then
        CheckNum = Trim(oMatches(0).SubMatches(Item))
    End If
    
End Function

công thức trên sheet:
Mã:
=VLOOKUP(CheckNum(B7,$I$2:$I$20),$I$2:$J$20,2,0)
'------
liệt kê các đầu số vào vùng màu xanh
Theo mình nghĩ nếu đã dùng Regexp thì đâu cần phải "vùng" so sánh để lấy pattern, còn nếu có vùng so sánh thì cho kết quả luôn là Viettel hay Mobi luôn chứ, chứ vừa công thức, vừa code này thì rối quá.
Ví dụ: Nếu dùng Regexp thì mình có thể dùng Pattern sau để lấy đầu số:
Mã:
09\d(?=\d)|01\d{2}(?=\d)
(Ghi chú: số điện thoại trước khi đưa vào Regexp đã được Replace hết dấu cách (hoặc dấu -, ., +, /... dùng để ngăn các phần trong số đt)
Còn nếu dùng công thức thì
có thể dùng luôn
Mã:
=Vlookup(left(substitue(sdt," ",""),len(substitue(sdt," ",""))-7),Vùng tham chiếu đầu số, 2, 0)
 
dùng 1 bảng phụ với 2 trường là: dầu số và Nhà mạng
tiếp đến sử dụng hàm vlookup
bạn đưa file lên xem thực tế thế nào?
 
Web KT

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

Back
Top Bottom