Giúp em sửa Code VBA xếp Alphabet tên học sinh

Liên hệ QC

duong22000

Thành viên thường trực
Tham gia
8/5/13
Bài viết
322
Được thích
23
Code VBA em đang dùng:
Sub XeptenABC()
Application.ScreenUpdating = False
Dim n As Long
n = Sheet2.[c65000].End(3).Row
Range("do7:do" & n).FormulaR1C1 = "=MahoaUNI(TachTen(RC3,3))"
Range("dp7:dp" & n).FormulaR1C1 = "=MahoaUNI(TachTen(RC3,2))"
Range("dq7:dq" & n).FormulaR1C1 = "=MahoaUNI(tachten(RC3,1))"
Range("B7:dq" & n).Sort Key1:=[do7], Order1:=1, Key2:=[dp7], Order2:=1, Key3:=[dq7], Order3:=1, Header:=xlNo
Range("do7:dq" & n).Clear

Application.ScreenUpdating = True
MsgBox "Da xep xong!"
End Sub

Function TachTen(str As String, Optional Op As Long = 3)
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "(\S+)( .+ | )(\S+$)"
TachTen = Trim(.Execute(Trim(str))(0).SubMatches(Op - 1))
End With
End Function

Public Function MahoaUNI(S) As String
Dim x, Sb, k, mu, skdau, sdau, Bdau, Bkdau As String
Dim i, m, n, dau, idau, ikdau As Integer

If IsNull(S) Then
Exit Function
ElseIf IsNumeric(S) Then
Sb = S
Else
S = Trim(S)
S = LCase(S) & ChrW(32)

skdau = ChrW(259) & ChrW(234) & ChrW(244) & ChrW(432) & ChrW(273) & ChrW(226) & ChrW(417)
Bkdau = "aeoudao"

sdau = ChrW(225) & ChrW(224) & ChrW(7843) & ChrW(227) & ChrW(7841) _
& ChrW(233) & ChrW(232) & ChrW(7867) & ChrW(7869) & ChrW(7865) _
& ChrW(237) & ChrW(236) & ChrW(7881) & ChrW(297) & ChrW(7883) _
& ChrW(243) & ChrW(242) & ChrW(7887) & ChrW(245) & ChrW(7885) _
& ChrW(250) & ChrW(249) & ChrW(7911) & ChrW(361) & ChrW(7909) _
& ChrW(253) & ChrW(7923) & ChrW(7927) & ChrW(7929) & ChrW(7925) _
& ChrW(7855) & ChrW(7857) & ChrW(7859) & ChrW(7861) & ChrW(7863) _
& ChrW(7889) & ChrW(7891) & ChrW(7893) & ChrW(7895) & ChrW(7897) _
& ChrW(7871) & ChrW(7873) & ChrW(7875) & ChrW(7877) & ChrW(7879) _
& ChrW(7913) & ChrW(7915) & ChrW(7917) & ChrW(7919) & ChrW(7921) _
& ChrW(7845) & ChrW(7847) & ChrW(7849) & ChrW(7851) & ChrW(7853) _
& ChrW(7899) & ChrW(7901) & ChrW(7903) & ChrW(7905) & ChrW(7907)
Bdau = "aaaaaeeeeeiiiiiooooouuuuuyyyyyaaaaaoooooeeeeeuuuuuaaaaaooooo"

For m = 1 To Len(S)
k = Mid(S, m, 1)
idau = InStr(1, sdau, k, 0)
ikdau = InStr(1, skdau, k, 0)
If idau > 0 Then
k = Mid(Bdau, idau, 1)
dau = idau Mod 5

If dau = 0 Then
dau = 5
End If


If idau > 0 And idau < 31 Then
mu = ""
ElseIf idau > 30 And idau < 51 Then
mu = "z"
Else
mu = "zw"
End If

k = k & mu

ElseIf ikdau > 0 Then
k = Mid(Bkdau, ikdau, 1)
If ikdau < 6 Then
k = k & "z"
Else
k = k & "zw"
End If
ElseIf k = ChrW(32) Then
k = dau & ChrW(32)
dau = ""
End If

x = x & k
Next
Sb = Sb & x
End If
MahoaUNI = Sb
End Function

Tuy nhiên Code trên xếp Alphabet danh sách học sinh chưa được như ý muốn
VD 2 học sinh sau khi xếp thì có thứ tự như sau:
1. Nguyễn Quỳnh Nhi
2. Nguyễn Thị Anh Nhi

Nhưng theo đúng DSHS của GVCN lớp lại xếp là:
1. Nguyễn Thị Anh Nhi
2. Nguyễn Quỳnh Nhi

(Vì Anh Nhi trước Quỳnh Nhi)
(Chắc là lấy từng tên đệm gần tên chính trước, sau đó dịch dần về phía Họ, vì tên đệm của học sinh có thể 1 từ, 2 từ, ... )
Bây giờ em muốn xếp DSHS theo GVCN lớp xếp thì em cần sửa gì không?
Mong mọi người trên GPE giúp em với, xin cảm ơn mọi người....
 
Code VBA em đang dùng:
Sub XeptenABC()
Application.ScreenUpdating = False
Dim n As Long
n = Sheet2.[c65000].End(3).Row
Range("do7:do" & n).FormulaR1C1 = "=MahoaUNI(TachTen(RC3,3))"
Range("dp7:dp" & n).FormulaR1C1 = "=MahoaUNI(TachTen(RC3,2))"
Range("dq7:dq" & n).FormulaR1C1 = "=MahoaUNI(tachten(RC3,1))"
Range("B7:dq" & n).Sort Key1:=[do7], Order1:=1, Key2:=[dp7], Order2:=1, Key3:=[dq7], Order3:=1, Header:=xlNo
Range("do7:dq" & n).Clear

Application.ScreenUpdating = True
MsgBox "Da xep xong!"
End Sub

Function TachTen(str As String, Optional Op As Long = 3)
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "(\S+)( .+ | )(\S+$)"
TachTen = Trim(.Execute(Trim(str))(0).SubMatches(Op - 1))
End With
End Function

Public Function MahoaUNI(S) As String
Dim x, Sb, k, mu, skdau, sdau, Bdau, Bkdau As String
Dim i, m, n, dau, idau, ikdau As Integer

If IsNull(S) Then
Exit Function
ElseIf IsNumeric(S) Then
Sb = S
Else
S = Trim(S)
S = LCase(S) & ChrW(32)

skdau = ChrW(259) & ChrW(234) & ChrW(244) & ChrW(432) & ChrW(273) & ChrW(226) & ChrW(417)
Bkdau = "aeoudao"

sdau = ChrW(225) & ChrW(224) & ChrW(7843) & ChrW(227) & ChrW(7841) _
& ChrW(233) & ChrW(232) & ChrW(7867) & ChrW(7869) & ChrW(7865) _
& ChrW(237) & ChrW(236) & ChrW(7881) & ChrW(297) & ChrW(7883) _
& ChrW(243) & ChrW(242) & ChrW(7887) & ChrW(245) & ChrW(7885) _
& ChrW(250) & ChrW(249) & ChrW(7911) & ChrW(361) & ChrW(7909) _
& ChrW(253) & ChrW(7923) & ChrW(7927) & ChrW(7929) & ChrW(7925) _
& ChrW(7855) & ChrW(7857) & ChrW(7859) & ChrW(7861) & ChrW(7863) _
& ChrW(7889) & ChrW(7891) & ChrW(7893) & ChrW(7895) & ChrW(7897) _
& ChrW(7871) & ChrW(7873) & ChrW(7875) & ChrW(7877) & ChrW(7879) _
& ChrW(7913) & ChrW(7915) & ChrW(7917) & ChrW(7919) & ChrW(7921) _
& ChrW(7845) & ChrW(7847) & ChrW(7849) & ChrW(7851) & ChrW(7853) _
& ChrW(7899) & ChrW(7901) & ChrW(7903) & ChrW(7905) & ChrW(7907)
Bdau = "aaaaaeeeeeiiiiiooooouuuuuyyyyyaaaaaoooooeeeeeuuuuuaaaaaooooo"

For m = 1 To Len(S)
k = Mid(S, m, 1)
idau = InStr(1, sdau, k, 0)
ikdau = InStr(1, skdau, k, 0)
If idau > 0 Then
k = Mid(Bdau, idau, 1)
dau = idau Mod 5

If dau = 0 Then
dau = 5
End If


If idau > 0 And idau < 31 Then
mu = ""
ElseIf idau > 30 And idau < 51 Then
mu = "z"
Else
mu = "zw"
End If

k = k & mu

ElseIf ikdau > 0 Then
k = Mid(Bkdau, ikdau, 1)
If ikdau < 6 Then
k = k & "z"
Else
k = k & "zw"
End If
ElseIf k = ChrW(32) Then
k = dau & ChrW(32)
dau = ""
End If

x = x & k
Next
Sb = Sb & x
End If
MahoaUNI = Sb
End Function

Tuy nhiên Code trên xếp Alphabet danh sách học sinh chưa được như ý muốn
VD 2 học sinh sau khi xếp thì có thứ tự như sau:
1. Nguyễn Quỳnh Nhi
2. Nguyễn Thị Anh Nhi

Nhưng theo đúng DSHS của GVCN lớp lại xếp là:
1. Nguyễn Thị Anh Nhi
2. Nguyễn Quỳnh Nhi

(Vì Anh Nhi trước Quỳnh Nhi)
(Chắc là lấy từng tên đệm gần tên chính trước, sau đó dịch dần về phía Họ, vì tên đệm của học sinh có thể 1 từ, 2 từ, ... )
Bây giờ em muốn xếp DSHS theo GVCN lớp xếp thì em cần sửa gì không?
Mong mọi người trên GPE giúp em với, xin cảm ơn mọi người....
Bạn xem chổ này.
https://www.giaiphapexcel.com/diendan/threads/thử-nghiệm-vbscript-regexp.69985/page-5#post-879889
Vậy bạn biết tại sao anh em không giúp bạn không? Xem ở liên kết trên bài 92, 94 và 95 thì sẽ hiểu.
 
Upvote 0
Web KT
Back
Top Bottom