PDA

View Full Version : làm sao để đánh hoa đầu dòng trong excel



cech
02-12-07, 07:24 PM
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

ptm0412
02-12-07, 09:07 PM
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.

chibi
02-12-07, 11:42 PM
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

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

Mr Okebab
03-12-07, 03:35 PM
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

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!

chibi
03-12-07, 06:42 PM
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.

anhtuan1066
03-12-07, 07:10 PM
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

790312
07-07-08, 09:45 PM
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.

anhtuan1066
07-07-08, 09:59 PM
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:


Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dau, Cuoi As String
If Not Intersect(Range("B1:C10"), 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

790312
08-07-08, 01:56 PM
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:


Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dau, Cuoi As String
If Not Intersect(Range("B1:C10"), 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.

ndu96081631
08-07-08, 03:40 PM
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ứ

790312
08-07-08, 04:12 PM
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ứ
Ý 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 đó.

Mr Okebab
08-07-08, 04:51 PM
Ý 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é :


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!

health
09-07-08, 09:27 AM
Banj xem nhé :


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.

ndu96081631
09-07-08, 09:42 AM
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

health
09-07-08, 10:56 AM
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.

anhtuan1066
09-07-08, 11:52 AM
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)

cadafi
09-07-08, 12:28 PM
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?

mymichau
10-07-08, 10:23 AM
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

cadafi
10-07-08, 10:42 AM
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

mymichau
10-07-08, 08:25 PM
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

cadafi
11-07-08, 01:20 AM
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!

trôimuabun
14-10-09, 10:22 AM
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.

mrducdc
19-07-10, 10:28 AM
Đã 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

minhtuannv
22-02-12, 10:35 AM
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

minhtuannv
22-02-12, 11:20 AM
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

blackboydung
23-07-12, 10:18 AM
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

haihb09kt019
02-02-13, 01:56 PM
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?

haihb09kt019
02-02-13, 02:00 PM
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.