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
Web KT

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

Back
Top Bottom