làm sao để đánh hoa đầu dòng trong excel (1 người xem)

  • Thread starter Thread starter cech
  • Ngày gửi Ngày gửi
Liên hệ QC

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

cech

Thành viên mới
Tham gia
2/12/07
Bài viết
1
Được thích
0
em là người mới gia nhập forum, trình độ về excel rất kém. cho em hỏi làm sao để đánh chữ hoa đầu dòng cho tên của người, chẳng lẽ mỗi lần đánh như vậy lại phải bấm phím CAPS LOCK, có cách nào khác ngoài cách đó nữa không!$@!!
vd: Nguyễn Thị Hoa
 
Trong Excel có hàm Proper(), đổi chữ thường thành tên viết hoa. Nhưng gõ hàm còn lâu hơn bấm shift. Còn tạo macro chỉ có mỗi 1 dòng lệnh:
Range("B1:B100").Value = Application.Proper(Range("A1:A100").Value)
thì không đáng.
 
Upvote 0
Có thể sử dụng sự kiện Worksheet_Change. Giả sử bạn muốn có tác dụng trong vùng A2:A10 bạn nhập code như sau
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 And Target.Row < 11 Then
    Application.EnableEvents = False
    Target.Value = Application.Proper(Target.Value)
    Application.EnableEvents = True
End If
End Sub
 
Upvote 0
chibi đã viết:
Có thể sử dụng sự kiện Worksheet_Change. Giả sử bạn muốn có tác dụng trong vùng A2:A10 bạn nhập code như sau
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 And Target.Row < 11 Then
    Application.EnableEvents = False
    Target.Value = Application.Proper(Target.Value)
    Application.EnableEvents = True
End If
End Sub

Nên dùng phương thức Intersect sẽ linh hoạt hơn nhiều bác ạ. (Học của Bác SA)

Thân!
 
Upvote 0
Mã:
 If Not Intersect(Target, Range("A2:A10")) Is Nothing Then = _
If Target.Column = 1 And Target.Row > 1 And Target.Row < 11 Then
Tôi nghĩ chỉ ngắn hơn thôi.
 
Upvote 0
Ngắn hơn hay dài hơn thì ko biết... nhưng tôi thấy Intersect rất dễ hiểu và dễ vận dụng... .Row gì gì đó, .Column gì gì đó lớn hơn hay nhỏ hơn bao nhiêu thì phải nhìn và đếm (mõi mắt)... Còn với Intersect thì trực quan hơn nhiều.. đọc cái hiểu ngay
 
Upvote 0
Ngắn hơn hay dài hơn thì ko biết... nhưng tôi thấy Intersect rất dễ hiểu và dễ vận dụng... .Row gì gì đó, .Column gì gì đó lớn hơn hay nhỏ hơn bao nhiêu thì phải nhìn và đếm (mõi mắt)... Còn với Intersect thì trực quan hơn nhiều.. đọc cái hiểu ngay
Vậy nếu trong 1 sheet mình muốn viết hoa một số cột do mình định sẵn thì viết bằng lệnh này như thế nào vậy bạn?Mình cảm ơn bạn rất nhiều vì thời gian qua bạn giúp đỡ mình rất nhiều.
 
Upvote 0
Vậy nếu trong 1 sheet mình muốn viết hoa một số cột do mình định sẵn thì viết bằng lệnh này như thế nào vậy bạn?Mình cảm ơn bạn rất nhiều vì thời gian qua bạn giúp đỡ mình rất nhiều.
Giã sử bạn muốn viết HOA duy nhất 1 chử đầu tiên, và muốn code có tác dụng trong vùng B1:C10 thì code như sau:
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dau, Cuoi As String
If Not Intersect(Range("[B][COLOR=red]B1:C10[/COLOR][/B]"), Target) Is Nothing Then
    Dau = Left(Target, 1)
    Cuoi = Mid(Target, 2, Len(Target) - 1)
    Application.EnableEvents = False
    Target.Value = UCase(Dau) & Cuoi
    Application.EnableEvents = True
End If
End Sub
Vùng mà bạn quan tâm nằm ở chử màu đỏ ấy
 
Lần chỉnh sửa cuối:
Upvote 0
Giã sử bạn muốn viết HOA duy nhất 1 chử đầu tiên, và muốn code có tác dụng trong vùng B1:C10 thì code như sau:
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dau, Cuoi As String
If Not Intersect(Range("[B][COLOR=red]B1:C10[/COLOR][/B]"), Target) Is Nothing Then
    Dau = Left(Target, 1)
    Cuoi = Mid(Target, 2, Len(Target) - 1)
    Application.EnableEvents = False
    Target.Value = UCase(Dau) & Cuoi
    Application.EnableEvents = True
End If
End Sub
Vùng mà bạn quan tâm nằm ở chử màu đỏ ấy
vậy nếu mình muốn cột B và cột A thì chẳng lẽ mình viết 2 câu này sao?Cám ơn bạn rất nhiều.
 
Upvote 0
Sửa "B1:C10" trong đoạn code trên thành "A1:B1000" hay bao nhiêu đó tùy bạn! Sao phải viết 2 câu chứ
 
Upvote 0
Ý mình không phải vậy,thí dụ mình muốn cột A,C và E thì phải làm sao đó.

Banj xem nhé :
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Union(Range("A1:A10000"), Range("C1:C10000"), Range("E1:E10000")), Target) Is Nothing Then
    Application.EnableEvents = False
    Target.Value = UCase$(Left$(Target.Value, 1)) & _
                    Mid$(Target.Value, 2, Len(Target.Value) - 1)
    Application.EnableEvents = True
End If
End Sub

Thân!
 
Upvote 0
Banj xem nhé :
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
 
If Not Intersect(Union(Range("A1:A10000"), Range("C1:C10000"), Range("E1:E10000")), Target) Is Nothing Then
    Application.EnableEvents = False
    Target.Value = UCase$(Left$(Target.Value, 1)) & _
                    Mid$(Target.Value, 2, Len(Target.Value) - 1)
    Application.EnableEvents = True
End If
End Sub

Thân!
Cho mình hỏi,nếu mình làm như bạn cái này trong sheet1 thì được rồi,nhưng mình muốn làm tương tự bên sheet2 cột B và cột D thì phải làm sao,chẳng lẽ phải đánh lại code này bên sheet2 nữa hay sao?Có cách nào chỉ cần đánh 1 lần mà chọn được các cột mặc định trong nhiều sheet không?mình mới tập học VBA thôi,xin chân thành cảm ơn.
 
Upvote 0
Cho mình hỏi,nếu mình làm như bạn cái này trong sheet1 thì được rồi,nhưng mình muốn làm tương tự bên sheet2 cột B và cột D thì phải làm sao,chẳng lẽ phải đánh lại code này bên sheet2 nữa hay sao?Có cách nào chỉ cần đánh 1 lần mà chọn được các cột mặc định trong nhiều sheet không?mình mới tập học VBA thôi,xin chân thành cảm ơn.
Dùng code ấy dán vào ThisWorkbook và sửa dòng code đầu tiên thành:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Nó sẽ có tác dụng trên tất cả các sheet
 
Upvote 0
Dùng code ấy dán vào ThisWorkbook và sửa dòng code đầu tiên thành:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Nó sẽ có tác dụng trên tất cả các sheet
Cảm ơn bạn nhưng ý mình hỏi là,nếu làm như bạn thì tất cả các cột A,C,E đều được,còn nếu mình muốn sheet1 là cột A,C,E,còn bên sheet2 cột L,O,Q thì làm như thế nào?Cảm ơn bạn rất nhiều.
 
Upvote 0
Cảm ơn bạn nhưng ý mình hỏi là,nếu làm như bạn thì tất cả các cột A,C,E đều được,còn nếu mình muốn sheet1 là cột A,C,E,còn bên sheet2 cột L,O,Q thì làm như thế nào?Cảm ơn bạn rất nhiều.
Vậy thì bạn làm code cho từng sheet thôi (mổi sheet 1 code)
 
Upvote 0
em là người mới gia nhập forum, trình độ về excel rất kém. cho em hỏi làm sao để đánh chữ hoa đầu dòng cho tên của người, chẳng lẽ mỗi lần đánh như vậy lại phải bấm phím CAPS LOCK, có cách nào khác ngoài cách đó nữa không!$@!!
vd: Nguyễn Thị Hoa

Không cần bấm phím CAPS LOCK làm chi, bạn giữ phím Shift cũng được mà.

Mà nếu muốn dùng code thì mình nghĩ nên tạo một macro rồi gán phím tắt cho nó, chuyển thành một Add-Ins chạy được trên tất cả các workbook luôn. Lúc gõ văn bản thì cứ việc gõ vô tư. Khi cần chuyển đỗi chữ hoa đầu dòng thì chọn tất cả vùng cần chuyển rồi ấn một phát là xong.

Xử lý sự kiện worksheet_change có thể sẽ làm máy chậm lại và mỗi sheet làm một đoạn code là không cần thiết nữa! Không biết ý của bạn như thế nào?
 
Upvote 0
Theo em hiểu Proper là hàm của Excel dùng chuyển chử thường sang chử hoa của từng từ. Thế nhưng khi thay hàm Upper để đổi chử thường sang chử hoa tất cả thì lại báo lổi.
Nếu dùng hàm Ucase của VBA, chỉ chọn được 1 ô mà không chọn được nhiều ô.
VD:
Sub Doi()
Selection.Value = Application.Upper(Selection.Value)
End Sub
hoặc
Sub Doi1()
Range("C5:C10").Value = UCase(Range("C5:C10").Value)
End Sub

Nhờ các anh giúp giải thích giùm
 
Upvote 0
Theo em hiểu Proper là hàm của Excel dùng chuyển chử thường sang chử hoa của từng từ. Thế nhưng khi thay hàm Upper để đổi chử thường sang chử hoa tất cả thì lại báo lổi.
Nếu dùng hàm Ucase của VBA, chỉ chọn được 1 ô mà không chọn được nhiều ô.
VD:
Sub Doi()
Selection.Value = Application.Upper(Selection.Value)
End Sub
hoặc
Sub Doi1()
Range("C5:C10").Value = UCase(Range("C5:C10").Value)
End Sub

Nhờ các anh giúp giải thích giùm

Bạn lưu ý rằng Range("C5:C10").Value cho ra giá trị bao nhiêu? Lỗi là ở chỗ này, không phải là lỗi của hàm UCase

Nếu muốn, bạn có thể chỉnh sửa lại như sau:
Sub Doi()
Dim Clls As Range
Sheets("Sheet1").Range("C5:C10").Select
For Each Clls In Selection
Clls.Value = UCase(Clls.Text)
Next Clls
End Sub
 
Upvote 0
Cảm ơn anh Kiệt, em đã hiểu và giải quyết xong như sau:
Sub Doi()
Dim Vungchon As Range
With Selection
For Each Vungchon In Selection
Vungchon.Value = UCase(Vungchon.Value)
Next Vungchon
End With
End Sub
Mục đích dùng để chuyển chử Hoa ở những vùng mình chọn trong tất cả các sheet
 
Upvote 0
Dim Vungchon As Range
With Selection
For Each Vungchon In Selection
Vungchon.Value = UCase(Vungchon.Value)
Next Vungchon
End With
End Sub
Mục đích dùng để chuyển chử Hoa ở những vùng mình chọn trong tất cả các sheet

Bạn có thể bỏ luôn dòng lệnh
With Selection - vì không cẩn thiết!

Rất hân hạnh!
 
Upvote 0
Xin cho hỏi mình đã chép code do anhtuan1066 hướng dẫn về làm thử, và thấy bình thường nếu như từ B1:C10 có dữ liệu. Nhưng khi xóa dữ liệu thì sẽ xuất hiện thông báo lỗi đầu hoặc cuối. Mong các bạn xem và hướng dẫn giúp mình bẫy lỗi tí. Cảm ơn rất nhiều.
 
Upvote 0
Đã Edit lại code của bạn mymichau, dùng để đổi chữ hoa đầu dòng của các ô được chọn:
Sub DOICHU()
'
' DOICHU Macro
' Macro recorded 7/19/2010 by May3
'
' Keyboard Shortcut: Ctrl+i
'
Dim Vungchon As Range
Dim Dau, Cuoi As String
For Each Vungchon In Selection
Dau = Left(Vungchon, 1)
Cuoi = Mid(Vungchon, 2, Len(Vungchon) - 1)
Vungchon.Value = UCase(Dau) & Cuoi
Next Vungchon

End Sub
 
Upvote 0
Cái này copy đoạn code dán vào đâu vậy bạn, mình ko biết nhiều về excel lắm, mong bạn hướng dẫn giúp với
 
Upvote 0
Dùng Intersect bằng cách nào vậy bác chỉ giùm em với
em xài Excel 2010 ko tìm thấy Intersect đâu cả
thanks bác
 
Upvote 0
Hic mình ngu excell lăm
cho mình hỏi nhập
Private Sub Worksheet_Change(ByVal Target As Range)

If
Not Intersect(Union(Range("A1:A10000"), Range("C1:C10000"), Range("E1:E10000")), Target) Is Nothing Then
Application
.EnableEvents = False
Target
.Value = UCase$(Left$(Target.Value, 1)) & _
Mid
$(Target.Value, 2, Len(Target.Value) - 1)
Application.EnableEvents = True
End
If
End Sub
vô chỗ nào vậy
tức là làm khi muốn nhập một code thì nhập vô chỗ nào , nhập trên thanh fomular bả hả ban
thank nhiều nha
 
Upvote 0
Anh em cho em hỏi là nhập xong đoạn mã thì làm như nào tiếp, e không hiểu?
 
Upvote 0
Em đang dùng Ex 2007, em nhập đoạn mã vào View Codo xong rồi không biết làm thế nào nữa. Mà làm thế không biết có đúng không.
 
Upvote 0
Giã sử bạn muốn viết HOA duy nhất 1 chử đầu tiên, và muốn code có tác dụng trong vùng B1:C10 thì code như sau:
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dau, Cuoi As String
If Not Intersect(Range("[B][COLOR=red]B1:C10[/COLOR][/B]"), Target) Is Nothing Then
    Dau = Left(Target, 1)
    Cuoi = Mid(Target, 2, Len(Target) - 1)
    Application.EnableEvents = False
    Target.Value = UCase(Dau) & Cuoi
    Application.EnableEvents = True
End If
End Sub
Vùng mà bạn quan tâm nằm ở chử màu đỏ ấy
Cho em hỏi em kg muốn sử dụng sự kiện Worksheet_Change
Em sửa code thành
Mã:
Sub ChuHoa()
Dim Dau, Cuoi As String
[COLOR=#ff0000]If Not Intersect(Range("B1:C10"), Target) Is Nothing Then[/COLOR]
    Dau = Left(Target, 1)
    Cuoi = Mid(Target, 2, Len(Target) - 1)
    Application.EnableEvents = False
    Target.Value = UCase(Dau) & Cuoi
    Application.EnableEvents = True
End If
End Sub
Thì bị báo lỗi (dòng màu đỏ) xin hỏi cách khắc fục. Xin cảm ơn
 
Upvote 0
Cho em hỏi em kg muốn sử dụng sự kiện Worksheet_Change
Em sửa code thành
Mã:
Sub ChuHoa()
Dim Dau, Cuoi As String
[COLOR=#ff0000]If Not Intersect(Range("B1:C10"), Target) Is Nothing Then[/COLOR]
    Dau = Left(Target, 1)
    Cuoi = Mid(Target, 2, Len(Target) - 1)
    Application.EnableEvents = False
    Target.Value = UCase(Dau) & Cuoi
    Application.EnableEvents = True
End If
End Sub
Thì bị báo lỗi (dòng màu đỏ) xin hỏi cách khắc fục. Xin cảm ơn
Bạn thay Code trên bởi Code dưới đây:
PHP:
Sub ChuHoaDauCau()
     On Error Resume Next
     Dim Cll  As Range
     For Each Cll In Range("B1:C30")
          If Len(Cll.Value) >= 2 Then
               Cll.Value = UCase(Left(Cll.Value, 1)) & _
                    LCase(Right(Cll.Value, (Len(Cll.Value) - 1)))
          End If
     Next
     On Error GoTo 0
End Sub

- Tham khảo File đính kèm bạn nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn thay Code trên bởi Code dưới đây:
PHP:
Sub ChuHoaDauCau()
     On Error Resume Next
     Dim Cll  As Range
     For Each Cll In Range("B1:C30")
          If Len(Cll.Value) >= 2 Then
               Cll.Value = UCase(Left(Cll.Value, 1)) & _
                    LCase(Right(Cll.Value, (Len(Cll.Value) - 1)))
          End If
     Next
     On Error GoTo 0
End Sub

- Tham khảo File đính kèm bạn nhé
Cảm ơn bạn
Nhưng code này sẽ làm những từ được viết hoa trong câu thì sau khi chạy code thì sẽ thành chữ thường
Ví dụ: anh Thu
Thì sẽ thành
Anh thu
Tôi muốn nó không sửa những từ đã được viết hoa trong câu. Xin cảm ơn
 
Upvote 0
Cảm ơn bạn
Nhưng code này sẽ làm những từ được viết hoa trong câu thì sau khi chạy code thì sẽ thành chữ thường
Ví dụ: anh Thu
Thì sẽ thành
Anh thu
Tôi muốn nó không sửa những từ đã được viết hoa trong câu. Xin cảm ơn

Chỗ nào có LCase thì bỏ đi, chẳng hạn:
Mã:
LCase(Right(Cll.Value, (Len(Cll.Value) - 1)))
thì sửa thành:
Mã:
Right(Cll.Value, (Len(Cll.Value) - 1))
ngoài ra có thể sửa đoạn trên thành vầy sẽ gọn hơn:
Mã:
Mid(Cll.Value, 2)
 
Upvote 0
Banj xem nhé :
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Union(Range("A1:A10000"), Range("C1:C10000"), Range("E1:E10000")), Target) Is Nothing Then
    Application.EnableEvents = False
    Target.Value = UCase$(Left$(Target.Value, 1)) & _
                    Mid$(Target.Value, 2, Len(Target.Value) - 1)
    Application.EnableEvents = True
End If
End Sub

Thân!
hi anh ơi, em muốn tạo chữ in hoa đầu từ cho tất cả các sheet nhưng em làm như này không được anh ạ, anh xem giúp em với, em muốn định dạng chữ in hoa đầu từ cho tất cả các sheet trong 1 phai ở 2 cột D (họ tên) và cột E (địa chỉ). anh xem giúp được không ạ, em cám ơn anh ạ
 

File đính kèm

Upvote 0

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

Back
Top Bottom