Làm nổi bật ô chọn với hàm tạo định dạng có điều kiện

Liên hệ QC

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,527
Được thích
3,820
Giới tính
Nam
Hôm nay tôi chia sẻ với các bạn hàm tạo định dạng có điều kiện để tô màu cột và dòng làm nổi bật để đối chiếu ô đang chọn, giúp chúng ta có cái nhìn trực quan trong bảng tính Excel.

Mặc dù có thể tạo định dạng có điều kiện bằng Trình tạo định dạng có điều kiện có sẵn của Excel. Tuy nhiên để thuận tiện, làm cho việc tạo dễ dàng và nhanh chóng hơn, chỉ cần tận dụng VBA để tự động hóa chúng. Các hàm dưới đây chỉ là bổ trợ tạo Formatting conditions, chứ không phải hàm chức năng.

Ưu điểm của cách tô màu nổi bật với định dạng có điều kiện:
  1. Đối chiếu dòng cột dễ dàng.
  2. Định dạng không làm ảnh hướng đến chế độ Undo và Redo của Excel.
  3. Dễ dàng tạo định dạng điều kiện với việc gõ hàm.
Nhược điểm:
Cách tô màu với định dạng có điều kiện gây tốn kém tài nguyên, khi thực hiện tính toán lại, nếu vùng ô quá lớn.

***Nếu dự án của bạn đã có nhiều công thức tính toán thì không nên sử dụng cách này để tô màu.

Hình ảnh làm nổi bật ô với định dạng có điều kiện:

1721920798565.png

Hướng dẫn:
Hàm:
=CellHighlight(RangeEvent,[Đối_số_cài_đặt])

Gõ 1 hàm duy nhất cho 1 vùng ô cần tô màu, vào một ô bất kỳ không sử dụng đến.

Các hàm đối số cài đặt

Hàm đối số cài đặtDiễn giải
HL_Column(color=0)Nhập hàm thì tô cột với màu chỉ định hoặc màu mặc định
HL_Row(color=0)Nhập hàm thì tô dòng với màu chỉ định hoặc màu mặc định
HL_ActiveCell(color=0, borderColor=0)Nhập hàm thì tô ô chọn với màu chỉ định hoặc màu mặc định
CellHighlight_ShowWindow()Nhập hàm này ô bất kì để mở Cửa sổ Formatting Conditions
CellHighlight_Delete()Xóa điều kiện đã đặt, hàm có sẵn trong ô, thêm _Delete và nhấn Enter
Hoặc nếu nhập hàm này trên vùng ô đang có định dạng.
CellHighlight_DeleteAll()Xóa tất cả điều kiện tô màu
CellHighlight_CopyCode()Chép mã vào bộ nhớ tạm để dán vào mã ThisWorkbook
CellHighlight_HuongDan()Tự động tạo trang tính hướng dẫn sử dụng


Ví dụ: Tô màu vùng ô A1:Z1000 được đặt tên là Table1, với tô cột, dòng và ô chọn

=CellHighlight(Table1,HL_Row(),HL_Column(),HL_ActiveCell())

Ví dụ: Tô màu vùng ô A1:Z1000 được đặt tên là Table1, tô dòng màu #5CC8B3 và ô chọn màu mặc định

=CellHighlight(Table1,HL_Row("#5CC8B3"),HL_ActiveCell())

Ví dụ CellHighlight_Delete:
Nếu ô chứa hàm =CellHighlight(Table1,HL_ActiveCell()) để xóa chỉ cần thêm _Delete và nhấn Enter
Nếu nhập =CellHighlight_Delete() trên vùng ô có định dạng thì thực hiện xóa.

Chọn màu sắc cho định dạng màu nền:

Để đặt màu sắc có thể chọn màu trong bảng chọn màu, hoặc một số đại diện màu sắc hoặc tên màu tiếng Anh.​
Dưới bảng chọn màu hãy chọn màu Hệ thập lục phân, ví dụ chọn và nhập HL_Row("#5CC8B3")​

1721920867835.png

Nếu bạn đã tạo xong các định dạng có điều kiện cho các vùng ô, bạn có thể xóa tất cả mã trong module đi, để lại các dòng mã mà mã trong ThisWorkbook gọi.

Để sử dụng được Hàm trong dự án mới, hãy sao chép module modXLCellHighlight và mã trong ThisWorkbook.
***Lưu ý: khi sử dụng mã VBA thì dự án của bạn cần lưu ở các định dạng xlsm, xlsb hoặc dạng add-in xla, xlam.

Các bạn có thể tải Add-in, cài đặt để sử dụng lại cho các dự án khác


Hàm hỗ trợ thêm trong việc tô màu nền trực quan với Add-in XLCellHighlight xlam:


Ví dụ bạn muốn tô màu từ ô F4 cho đến F4:J25, hãy nhập màu nền cho F4 trắng và J4 cam, thường thì là màu sáng và nhập công thức sau:​
=FillColor(F4:J25)​
Nếu bạn muốn chọn mô hình màu, thì gồm các hàm dưới đây, với 2 tham số, vị trí màu, và khoảng cách không gian màu:​
Fill_HUE(Starting, Fractor)​
Fill_Natural(Starting, Fractor)​
Fill_Lightness(Starting, Fractor)​
Công thức nhập như sau: =FillColor(F4:J25, Fill_Natural(0, 20))​
Starting luôn bắt đầu từ 0, nếu bạn muốn lệch bao nhiêu thì thêm vào. Khoảng cách không gian màu tùy màu mà đối số có thể âm.​
Các hàm này phải được nhập trong hàm FillColor.​
Sau khi tô xong bạn có thể xóa hàm đã gõ đi.​
Hình ảnh kết quả​
1722215322703.png


Các bạn có thể tham khảo thêm Add-in làm nổi bật ô chọn:

Các bài viết của tôi tại tag #sanbi vba


(Để tải được tệp dưới cần đăng nhập)
***Mật khẩu VBA là 1
 

File đính kèm

  • XLCellHighlight.xlsm
    99.1 KB · Đọc: 16
  • XLCellHighlight.xlam
    118.1 KB · Đọc: 5
Lần chỉnh sửa cuối:
...
Đề nghị các bạn đọc cho kỹ để biết rằng tôi không góp ý nặng nề, cũng không đổ lỗi.
Còn ý chính của tôi là gì, cũng cảm phiền đọc lại từ đầu. Và làm ơn đọc kỹ. Tôi cũng đã nói từ bài 15 rằng tôi dừng.

View attachment 302776

Xin nói trước là tôi không muốn dính dáng đến code kiếc bài này. Những gì liếc qua thấy nó không đúng tôi cũng không muốn dây dưa. Chỉ khi nào thấy cái sai ảnh hưởng đến kiến thức các bạn ham học code tôi mới nói.

Những dòng sau đây là tôi nói cho người tôi quote ở trên:
Thường thì người ta sửa code sẽ có chỗ cho biết phiên bản, và một bảng lịch sử (history), Có thể nằm trong code, hoặc file gì đó cho biết phiên bản cải tiến như thế nào? chỉnh sửa lỗi, chỉnh giao diện (*), tăng hiêu quả, vv...?

(*) Là dân code HĐT, giao diện đối với tôi là quan trọng nhất. Thường thường chỉnh sửa giao diện có nghĩa là thay đổi những trường hợp mà phiên bản trước không hổ trợ.
 
Upvote 0
Những dòng sau đây là tôi nói cho người tôi quote ở trên:
Thường thì người ta sửa code sẽ có chỗ cho biết phiên bản, và một bảng lịch sử (history), Có thể nằm trong code, hoặc file gì đó cho biết phiên bản cải tiến như thế nào? chỉnh sửa lỗi, chỉnh giao diện (*), tăng hiêu quả, vv...?
Tôi cũng nói trước là tôi chỉ trả lời người tôi trích dẫn:
- Thứ nhất, tôi biết rằng code viết xong sẽ phải có lỗi. Dù đã tự test bao nhiêu cũng sẽ vẫn còn. Đưa lên cộng đồng là việc tốt, tốt cho cả hai phía.
- Thứ hai, tôi không tải về, tôi không thử. Nhưng tôi thấy bài 2 báo lỗi, bài 3 nhận là lỗi và xác định đã sửa lỗi (xem minh họa). Thế nên tôi mới có ý kiến, mà ý kiến của tôi cũng không nói lỗi của ai, không chê rằng lỗi người viết code hay xác định lỗi của MS.
- Thứ ba, nếu tất cả là do phiên bản Office gây ra, không phải lỗi, thì cũng chưa phải là hoàn thiện. Huống hồ không phải tất cả là lỗi do MS (chẳng hạn như "Ctrl Enter gây rối", "gõ công thức sai chỗ"). Đó không phải lỗi viết code thật, nhưng đó là chưa lường trước lỗi do người dùng gây ra.


1722266071235.png
 
Upvote 0
Web KT

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

Back
Top Bottom