Highlight hàng khi di chuyển chuột
Cách thứ nhất: là dùng Conditional Formatting.
Các bạn thực hiện các bước như hình:
Bước 1: Chọn vùng bạn muốn highlight (tô màu) khi di chuyển.
Bước 2: Chọn Conditional Formatting > Use a formula to determine which cells to format và nhập vào công thức
(Bạn chú ý hai hàm ROW và CELL ở trong công thức - Các bạn có thể tìm hiểu thêm về 2 hàm này tại đây với hàm ROW và đây với hàm CELL)
Các bạn cũng có thể phối hợp các hàng khác, để khi bạn di chuyển phải bảo đảm rằng giá trị công thức trả về khi bạn chọn hàng hiện hành là TRUE.
Sau đó chọn định dạng như: Bold, màu nền, màu chữ,... theo ý của bạn. Cuối cùng chọn nút "OK" để áp dụng.
Bước cuối cùng là đưa vào thủ tục sự kiện
Như vậy bạn khi di chuyển ô chọn bạn sẽ thấy định dạng theo như bạn muốn.
Các bạn có thể download tập tin tại đây.
Cách trên được đưa ra bởi bạn hoangminhtien.
Cách thứ hai: là kết hợp giữa các hàm Window API.
Cách này của thành viên rollover79.
Ở cách này tác giả có hai nút để các bạn quyết định bắt đầu hay không bắt đầu Highlight.
Để thực hiện, các bạn hãy tạo một module và đưa đoạn mã sau vào:
Nguyên tắc của cách hai là, dùng các hàm API để xác định vị trí của chuột và tô màu ở hàng này. Đây là một cách làm sáng tạo.
Như vậy với cách làm này thì khi bạn di chuyển bằng các phím mủi tên thì cách này không thể áp dụng được.
Các bạn có thể tải tập tin tại đây.
Link của topic nói về vấn đề này tại đây.
Cách thứ ba: là dựa vào thủ tục sự kiện Worksheet_SelectionChange.
Với đoạn mã ở trên, việc thực thi sẽ chậm nếu có nhiều ô trong cùng một hàng phải phục hồi màu nền.
Hoặc đơn giản hơn ta có thể dùng đoạn mã sau:
Nguồn: http://www.mcgimpsey.com/excel/highlightrow.html
Lê Văn Duyệt
Một số bài viết có liên quan:
1/ Spreadsheet Design: TRÌNH BÀY BẢNG TÍNH
2/ Chiêu số 23: Bật, tắt chức năng Conditional Formatting bằng 1 checkbox
3/ Chiêu thứ 21: Tô màu dòng xen kẽ
4/ Chiêu số 19: Đánh dấu những ô chứa công thức bằng Conditional Formatting
5/ Sử dụng định dạng có điều kiện (Conditional Formatting) để làm nổi bật ngày tháng trong Excel
6/ Chiêu số 18: Điều khiển Conditional Formating bằng checkbox
7/ Chiêu số 11: Tìm dữ liệu xuất hiện 2 hoặc nhiều lần bằng công cụ Conditional Formating
8/ Chiêu thứ 8: Giới hạn vùng cuộn của bảng tính
9/ Ebook: Dữ liệu & Báo cáo trong Excel 2013
10/ Phân tích tồn kho theo phương pháp ABC
Cách thứ nhất: là dùng Conditional Formatting.
Các bạn thực hiện các bước như hình:
Bước 1: Chọn vùng bạn muốn highlight (tô màu) khi di chuyển.
Bước 2: Chọn Conditional Formatting > Use a formula to determine which cells to format và nhập vào công thức
Mã:
=ROW()=CELL("ROW")
Các bạn cũng có thể phối hợp các hàng khác, để khi bạn di chuyển phải bảo đảm rằng giá trị công thức trả về khi bạn chọn hàng hiện hành là TRUE.
Sau đó chọn định dạng như: Bold, màu nền, màu chữ,... theo ý của bạn. Cuối cùng chọn nút "OK" để áp dụng.

Bước cuối cùng là đưa vào thủ tục sự kiện
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = True
End Sub
Như vậy bạn khi di chuyển ô chọn bạn sẽ thấy định dạng theo như bạn muốn.
Các bạn có thể download tập tin tại đây.
Cách trên được đưa ra bởi bạn hoangminhtien.
Cách thứ hai: là kết hợp giữa các hàm Window API.
Cách này của thành viên rollover79.
Ở cách này tác giả có hai nút để các bạn quyết định bắt đầu hay không bắt đầu Highlight.
Để thực hiện, các bạn hãy tạo một module và đưa đoạn mã sau vào:
Mã:
Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Public curCell As Range
Public Type POINTAPI
X As Long
Y As Long
End Type
Private CursorPos As POINTAPI
Private CursorCell As Range
Public bActive As Boolean
' Thủ tục này sẽ được gọi khi bạn muốn bắt đầu quá trình Highlight hàng
Sub Active()
On Error Resume Next
If bActive Then Exit Sub
SetTimer Application.hWnd, 1, 250, AddressOf RowAlternative
bActive = True
End Sub
' Thủ tục này sẽ được gọi khi bạn muốn kết thúc quá trình Highlight hàng
Sub DeActive()
On Error Resume Next
bActive = False
KillTimer Application.hWnd, 1
ActiveSheet.Rows(curCell.Row).FormatConditions(1).Delete
End Sub
' Thủ tục chính để tô màu hàng tại vị trí con trỏ
Private Function RowAlternative()
On Error Resume Next
Dim RetVal As Long
RetVal = GetCursorPos(CursorPos)
RetVal = WindowFromPoint(CursorPos.X, CursorPos.Y)
' Sẽ không thực hiện nếu ứng dụng không phải là Excel
If (Application.Name <> "Microsoft Excel") Then Exit Function
Set CursorCell = Application.Windows(1).RangeFromPoint(CursorPos.X, CursorPos.Y)
If Err.Number = 0 Then
' Thực hiện xóa tô màu ở hàng cũ, và tô màu ở hàng mới
If CursorCell.Address <> curCell.Address Then
ActiveSheet.Rows(curCell.Row).FormatConditions(1).Delete
Set curCell = CursorCell
ActiveSheet.Rows(curCell.Row).FormatConditions.Add xlExpression, , "=true"
ActiveSheet.Rows(curCell.Row).FormatConditions(1).Interior.ColorIndex = 24
End If
End If
End Function
Nguyên tắc của cách hai là, dùng các hàm API để xác định vị trí của chuột và tô màu ở hàng này. Đây là một cách làm sáng tạo.
Như vậy với cách làm này thì khi bạn di chuyển bằng các phím mủi tên thì cách này không thể áp dụng được.

Các bạn có thể tải tập tin tại đây.
Link của topic nói về vấn đề này tại đây.
Cách thứ ba: là dựa vào thủ tục sự kiện Worksheet_SelectionChange.
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Const cnNUMCOLS As Long = 256
' Màu mặc định là màu vàng
Const cnHIGHLIGHTCOLOR As Long = 36 '
Static rOld As Range
Static nColorIndices(1 To cnNUMCOLS) As Long
Dim i As Long
If Not rOld Is Nothing Then ' Phục hồi lại màu nền của ô cũ
With rOld.Cells
If .Row = ActiveCell.Row Then Exit Sub ' Cùng một hàng không phục hồi
For i = 1 To cnNUMCOLS
.Item(i).Interior.ColorIndex = nColorIndices(i)
Next i
End With
End If
Set rOld = Cells(ActiveCell.Row, 1).Resize(1, cnNUMCOLS)
With rOld
For i = 1 To cnNUMCOLS
nColorIndices(i) = .Item(i).Interior.ColorIndex
Next i
.Interior.ColorIndex = cnHIGHLIGHTCOLOR
End With
End Sub
Hoặc đơn giản hơn ta có thể dùng đoạn mã sau:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Cells.Interior.ColorIndex = xlColorIndexNone
ActiveCell.EntireRow.Interior.ColorIndex = 36
End Sub
Lê Văn Duyệt
Một số bài viết có liên quan:
1/ Spreadsheet Design: TRÌNH BÀY BẢNG TÍNH
2/ Chiêu số 23: Bật, tắt chức năng Conditional Formatting bằng 1 checkbox
3/ Chiêu thứ 21: Tô màu dòng xen kẽ
4/ Chiêu số 19: Đánh dấu những ô chứa công thức bằng Conditional Formatting
5/ Sử dụng định dạng có điều kiện (Conditional Formatting) để làm nổi bật ngày tháng trong Excel
6/ Chiêu số 18: Điều khiển Conditional Formating bằng checkbox
7/ Chiêu số 11: Tìm dữ liệu xuất hiện 2 hoặc nhiều lần bằng công cụ Conditional Formating
8/ Chiêu thứ 8: Giới hạn vùng cuộn của bảng tính
9/ Ebook: Dữ liệu & Báo cáo trong Excel 2013
10/ Phân tích tồn kho theo phương pháp ABC
Chỉnh sửa lần cuối bởi điều hành viên: