Đánh họ và tên, tự động tách tên, tự động viết hoa (1 người xem)

Liên hệ QC

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

thaiquy7

Thành viên chính thức
Tham gia
27/4/09
Bài viết
54
Được thích
7
Giới tính
Nam
Nghề nghiệp
Công chức
Tập huấn phổ cập giáo dục tôi có 1 biểu không biết họ làm thế nào mà nó tự động viết hoa và tự động tách tên, tôi đưa lên diễn đàn nhờ anh em giúp đỡ:
ở cột C khi nhập họ và tên (nguyễn thiện nhân) khi enter thì cột C hiển thị Nguyễn Thiện cột D hiển thị Nhân. Rất mong anh em giúp đỡ chân thành cảm ơn. (tôi có đính kèm tệp)
 

File đính kèm

Tập huấn phổ cập giáo dục tôi có 1 biểu không biết họ làm thế nào mà nó tự động viết hoa và tự động tách tên, tôi đưa lên diễn đàn nhờ anh em giúp đỡ:
ở cột C khi nhập họ và tên (nguyễn thiện nhân) khi enter thì cột C hiển thị Nguyễn Thiện cột D hiển thị Nhân. Rất mong anh em giúp đỡ chân thành cảm ơn. (tôi có đính kèm tệp)

cái này làm sao crack được vậy bạn, chỉ cho tôi với
tôi có thử một vài cách nhưng ko mở được.......hihichic
 
biểu này do Bộ GD&ĐT cung cấp, trình độ excel của người viết quả là cao thủ, minh không biết nên đưa lên cho anh em nghiên cứu, trình độ của mình chỉ biết sử dụng thôi :D
 
cảm ơn bạn ngacuoi, ở đây là tự tách tên qua cột khác luôn, còn họ và chữ lót vẫn ở cột mình đã gõ, không thêm bất kỳ công thức nào.
 
biểu này do Bộ GD&ĐT cung cấp, trình độ excel của người viết quả là cao thủ, minh không biết nên đưa lên cho anh em nghiên cứu, trình độ của mình chỉ biết sử dụng thôi :D
cái này cũng bình thường thôi, người ta viết 1 macro tách tên và cho sự kiện tại ô gõ nó sẽ tự động tách tên, còn file có pass cái này trên diễn đàn đã thảo luận rất nhiều mở mấy cái này cũng có công cụ HXD rồi

code tách tên của người ta đây
For k = Len(HoTenDoiTuong) To 1 Step -1
If Mid(HoTenDoiTuong, k, 1) = " " Then
hodem1dt = Trim(Replace(Left(HoTenDoiTuong, k), "", ""))
ten1dt = Trim(Replace(Right(HoTenDoiTuong, Len(HoTenDoiTuong) - k), "", ""))
Exit For
End If
Next
 
Lần chỉnh sửa cuối:
cái này cũng bình thường thôi, người ta viết 1 macro tách tên và cho sự kiện tại ô gõ nó sẽ tự động tách tên, còn file có pass cái này trên diễn đàn đã thảo luận rất nhiều mở mấy cái này cũng có công cụ HXD rồi

Anh Phi nói chuẩn đấy ah. File này trên GPE cao thủ viết hàm tách họ tên nhiều như mưa +-+-+-+
 
cảm ơn bạn ngacuoi, ở đây là tự tách tên qua cột khác luôn, còn họ và chữ lót vẫn ở cột mình đã gõ, không thêm bất kỳ công thức nào.

Gởi bạn tham khảo một file mẫu, Nhập vào cột C sẽ tách lấy Tên ra cột D.
Nhớ Enable Macros khi mở file.
Mọi chuyện khác không biết.
 

File đính kèm

cảm ơn bạn Ba Tê, bạn có thể hướng dẫn dùm là tự động tách tên và tự động viết hoa,
 
biểu này do Bộ GD&ĐT cung cấp, trình độ excel của người viết quả là cao thủ, minh không biết nên đưa lên cho anh em nghiên cứu, trình độ của mình chỉ biết sử dụng thôi :D

Cơ Quan trên lúc cung cấp file, người ta có đi kèm theo bản điều lệ. Nếu bản điều lệ nêu rõ bản quyền của file thì cờ rắc là PHẠM PHÁP

Xâm phạm bản quyền dân sự thì thuộc về luật dân sự, bồi thường là cùng. Xâm phạm bản quyền cơ quan nhà nước là chuyện khác hoàn toàn.
 
tự động tách tên, rồi tự động viết hoa đầu mỗi từ đó bạn.
 
Lần chỉnh sửa cuối:
tự động tách tên, rồi tự động viết hoa luôn đó bạn.

Không hiểu bạn nói gì.
Không biết chỗ sửa code, hay code không hoạt động, hay tự động là thế nào? Viết HOA cả HỌ TÊN, hay viết hoa đầu từ, hay gì gì đó nói không rõ ràng mà cứ lòng vòng.
 

File đính kèm

viết hoa đầu mỗi từ bạn ah, cảm ơn bạn rất nhiều
 
Lần chỉnh sửa cuối:
viết hoa đầu mỗi từ bạn ah, cảm ơn bạn rất nhiều
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim Tem, Str As String
If Target.Column = 3 And Target.Count = 1 Then
    Str = Application.WorksheetFunction.Proper(Target)
    Tem = Split(Trim(Str), " ")
    Target.Offset(, 1).Value = Tem(UBound(Tem))
    Target.Value = Trim(Left(Str, Len(Str) - Len(Target.Offset(, 1))))
End If
Application.EnableEvents = True
End Sub

Bạn Alt+F11, kích đúp sheet 1, bạn chép đoạn code trên của thầy Bate vào là ok
 
Vác cây đao to này ra chơi chút coi. Cất riết sét hết rồi.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 3 Then
   If Target.Count = 1 Then
      If Target <> "" Then
         Dim temp As String
         temp = Application.Proper(Trim(Target))
         With CreateObject("VbScript.RegExp")
            .Pattern = "(\S+)(.*)(\s\S+)"
            Target(, 2) = .Replace(temp, "$" & 3)
            Target = .Replace(temp, "$" & 1 & "$" & 2)
         End With
      End If
   End If
End If
Application.EnableEvents = True
End Sub
 
Vác cây đao to này ra chơi chút coi. Cất riết sét hết rồi.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 3 Then
   If Target.Count = 1 Then
      If Target <> "" Then
         Dim temp As String
         temp = Application.Proper(Trim(Target))
         With CreateObject("VbScript.RegExp")
            .Pattern = "(\S+)(.*)(\s\S+)"
            Target(, 2) = .Replace(temp, "$" & 3)
            Target = .Replace(temp, "$" & 1 & "$" & 2)
         End With
      End If
   End If
End If
Application.EnableEvents = True
End Sub
Bạn cho tôi hỏi, nếu muốn VIẾT HOA TOÀN BỘ CÁC TỪ, thì sửa code như thế nào
Xin cảm ơn
 
Nếu viết hoa toàn bộ thì đổi dòng
Str = Target.Value
thành
Str = UCase(Target)
 
Vác cây đao to này ra chơi chút coi. Cất riết sét hết rồi.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 3 Then
   If Target.Count = 1 Then
      If Target <> "" Then
         Dim temp As String
         temp = Application.Proper(Trim(Target))
         With CreateObject("VbScript.RegExp")
            .Pattern = "(\S+)(.*)(\s\S+)"
            Target(, 2) = .Replace(temp, "$" & 3)
            Target = .Replace(temp, "$" & 1 & "$" & 2)
         End With
      End If
   End If
End If
Application.EnableEvents = True
End Sub

Dao to thiệt. Nếu dùng trong sự kiện worksheet_change thì cứ mỗi lần sự kiện xảy ra thì VBA lại phải gầy một cái Script Object, chạy xong thì xoá nó đi.

Trong các hàm sử dụng liên tục, nếu có cần sử dụng Object phức tạp thì thường người ta dùng biến Static, chỉ phải dựng 1 lần.
 
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim Tem, Str As String
If Target.Column = 3 And Target.Count = 1 Then
    Str = Application.WorksheetFunction.Proper(Target)
    Tem = Split(Trim(Str), " ")
    Target.Offset(, 1).Value = Tem(UBound(Tem))
    Target.Value = Trim(Left(Str, Len(Str) - Len(Target.Offset(, 1))))
End If
Application.EnableEvents = True
End Sub


Mình đổi thành Target.Offset(, 0) để nó không tách cột,mà khi viết sai xóa đi viết lại thì bị lỗi này là sao,cám ơn nhiều

Untitled.jpg
 
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 3 Then
If Target.Count = 1 Then
If Target <> "" Then
Dim temp As String
temp = Application.Proper(Trim(Target))
With CreateObject("VbScript.RegExp")
.Pattern = "(\S+)(.*)(\s\S+)"
Target(, 2) = .Replace(temp, "$" & 3)
Target = .Replace(temp, "$" & 1 & "$" & 2)
End With
End If
End If
End If
Application.EnableEvents = True
End Sub

Muốn không tách cột thì sửa code thế nào vậy?chỉ giùm cám ơn nha.
 
Lần chỉnh sửa cuối:
Mọi người ơi, giờ mình muốn gọp từ 2 cột họ đệm và cột tên thành 1 cột họ tên thì làm thế nào, mình sử dụng hàm ghép xâu thì có tác dụng trong sheet đó chứ ko copy kết quạ họ tên được ạ
 
Tức là họ và tên ở một cột,chỉ tự động viết hoa thôi .
Thử sửa thế này xem có đạt không

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 3 Then
If Target.Count = 1 Then
If Target <> "" Then
target = Application.Proper(Trim(Target))
End If
End If
End If
Application.EnableEvents = True
End Sub
 
===============================================
 
Lần chỉnh sửa cuối:
Nhờ Mod xóa giúp em 2 bài này, em đăng bài hỏi nhưng đã tìm thấy câu trả lời rồi ạ
 
Lần chỉnh sửa cuối:
Chào mọi người, Chào Ba tê và quanghai1969
Tôi tham gia mục này quá trể, nhưng đọc mới thấy nên anh em thông cảm.
Sau khi đọc bài viết và code của các bạn tôi có thắc mắc như sau mong các bạn giúp:
Cột D (target.count =1) là cột tách tên. Sau khi tên đã được tách tôi cần sửa lại "Họ" hoặc tên "đệm" rồi nhấn Enter thì nó sẽ xoá mất Tên ở cột D rồi tách tên đệm sang. Điều kiện đặt ra là
1- Nếu cột D rỗng (Target.count = " ") thì tách tên từ cột C sang.
2- Nếu cột D không rỗng (Target.count <> " " ) thì không tách tên từ C sang D.
 
Không hiểu bạn nói gì.
Không biết chỗ sửa code, hay code không hoạt động, hay tự động là thế nào? Viết HOA cả HỌ TÊN, hay viết hoa đầu từ, hay gì gì đó nói không rõ ràng mà cứ lòng vòng.
Chào thầy Ba Tê, cho mình hỏi : trong code của thầy muốn tự động viết hoa ở cột 3 và cột 6 cần viết thêm gì ? Cám ơn nhiều ạ.
 

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

Back
Top Bottom