Giúp em tách họ tên và sắp xếp lại theo vần ABC (1 người xem)

Liên hệ QC

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

thanhdo89

Thành viên chính thức
Tham gia
8/7/11
Bài viết
52
Được thích
6
Giúp em tách họ tên và sắp xếp lại theo vần ABC
Mong mọi người giúp đỡ em, em có 1 file excle có nhiều sheetbook giống nhau,
Nếu chỉ tách 1 cột của 1 sheet thì em có thể dùng hàm excel cũng ra được và lại còn phải sắp xếp lại tên theo vần ABC, và mỗi sheet có số dòng cuối cùng khác nhau.
mong mọi người giúp em đoạn vba để em chỉ cần chạy vba 1 lần là có thể tách tên và sắp xếp của tất cả cách sheetbook (cột họ tên cũ ở cột B).
Em cám ơn ạ.
 

File đính kèm

Lần chỉnh sửa cuối:
Giúp em tách họ tên và sắp xếp lại theo vần ABC
Mong mọi người giúp đỡ em, em có 1 file excle có nhiều sheetbook giống nhau, em muốn tách tên ra 1 một cột riêng sau đó sắp xếp cả vùng dữ liệu theo tên (mới tách ra theo vần ABC).
mong mọi người giúp em đoạn vba để em chỉ cần chạy vba 1 lần là có thể tách tên và sắp xếp của tất cả cách sheetbook (cột họ tên cũ ở cột B).
Em cám ơn ạ.
Thử 1 Sheet với Code trên diễn đàn này
 

File đính kèm

Upvote 0
Cám ơn bạn, nhưng nếu chỉ như vậy vẫn là thủ công thôi ạ, mình muốn 1 lần cilck chuột nó chạy ra toàn bộ các sheet và sắp xếp lại theo vần ABC của cả file excel cơ ạ, hi
 
Upvote 0
. Cá chiên vẫn phải nhai, chưa kể trường hợp xương chưa giòn phải gỡ xương.
Súp cá có thể húp phát hết một bát (chén). Hê hê.
Mình không thạo VBA nên mình mới hỏi mọi người, còn nếu tách từng sheet 1 thì mình dùng hàm excel còn nhanh hơn cả dùng VBA bạn ạ.
 
Upvote 0
Mình không thạo VBA nên mình mới hỏi mọi người, còn nếu tách từng sheet 1 thì mình dùng hàm excel còn nhanh hơn cả dùng VBA bạn ạ.
Tôi thấy bạn là người đầu tiên nêu dùng VBA chậm hơn dùng hàm.
Trên diễn đàn GPE, tôi không thấy người thứ hai.
 
Upvote 0
Tôi thấy bạn là người đầu tiên nêu dùng VBA chậm hơn dùng hàm.
Trên diễn đàn GPE, tôi không thấy người thứ hai.
Tôi thấy bạn là người đầu tiên nêu dùng VBA chậm hơn dùng hàm.
Trên diễn đàn GPE, tôi không thấy người thứ hai.
Mình biết là VBA là nhanh hơn dùng hàm, nhưng trong trường hợp này của mình tách tên, nếu chỉ tách tên từng sheet 1, mà phải dùng vba viết ra hàm để tách tên xong lại vào excel viết hàm tachten ra thì mình dùng hàm excel luôn bạn ạ. nên mình mong ai biết giúp mình dùng VBA chạy ra tất cả các sheet trong excel bạn ạ.
 
Upvote 0
Mình biết là VBA là nhanh hơn dùng hàm, nhưng trong trường hợp này của mình tách tên, nếu chỉ tách tên từng sheet 1, mà phải dùng vba viết ra hàm để tách tên xong lại vào excel viết hàm tachten ra thì mình dùng hàm excel luôn bạn ạ. nên mình mong ai biết giúp mình dùng VBA chạy ra tất cả các sheet trong excel bạn ạ.
- Sao bạn không nghĩ đến cách khác là chứa tất cả các lớp trong 1 sheet và thêm cột lớp rồi tách tên 1 lần.
- Khi cần tách danh sách từng lớp thì dựa vào cột lớp lọc ra hoặc tách mỗi lớp ra 1 danh sách.
 
Upvote 0
- Sao bạn không nghĩ đến cách khác là chứa tất cả các lớp trong 1 sheet và thêm cột lớp rồi tách tên 1 lần.
- Khi cần tách danh sách từng lớp thì dựa vào cột lớp lọc ra hoặc tách mỗi lớp ra 1 danh sách.
File mình đưa lên đây nhờ mọi người giúp chỉ là một ít người, còn công việc của mình liên quan đến việc cập nhập bảng kê hàng trăm nghìn người bạn ạ. mỗi sheet của mình khoảng từ 100- 1.000 người, mình có khoảng trên 300 file, mà mỗi file khoảng 20-40 sheet. mong mọi người giúp đỡ ạ.
 
Upvote 0
File mình đưa lên đây nhờ mọi người giúp chỉ là một ít người, còn công việc của mình liên quan đến việc cập nhập bảng kê hàng trăm nghìn người bạn ạ. mỗi sheet của mình khoảng từ 100- 1.000 người, mình có khoảng trên 300 file, mà mỗi file khoảng 20-40 sheet. mong mọi người giúp đỡ ạ.
Viết giùm bạn 1 code "chạy khơi khơi" theo dữ liệu của file bạn gởi, nếu dữ liệu thật "trật lất" như file này thì bạn tự chỉnh lại nhé.
Cũng dùng công cụ Sort của Excel.
PHP:
Public Sub Gpe()
Dim Ws As Worksheet, Arr(), I As Long, R As Long, Tmp
For Each Ws In ThisWorkbook.Worksheets
    With Ws
        Arr = .Range("B3", .Range("B3").End(xlDown)).Resize(, 2).Value
        R = UBound(Arr)
        For I = 1 To R
            Tmp = Split(Arr(I, 1), " ")
            Arr(I, 1) = Tmp(UBound(Tmp)) & " " & Arr(I, 1)
        Next I
            .Range("b3").Resize(R, 2) = Arr
            .Range("b3").Resize(R, 2).Sort Key1:=.Range("b3"), Order1:=xlAscending
        Arr = .Range("b3").Resize(R, 2).Value
        For I = 1 To R
            Arr(I, 1) = Mid(Arr(I, 1), InStr(Arr(I, 1), " ") + 1, Len(Arr(I, 1)))
        Next I
        .Range("b3").Resize(R, 2) = Arr
    End With
Next Ws
End Sub
 
Upvote 0
300 files, mỗi file 20-40 sheets.
Với loại công việc thế này thì đi học một khoá quản lý CSDL cho xong.
Tối thiểu thì cũng phải học Excel và VBA đến bậc trung. Tự viết code, chỉ hỏi những chỗ bí.
Nhờ viết code giùm không thể nào giải quyết được.
 
Upvote 0
300 files, mỗi file 20-40 sheets.
Với loại công việc thế này thì đi học một khoá quản lý CSDL cho xong.
Tối thiểu thì cũng phải học Excel và VBA đến bậc trung. Tự viết code, chỉ hỏi những chỗ bí.
Nhờ viết code giùm không thể nào giải quyết được.
Excel thì mình biết bạn ạ, còn VBA thì mình ko biết, tách họ tên này mình mấy năm mới làm 1 lần, nên mới nhờ mọi người giúp đỡ ạ
Bài đã được tự động gộp:

Viết giùm bạn 1 code "chạy khơi khơi" theo dữ liệu của file bạn gởi, nếu dữ liệu thật "trật lất" như file này thì bạn tự chỉnh lại nhé.
Cũng dùng công cụ Sort của Excel.
PHP:
Public Sub Gpe()
Dim Ws As Worksheet, Arr(), I As Long, R As Long, Tmp
For Each Ws In ThisWorkbook.Worksheets
    With Ws
        Arr = .Range("B3", .Range("B3").End(xlDown)).Resize(, 2).Value
        R = UBound(Arr)
        For I = 1 To R
            Tmp = Split(Arr(I, 1), " ")
            Arr(I, 1) = Tmp(UBound(Tmp)) & " " & Arr(I, 1)
        Next I
            .Range("b3").Resize(R, 2) = Arr
            .Range("b3").Resize(R, 2).Sort Key1:=.Range("b3"), Order1:=xlAscending
        Arr = .Range("b3").Resize(R, 2).Value
        For I = 1 To R
            Arr(I, 1) = Mid(Arr(I, 1), InStr(Arr(I, 1), " ") + 1, Len(Arr(I, 1)))
        Next I
        .Range("b3").Resize(R, 2) = Arr
    End With
Next Ws
End Sub
Cám ơn anh, nhưng đoạn code này chỉ sắp xếp dữ liệu thôi anh ạ, em muốn tách cả họ tên nữa cơ, hi, mong anh giúp đỡ.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình biết là VBA là nhanh hơn dùng hàm, nhưng trong trường hợp này của mình tách tên, nếu chỉ tách tên từng sheet 1, mà phải dùng vba viết ra hàm để tách tên xong lại vào excel viết hàm tachten ra thì mình dùng hàm excel luôn bạn ạ. nên mình mong ai biết giúp mình dùng VBA chạy ra tất cả các sheet trong excel bạn ạ.
Tốc độ VBA và công thức tùy trường hợp mà cái này nhanh hơn cái kia. Ví dụ bạn dùng VBA thay thế hàm SUM để tính tổng 1 khối ô thì VBA sẽ chậm hơn công thức SUM.
Trường hợp của bạn khi đã có hàm TachTen nhận tham số là chuỗi họ tên rồi thì có thể viết 1 sub nhận tham số là workbook và sheet để đọc bảng dữ liệu trong sheet vào mảng, với mỗi dòng của mảng gọi hàm tách tên, copy vào sheet rồi sort. Dùng 1 sub khác lần lượt mở từng file data để xử lý. Mặc dù code như vậy không khó nhưng nếu không có kiến thức về vba, chỉ nhờ sẽ rất khó áp dụng thực tế.
 
Upvote 0
Excel thì mình biết bạn ạ, còn VBA thì mình ko biết, tách họ tên này mình mấy năm mới làm 1 lần, nên mới nhờ mọi người giúp đỡ ạ
...
Với trình độ của bạn mà quản lý hằng 300x(20~40) = 6000~12000 sheets dữ liệu thì rõ ràng là không kham.
Tôi đã gợi ý từ CSDL rồi mà không biết qua đấy tìm thử.
 
Upvote 0
Excel thì mình biết bạn ạ, còn VBA thì mình ko biết, tách họ tên này mình mấy năm mới làm 1 lần, nên mới nhờ mọi người giúp đỡ ạ
Bài đã được tự động gộp:


Cám ơn anh, nhưng đoạn code này chỉ sắp xếp dữ liệu thôi anh ạ, em muốn tách cả họ tên nữa cơ, hi, mong anh giúp đỡ.
Muốn tách thì tách nhưng tách ra đâu? Nói chung chung ai biết.
Bạn gởi 1 sheet có kết quả mẫu bạn muốn có xem sao.
 
Upvote 0
Muốn tách thì tách nhưng tách ra đâu? Nói chung chung ai biết.
Bạn gởi 1 sheet có kết quả mẫu bạn muốn có xem sao.
Đây anh ạ, anh xem giúp em với ạ, em muốn tách họ đệm và tên riêng ra 2 cột khác nhau trong sheet đó luôn anh ạ.
 

File đính kèm

Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
@thanhdo89
Dữ liệu học sinh phải bắt đầu từ dòng 3, chạy thử code này:
Mã:
Public Sub Test()
Dim Ws As Worksheet, Arr(), I As Long, R As Long, Tmp
Dim outputArr, HoTen As String
For Each Ws In ThisWorkbook.Worksheets
    With Ws
        Arr = .Range("B3", .Range("B3").End(xlDown)).Value
        R = UBound(Arr)
        ReDim outputArr(1 To R, 1 To 2)
        For I = 1 To R
            HoTen = Trim(Arr(I, 1))
            Tmp = Split(HoTen, " ")
            outputArr(I, 2) = Tmp(UBound(Tmp))
            outputArr(I, 1) = Trim(Left(HoTen, Len(HoTen) - Len(outputArr(I, 2))))
        Next I
            .Range("b3").Resize(R, 2) = outputArr
            .Range("A3").Resize(R, 5).Sort Key1:=.Range("C3"), Order1:=xlAscending, Key2:=.Range("b3"), Order2:=xlAscending
      
    End With
Next Ws
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
@thanhdo89
Dữ liệu học sinh phải bắt đầu từ dòng 3, chạy thử code này:
Mã:
Public Sub Test()
Dim Ws As Worksheet, Arr(), I As Long, R As Long, Tmp
Dim outputArr, HoTen As String
For Each Ws In ThisWorkbook.Worksheets
    With Ws
        Arr = .Range("B3", .Range("B3").End(xlDown)).Value
        R = UBound(Arr)
        ReDim outputArr(1 To R, 1 To 2)
        For I = 1 To R
            HoTen = Trim(Arr(I, 1))
            Tmp = Split(HoTen, " ")
            outputArr(I, 2) = Tmp(UBound(Tmp))
            outputArr(I, 1) = Trim(Left(HoTen, Len(HoTen) - Len(outputArr(I, 2))))
        Next I
            .Range("b3").Resize(R, 2) = outputArr
            .Range("A3").Resize(R, 5).Sort Key1:=.Range("C3"), Order1:=xlAscending, Key2:=.Range("b3"), Order2:=xlAscending
    
    End With
Next Ws
End Sub
Bạn phải giữ lại cột Họ và tên học sinh gốc chứ? Như hình
2.jpg
 
Upvote 0
Web KT

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

Back
Top Bottom