Anh chị giúp e tìm số điện thoại trong excel

Liên hệ QC

noithat89

Thành viên mới
Tham gia
5/3/16
Bài viết
8
Được thích
1
em có 1 file như hình
view

Cột A | Cột B
Hiền Supi | C ơi e lấy áo phao dài đen . E 53kg. Cao 157. Sdt.0968111431
Hong Anh | E lấy 1 đen nhé. 0965523315
Răng Khểnh | A300 màu đen c nhé 0966730715
Cột A là tên ạ, Cột B là text + sđt
giờ e muốn lấy được số điện thoại ra ở cột C thì có cách nào không ạ
Cảm ơn mọi người đã giúp đỡ e
 
em có 1 file như hình
view

Cột A | Cột B
Hiền Supi | C ơi e lấy áo phao dài đen . E 53kg. Cao 157. Sdt.0968111431
Hong Anh | E lấy 1 đen nhé. 0965523315
Răng Khểnh | A300 màu đen c nhé 0966730715
Cột A là tên ạ, Cột B là text + sđt
giờ e muốn lấy được số điện thoại ra ở cột C thì có cách nào không ạ
Cảm ơn mọi người đã giúp đỡ e
Bạn đưa file đi nha
 
Nếu là mình thì sẽ dùng regex regular
 
làm giúp mình được không bạn ơi, mình k biết làm
Mình cho bạn gợi ý, bạn dùng công cụ nào hoặc nhờ ai giúp.
Số điện thoại VN thường có 10~11 ký tự. Thường người ta viết
0123456789
0123 456 789
0123-456-789
(0123)456-789

Bước 1. Remo các ký tự rỗng " ", ký tự "-", ký tự "(" để các số còn lại 0123456789
Bước 2: Dùng regex regular lấy text theo công thức : \d{10}\d*
 
Tạm:
Mã:
E1="0"&AGGREGATE(14,6,--MID(D1,ROW(INDIRECT("$1:"&LEN(D1))),11),1)
'=IF(LEN(IFERROR("0"&AGGREGATE(14,6,--MID(D1,ROW(INDIRECT("$1:"&LEN(D1))),11),1),""))<10,"",IFERROR("0"&AGGREGATE(14,6,--MID(D1,ROW(INDIRECT("$1:"&LEN(D1))),11),1),""))
 
Mình cho bạn gợi ý, bạn dùng công cụ nào hoặc nhờ ai giúp.
Số điện thoại VN thường có 10~11 ký tự. Thường người ta viết
0123456789
0123 456 789
0123-456-789
(0123)456-789

Bước 1. Remo các ký tự rỗng " ", ký tự "-", ký tự "(" để các số còn lại 0123456789
Bước 2: Dùng regex regular lấy text theo công thức : \d{10}\d*
Mình cho bạn gợi ý, bạn dùng công cụ nào hoặc nhờ ai giúp.
Số điện thoại VN thường có 10~11 ký tự. Thường người ta viết
0123456789
0123 456 789
0123-456-789
(0123)456-789

Bước 1. Remo các ký tự rỗng " ", ký tự "-", ký tự "(" để các số còn lại 0123456789
Bước 2: Dùng regex regular lấy text theo công thức : \d{10}\d*
Mình cũng biết chắc nên dùng RegExp sẽ nhanh gọn nhưng mình... không biết làm
Bạn cho file + code lên đây tham khảo với
 
em có 1 file như hình
view

Cột A | Cột B
Hiền Supi | C ơi e lấy áo phao dài đen . E 53kg. Cao 157. Sdt.0968111431
Hong Anh | E lấy 1 đen nhé. 0965523315
Răng Khểnh | A300 màu đen c nhé 0966730715
Cột A là tên ạ, Cột B là text + sđt
giờ e muốn lấy được số điện thoại ra ở cột C thì có cách nào không ạ
Cảm ơn mọi người đã giúp đỡ e
Bạn dùng công thức mảng này:
Mã:
F1="0"&MAX(IFERROR(--MID(D1&"|",ROW($1:$100),{9,10,11}),))
Bấm CTrl+Shift+Enter rồi copy xuống!!!
 
Mình cũng biết chắc nên dùng RegExp sẽ nhanh gọn nhưng mình... không biết làm
Bạn cho file + code lên đây tham khảo với
Em ví dụ:
Mã:
Option Explicit
Private Sub mainPROCEDUCE()
    Call AddReference
    Call getPhoneNumber
End Sub
Sub AddReference()
    Dim VBAEditor As VBIDE.VBE
    Dim vbProj As VBIDE.VBProject
    Dim chkRef As VBIDE.Reference
    Dim BoolExists As Boolean

    Set VBAEditor = Application.VBE
    Set vbProj = ActiveWorkbook.VBProject

    '~~> Check if "Microsoft VBScript Regular Expressions 5.5" is already added
    For Each chkRef In vbProj.References
        If chkRef.Name = "VBScript_RegExp_55" Then
            BoolExists = True
            GoTo CleanUp
        End If
    Next

    vbProj.References.AddFromFile "C:\WINDOWS\system32\vbscript.dll\3"

CleanUp:
    If BoolExists = True Then
        MsgBox "Reference already exists"
    Else
        MsgBox "Reference Added Successfully"
    End If

    Set vbProj = Nothing
    Set VBAEditor = Nothing
End Sub
Private Sub getPhoneNumber()
    Dim regex As Object, RNG, firstRNG As Range, firstROW As Integer, lastROW As Long, strDATA As String
    Dim Match, matches As Object
    Set regex = CreateObject("VBScript.RegExp")
    Set firstRNG = ThisWorkbook.Worksheets("DATA").Range("firstRNG")
    firstROW = 1
  
    lastROW = firstRNG.CurrentRegion.Rows.Count
  
    For RNG = firstROW To lastROW
        strDATA = ThisWorkbook.Worksheets("DATA").Range("C" & RNG)
        Set matches = regex.Execute(strDATA)
      
        With regex
          .Pattern = "\d{10}\d*"
          .Global = True
        End With
      
        For Each Match In matches
          Debug.Print Match.Value '
        Next Match
    Next RNG
End Sub

Chú ý anh cần add thêm thư viện
Microsoft Visual Basic.... nha, em lười viết thêm code quá. Còn vụ repalce thì xử lý tay hoặc viết thêm vài dòng code

Kết quả Output trong khung Immediate
Mã:
01628570270
01633886226
01634042052
01273191604
01692657141
01633118859
01696950646
01696013735
01636360368
01647064814
[\code]
 
Em ví dụ:
Mã:
Option Explicit
Private Sub mainPROCEDUCE()
    Call AddReference
    Call getPhoneNumber
End Sub
Sub AddReference()
    Dim VBAEditor As VBIDE.VBE
    Dim vbProj As VBIDE.VBProject
    Dim chkRef As VBIDE.Reference
    Dim BoolExists As Boolean

    Set VBAEditor = Application.VBE
    Set vbProj = ActiveWorkbook.VBProject

    '~~> Check if "Microsoft VBScript Regular Expressions 5.5" is already added
    For Each chkRef In vbProj.References
        If chkRef.Name = "VBScript_RegExp_55" Then
            BoolExists = True
            GoTo CleanUp
        End If
    Next

    vbProj.References.AddFromFile "C:\WINDOWS\system32\vbscript.dll\3"

CleanUp:
    If BoolExists = True Then
        MsgBox "Reference already exists"
    Else
        MsgBox "Reference Added Successfully"
    End If

    Set vbProj = Nothing
    Set VBAEditor = Nothing
End Sub
Private Sub getPhoneNumber()
    Dim regex As Object, RNG, firstRNG As Range, firstROW As Integer, lastROW As Long, strDATA As String
    Dim Match, matches As Object
    Set regex = CreateObject("VBScript.RegExp")
    Set firstRNG = ThisWorkbook.Worksheets("DATA").Range("firstRNG")
    firstROW = 1
 
    lastROW = firstRNG.CurrentRegion.Rows.Count
 
    For RNG = firstROW To lastROW
        strDATA = ThisWorkbook.Worksheets("DATA").Range("C" & RNG)
        Set matches = regex.Execute(strDATA)
    
        With regex
          .Pattern = "\d{10}\d*"
          .Global = True
        End With
    
        For Each Match In matches
          Debug.Print Match.Value '
        Next Match
    Next RNG
End Sub

Chú ý anh cần add thêm thư viện
Microsoft Visual Basic.... nha, em lười viết thêm code quá. Còn vụ repalce thì xử lý tay hoặc viết thêm vài dòng code

Kết quả Output trong khung Immediate
Mã:
01628570270
01633886226
01634042052
01273191604
01692657141
01633118859
01696950646
01696013735
01636360368
01647064814
[\code]
Anh làm rồi nè, phải dùng thêm hàm tự tạo mới được, code sẽ ngắn gọn hơn.

View attachment 189601 View attachment 189602
Ủa thấy người ta làm vụ RegExp này đâu cần Add Reference gì đâu ta?
 
bó thịt.....
Thế này mà các bác vẫn làm được
:eek::eek::eek:***&&%:blowup:
 
Nãy rảnh task xíu mình viết lại code. Bạn nào thích thì viết lại thành Function cho bạn ấy.

Mã:
Option Explicit
Private Sub mainPROCEDUCE()
On Error Resume Next
    'Add "Microsoft Visual Basic for Applications Extensibility 5.3"
    Call AddVBE
   
    'Add "Microsoft VBScript Regular Expressions 5.5" library
    Call AddReference
    Call getPhoneNumber
End Sub
Private Sub AddVBE()
    Dim vbProj, chkRef
    Dim BoolExists As Boolean

    Set vbProj = ActiveWorkbook.VBProject
    '~~> Check if "Microsoft Visual Basic for Applications Extensibility 5.3" is already added
            For Each chkRef In vbProj.References
                    If chkRef.Name = "Microsoft Visual Basic for Applications Extensibility 5.3" Then
                        BoolExists = True
                        GoTo CleanUp
                    End If
                Next
            vbProj.References.AddFromGuid "{0002E157-0000-0000-C000-000000000046}", 0, 0
CleanUp:
    If BoolExists = True Then
        MsgBox "Reference already exists"
    Else
        MsgBox "Reference Added Successfully"
    End If

    Set vbProj = Nothing
End Sub
Private Sub AddReference()
    Dim VBAEditor As VBIDE.VBE
    Dim vbProj As VBIDE.VBProject
    Dim chkRef As VBIDE.Reference
    Dim BoolExists As Boolean

    Set VBAEditor = Application.VBE
    Set vbProj = ActiveWorkbook.VBProject
    '~~> Check if "Microsoft VBScript Regular Expressions 5.5" is already added
            For Each chkRef In vbProj.References
                    If chkRef.Name = "VBScript_RegExp_55" Then
                        BoolExists = True
                        GoTo CleanUp
                    End If
                Next
            vbProj.References.AddFromFile "C:\WINDOWS\system32\vbscript.dll\3"
CleanUp:
    If BoolExists = True Then
        MsgBox "Reference already exists"
    Else
        MsgBox "Reference Added Successfully"
    End If

    Set vbProj = Nothing
    Set VBAEditor = Nothing
End Sub
Private Sub getPhoneNumber()
    Dim regex As Object, RNG, firstRNG As Range, firstROW As Integer, lastROW As Long, strDATA As String
    Dim Match, matches As Object
    Set regex = CreateObject("VBScript.RegExp")
    Set firstRNG = ThisWorkbook.Worksheets("DATA").Range("firstRNG")
    firstROW = 1
    lastROW = firstRNG.CurrentRegion.Rows.Count
    For RNG = firstROW To lastROW
        strDATA = ThisWorkbook.Worksheets("DATA").Range("C" & RNG)
        Set matches = regex.Execute(strDATA)
   
        With regex
          .Pattern = "(?:(\s)\d\d\s*\-*\d\s*\-*\d\s*\-*\d\s*\-*\d\s*\-*\d\s*\-*\d\s*\-*\d\s*\-*\d\s*\-*\d)"
          .Global = True
        End With
   
        For Each Match In matches
          Debug.Print Match.Value '
        Next Match
    Next RNG
End Sub

[\code]
 
Web KT
Back
Top Bottom