Nhờ mọi người giúp mình macro đổi đầu số đt ạ

Liên hệ QC

kimdong80

Thành viên chính thức
Tham gia
26/3/08
Bài viết
88
Được thích
8
Mình có danh sách KH cũ với mọi định dạng khác nhau như vd bên dưới:
1651234567
903456789
01234567891/0912349892
98734562 (số thiếu)
0938763972- 0124456970
Mình muốn với những số như dòng 1 thì sẽ tự đổi đầu thành 0351234567
Dòng 2 thì chỉ thêm số 0-> 0903456789
Dòng 3 thì chỉ lấy số trc dấu / và nếu định dạng 11 số thì chuyển về định dạng 10 số
Dòng 4 là số thiếu thì tô vàng dòng đó
Dòng 5 thì lấy số trc dấu - và nếu 11 số thì đổi sang 10 số.
Cám ơn mọi người rất nhiều
 
Mình có danh sách KH cũ với mọi định dạng khác nhau như vd bên dưới:
1651234567
903456789
01234567891/0912349892
98734562 (số thiếu)
0938763972- 0124456970
Mình muốn với những số như dòng 1 thì sẽ tự đổi đầu thành 0351234567
Dòng 2 thì chỉ thêm số 0-> 0903456789
Dòng 3 thì chỉ lấy số trc dấu / và nếu định dạng 11 số thì chuyển về định dạng 10 số
Dòng 4 là số thiếu thì tô vàng dòng đó
Dòng 5 thì lấy số trc dấu - và nếu 11 số thì đổi sang 10 số.
Cám ơn mọi người rất nhiều
Thế dữ liệu đâu ta.Mà dữ liệu phải có bảng quy đổi số điện thoại nhé.
 
Viết (4) macro cho từng trường hợp thì chắc ăn hơn cả!

Mà hình như phải là >=5 (M) thì phải!
 
Mình gửi bạn file mẫu, bạn xem giúp mình nhé. Cám ơn bạn nhiều
Bạn thử cái code này nhé.
Mã:
Sub tachso()
    Dim arr, i As Long, lr As Long, dic As Object, kq, dk As String
    Set dic = CreateObject("scripting.dictionary")
    With Sheets(2)
        arr = .Range("A3:B23").Value
        For i = 1 To UBound(arr, 1)
            dk = arr(i, 1)
            dic.Item(dk) = arr(i, 2)
        Next i
    End With
    With Sheets(1)
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A2:B" & lr).Value
        For i = 1 To UBound(arr)
            arr(i, 2) = quydoi(arr(i, 1))
            If Len(arr(i, 2)) = 11 Then
               dk = Left(arr(i, 2), 4)
               If dic.exists(dk) Then
                  arr(i, 2) = dic.Item(dk) & Right(arr(i, 2), 7)
               Else
                   arr(i, 2) = "so quy doi bi loi"
               End If
            ElseIf Len(arr(i, 2)) = 10 Then
                  arr(i, 2) = arr(i, 2)
            Else
                 arr(i, 2) = "So khong dung"
            End If
     Next i
        .Range("A2:B" & lr).Value = arr
    End With
End Sub
Function quydoi(ByVal dk As String)
      Dim s As String, a As Integer
      s = Replace(dk, "-", "/")
      s = Replace(s, ".", "/")
      a = InStr(s, "/")
      If a Then
         s = Left(s, a - 1)
      End If
      If CLng(Left(s, 1)) <> 0 Then
         s = "0" & s
      End If
      quydoi = Application.Trim(s)
End Function
 

File đính kèm

  • FILE MAU.xlsm
    20.2 KB · Đọc: 11
Bạn thử cái code này nhé.
Mã:
Sub tachso()
    Dim arr, i As Long, lr As Long, dic As Object, kq, dk As String
    Set dic = CreateObject("scripting.dictionary")
    With Sheets(2)
        arr = .Range("A3:B23").Value
        For i = 1 To UBound(arr, 1)
            dk = arr(i, 1)
            dic.Item(dk) = arr(i, 2)
        Next i
    End With
    With Sheets(1)
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A2:B" & lr).Value
        For i = 1 To UBound(arr)
            arr(i, 2) = quydoi(arr(i, 1))
            If Len(arr(i, 2)) = 11 Then
               dk = Left(arr(i, 2), 4)
               If dic.exists(dk) Then
                  arr(i, 2) = dic.Item(dk) & Right(arr(i, 2), 7)
               Else
                   arr(i, 2) = "so quy doi bi loi"
               End If
            ElseIf Len(arr(i, 2)) = 10 Then
                  arr(i, 2) = arr(i, 2)
            Else
                 arr(i, 2) = "So khong dung"
            End If
     Next i
        .Range("A2:B" & lr).Value = arr
    End With
End Sub
Function quydoi(ByVal dk As String)
      Dim s As String, a As Integer
      s = Replace(dk, "-", "/")
      s = Replace(s, ".", "/")
      a = InStr(s, "/")
      If a Then
         s = Left(s, a - 1)
      End If
      If CLng(Left(s, 1)) <> 0 Then
         s = "0" & s
      End If
      quydoi = Application.Trim(s)
End Function
Cám ơn bạn rất nhiều. Mình đã làm được rồi. Không biết bạn có thể giúp mình thêm 1 lần nữa không? Mình có 1 file khác. Trong đó Sheet Lan 2 thì có mã KH, mình muốn nếu tìm mã KH đó trong sheet 2-2. Nếu không có trong sheet 2-2 thì cột Check sẽ hiện "đã check". Đồng thời sẽ tìm trong Sheet tên KH. Nếu tên KH là Chị Hương hoặc Lê Anh Thư Thì Cột Check sẽ hiện ra tên KH tương ứng. Nếu không thỏa dk nào thì để trống. Bạn giúp dùm mình 1 lần nữa nhé. 1 lần nữa mình cám ơn bạn rất nhiều :)
 

File đính kèm

  • lan 2.xlsx
    23.2 KB · Đọc: 3
PHP:
Sub CheckIn2()
 Dim Cls As Range, sRng As Range, Rng As Range, Rg4 As Range
 Dim Ten As String, MyAdd As String

 Sheets("Lan 2-1").Select
 With Sheets("Lan 2-2")
    Set Rng = .Range(.[b1], .[b1].End(xlDown))
  End With
  With Sheet4
    Set Rg4 = .Range(.[A1], .[A1].End(xlDown))
  End With
  For Each Cls In Range([B2], [B2].End(xlDown))
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        Cls.Offset(, 1).Value = "Check Xong!"
    End If
    Set sRng = Rg4.Find(Cls.Value)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            Ten = Mid(sRng.Offset(, 1).Value, 4, 2)
            If Ten = " H" Or Ten = "An" Then
                Cls.Offset(, 1).Value = Cls.Offset(, 1).Value & Space(1) & sRng.Offset(, 1).Value
            End If
            Set sRng = Rg4.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
  Next Cls
End Sub
& bạn nên sửa lại tiêu đề bài viết cho rõ nghĩa thệm đi nha.
 
Trong macro đổi đầu số đt nếu số đt viết ntn 0909123456 098768271 ( tức là chỉ có dấu cách ở giữa) thì nó báo số ko đúng, làm sao để mình fix cái đó vậy bạn. Or trường hợp số 091876543-09329819 thì số đàng trước thiếu số, nó cũng báo số ko đúng. Mình có thể thêm dk nếu số đầu ko đúng thì lấy số sau dc ko?
PHP:
Sub CheckIn2()
Dim Cls As Range, sRng As Range, Rng As Range, Rg4 As Range
Dim Ten As String, MyAdd As String

Sheets("Lan 2-1").Select
With Sheets("Lan 2-2")
    Set Rng = .Range(.[b1], .[b1].End(xlDown))
  End With
  With Sheet4
    Set Rg4 = .Range(.[A1], .[A1].End(xlDown))
  End With
  For Each Cls In Range([B2], [B2].End(xlDown))
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        Cls.Offset(, 1).Value = "Check Xong!"
    End If
    Set sRng = Rg4.Find(Cls.Value)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            Ten = Mid(sRng.Offset(, 1).Value, 4, 2)
            If Ten = " H" Or Ten = "An" Then
                Cls.Offset(, 1).Value = Cls.Offset(, 1).Value & Space(1) & sRng.Offset(, 1).Value
            End If
            Set sRng = Rg4.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
  Next Cls
End Sub
& bạn nên sửa lại tiêu đề bài viết cho rõ nghĩa thệm đi nha.
Trong macro đổi đầu số đt nếu số đt viết ntn 0909123456 098768271 ( tức là chỉ có dấu cách ở giữa) thì nó báo số ko đúng, làm sao để mình fix cái đó vậy bạn. Or trường hợp số 091876543-09329819 thì số đàng trước thiếu số, nó cũng báo số ko đúng. Mình có thể thêm dk nếu số đầu ko đúng thì lấy số sau dc ko?
 
PHP:
Sub CheckIn2()
Dim Cls As Range, sRng As Range, Rng As Range, Rg4 As Range
Dim Ten As String, MyAdd As String

Sheets("Lan 2-1").Select
With Sheets("Lan 2-2")
    Set Rng = .Range(.[b1], .[b1].End(xlDown))
  End With
  With Sheet4
    Set Rg4 = .Range(.[A1], .[A1].End(xlDown))
  End With
  For Each Cls In Range([B2], [B2].End(xlDown))
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        Cls.Offset(, 1).Value = "Check Xong!"
    End If
    Set sRng = Rg4.Find(Cls.Value)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            Ten = Mid(sRng.Offset(, 1).Value, 4, 2)
            If Ten = " H" Or Ten = "An" Then
                Cls.Offset(, 1).Value = Cls.Offset(, 1).Value & Space(1) & sRng.Offset(, 1).Value
            End If
            Set sRng = Rg4.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
  Next Cls
End Sub
& bạn nên sửa lại tiêu đề bài viết cho rõ nghĩa thệm đi nha.
Mình làm theo Macro của bạn nhưng kết quả check tên thì nó lại ra ở Sheet lần 2-2, mà chữ Check Xong thì nó cũng ko ra, mặc dù có những cái (như mình tô đò) thì bên Sheet lần 2-2 ko có (thỏa điều kiện). bạn xem lại giúp mình nhé
 

File đính kèm

  • lan 2.xlsx
    24.1 KB · Đọc: 3
65​
KZ031417
66​
KZ030626
67​
KY003443
68​
JY203636Check Xong!
69​
JZ054414
70​
KY001816
71​
KY034596
72​
KY034504
73​
KY005120Check Xong!
74​
KY000795
75​
KZ031427
76​
KZ032447
77​
KY050932
78​
KZ003191
79​
JZ093777
80​
KY006035
81​
KZ002552
 
65​
KZ031417
66​
KZ030626
67​
KY003443
68​
JY203636Check Xong!
69​
JZ054414
70​
KY001816
71​
KY034596
72​
KY034504
73​
KY005120Check Xong!
74​
KY000795
75​
KZ031427
76​
KZ032447
77​
KY050932
78​
KZ003191
79​
JZ093777
80​
KY006035
81​
KZ002552
Mình làm dc rồi. Cám ơn bạn nhiều nhé
 
Web KT
Back
Top Bottom