Cần tách chữ cái đầu sau mỗi từ và viết hoa các chữ cái đã tách (VD: Lê Vinh => LV) (1 người xem)

Liên hệ QC

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

hung2412

Thành viên tích cực
Tham gia
5/8/08
Bài viết
929
Được thích
240
Giới tính
Nam
Xin chào các Anh chị và các bạn GPE!
Nhờ các Anh chị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tôi có 1 bảng tính như vầy:

VUxBO1f.png


Có cách nào tách chữ cái đầu sau mỗi từ và viết hoa các chữ cái đã tách (Ví dụ: Lê Văn Hùng Cường => LVHC) không? Kết quả mong muốn như hình dưới đây:

8UIHbJG.png


Mong các Anh chị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.

 

File đính kèm

những bài này bạn tự suy nghĩ đi, học chi cao siêu mà giờ hỏi những câu này
gợi ý.
Lấy 1 kí tự đầu tiên Sử dụng vòng lặp duyệt từ thứ 2 đến cuối gặp khoảng trắng lấy ký tự kế tiếp. đó là ý tưởng
(tôi hy vọng là các thành viên không nên đưa sẵn code, để cho tác giả tự suy nghĩ vì những bài này rất đơn giản mà tác giả lười suy nghĩ quá)
 
Lần chỉnh sửa cuối:
những bài này bạn tự suy nghĩ đi, học chi cao siêu mà giờ hỏi những câu này
gợi ý.
Lấy 1 kí tự đầu tiên Sử dụng vòng lặp duyệt từ thứ 2 đến cuối gặp khoảng trắng lấy ký tự kế tiếp. đó là ý tưởng
(tôi hy vọng là các thành viên không nên đưa sẵn code, để cho tác giả tự suy nghĩ vì những bài này rất đơn giản mà tác giả lười suy nghĩ quá)
Tôi cũng đã nghĩ đến bước đi như vậy. Tuy nhiên, lập vòng lặp duyệt từng ô cell thì tôi còn biết chứ còn duyệt từng ký tự trong một ô thì chưa biết phải làm sao (Lại còn vụ viết hoa nữa).
 
Mình không rành VBA lắm, nhưng nghĩ có thể dung Mid(chuỗi cần xét, i là biến lặp từ 2 đến hết hết chiều dài,1 để lấy 1 ký tự) Cụ thể là "mid(a,i,1)".
Nếu sai xin bỏ qua cho.
Còn về việc xét viết hoa tôi thấy xét khoảng trắng an toàn hơn vì có thể có người nhập liệu sai nên có khi không viết hoa ký tự đầu.
 
Lần chỉnh sửa cuối:
Mình không rành VBA lắm, nhưng nghĩ có thể dung Mid(chuỗi cần xét, i là biến lặp từ 2 đến hết hết chiều dài,1 để lấy 1 ký tự) Cụ thể là "mid(a,i,1)".
Nếu sai xin bỏ qua cho.
nó là như vậy đó nếu đk đúng mid(a,i,1) =" " thì lấy mid(a,i+1,1)
(lưu ý là dữ liệu phải nhập đúng không dư thừa các khoản trắng)
 
Tôi cũng đã nghĩ đến bước đi như vậy. Tuy nhiên, lập vòng lặp duyệt từng ô cell thì tôi còn biết chứ còn duyệt từng ký tự trong một ô thì chưa biết phải làm sao (Lại còn vụ viết hoa nữa).
Đúng là bài này bạn chưa đủ sức nên mình chọt vô mấy dòng code
PHP:
Function VT(cell As String) As String
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "[^A-Z]"
   VT = .Replace(cell, "")
End With
End Function

Sử dụng: =VT(B3)
Nếu ok rồi thì copy xuống
 
Đúng là bài này bạn chưa đủ sức nên mình chọt vô mấy dòng code
PHP:
Function VT(cell As String) As String
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "[^A-Z]"
   VT = .Replace(cell, "")
End With
End Function

Sử dụng: =VT(B3)
Nếu ok rồi thì copy xuống
Cái này gặp tên "Chu Ân Lai" thì thiếu mất
 
Đúng là bài này bạn chưa đủ sức nên mình chọt vô mấy dòng code
PHP:
Function VT(cell As String) As String
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "[^A-Z]"
   VT = .Replace(cell, "")
End With
End Function

Sử dụng: =VT(B3)
Nếu ok rồi thì copy xuống
Không rõ là anh đã text chưa?.
Sao em text thì thấy chưa chính xác như sau:
+ Tên Đoàn Thị Sen lại ra TS chứ không phải ĐTS
+ Tên Nguyễn Văn Điều lại ra NV chứ không phải là NVĐ
=> Hình như là những ký tự như là Đ, Â, ... không được anh ạ.
 
Không rõ là anh đã text chưa?.
Sao em text thì thấy chưa chính xác như sau:
+ Tên Đoàn Thị Sen lại ra TS chứ không phải ĐTS
+ Tên Nguyễn Văn Điều lại ra NV chứ không phải là NVĐ
=> Hình như là những ký tự như là Đ, Â, ... không được anh ạ.
Vậy thì code này
PHP:
Function VT(cell As String) As String
Dim i As Long
For i = 1 To Len(cell)
   If Mid(cell, i, 1) = UCase(Mid(cell, i, 1)) Then
      VT = VT & Mid(cell, i, 1)
   End If
Next
VT = Replace(VT, " ", "")
End Function
Nếu vẫn muốn xài code trước thì phải thêm 1 hàm loại dấu tiếng việt
 
Không rõ là anh đã text chưa?.
Sao em text thì thấy chưa chính xác như sau:
+ Tên Đoàn Thị Sen lại ra TS chứ không phải ĐTS
+ Tên Nguyễn Văn Điều lại ra NV chứ không phải là NVĐ
=> Hình như là những ký tự như là Đ, Â, ... không được anh ạ.
Thử thay
Mã:
.Pattern = "[^A-Z]"
bằng cái này
Mã:
.Pattern = "\s(\S)[^\s]+"
và thêm tí vận dụng, rồi xem kết quả thế nào
 
Thử thay
Mã:
.Pattern = "[^A-Z]"
bằng cái này
Mã:
.Pattern = "\s(\S)[^\s]+"
và thêm tí vận dụng, rồi xem kết quả thế nào
Tôi chả hiểu. Hàm VBA sau khi sửa như bạn nói xong thì ra kết quả là tên đầu của từng vị thôi ạ (Ví dụ: Nguyễn Văn Lam ra Nguyễn chứ không phải là NVL).
 
Tôi cũng đã nghĩ đến bước đi như vậy. Tuy nhiên, lập vòng lặp duyệt từng ô cell thì tôi còn biết chứ còn duyệt từng ký tự trong một ô thì chưa biết phải làm sao (Lại còn vụ viết hoa nữa).
Càng đông, càng vui.
Mã:
Function TenTat(Ten As String) As String
Dim i As Long, Tam
Tam = Split(Trim(Ten), " ")
    For i = 0 To UBound(Tam)
    TenTat = TenTat & UCase(Left(Tam(i), 1))
    Next i
End Function
 
@gti:
Đúng ra thì cái này dùng RegExp trông cũng đẹp mắt (tuy rằng chả hiệu quả chút nào - RegExp là một cỗ máy khá nặng nề). Tuy nhiên vì có cái vụ tiếng Việt cho nên khó có thể dùng các vị trí mốc (anchors) như \w\W, \b\B. RegExp của VBScript không bảo đảm phân biệt được ký tự từ và ký tự không từ trong Unicode. Càng cố làm thì càng dài ngoăng ngoẵng.

@bui_kiem:
Vì đây là chuỗi tên, các từ cách nhau bằng dấu cách cho nên dùng hàm Split là đúng nhất rồi.
Tuy nhiên, chuỗi split chỉ dùng qua một lần rồi bỏ cho nên code của bạn dùng thêm biến "tam" là hơi thừa.
For Each c in Split(Ten, " ")
VietTat = VietTat & UCase(Left(c,1))

là đủ rồi
 
@gti:
Đúng ra thì cái này dùng RegExp trông cũng đẹp mắt (tuy rằng chả hiệu quả chút nào - RegExp là một cỗ máy khá nặng nề).
Đúng là vậy nhưng vì đã có bài 8 dùng Reg nên cũng muốn thử xem sao.
Gửi chủ thớt đoạn code tham khảo
Mã:
Function VT(cell As String) As String

With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "\s(\S)[^\s]+"
   VT = .Replace(" " & cell, "$1")
End With

End Function
 
Đúng là vậy nhưng vì đã có bài 8 dùng Reg nên cũng muốn thử xem sao.
Gửi chủ thớt đoạn code tham khảo
Mã:
Function VT(cell As String) As String

With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "\s(\S)[^\s]+"
   VT = .Replace(" " & cell, "$1")
End With

End Function
Cái Pattern như mì tôm cua nhưng cũng thú vị. Viết ra được cái Pattern này cũng khá ghê gớm đó nha. Ẹc mình cốc có viết nổi.
 
Web KT

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

Back
Top Bottom