Làm nổi bật dòng và cột

Trạng thái
Không mở trả lời sau này.

giaiphapvba

Administrator
Thành viên BQT
Mục đích: Tôi muốn thể hiện đường dóng ngang và dọc như sau.
Bạn cần đăng nhập để thấy đính kèm


Cách thức thực hiện:
Bạn click vào góc trên cùng của excel để chọn toàn bộ bảng tính:
Bạn cần đăng nhập để thấy đính kèm


Chọn New Rule:
Bạn cần đăng nhập để thấy đính kèm


Chọn Use a Formula...:
Bạn cần đăng nhập để thấy đính kèm

Nhập công thức sau:
=OR(ROW()=CELL("row"),COLUMN()=CELL("col"))

Sau đó click vào Format... :
Chọn thẻ Fill và sau đó chọn màu mà bạn muốn. Ấn OK.
Bạn cần đăng nhập để thấy đính kèm


Bây giờ bạn click vào đâu và ấn F9 thì sẽ có hiệu ứng dòng và cột được tô màu.
Tuy nhiên việc ấn F9 này thật là phiền phức. Vì vậy, chúng ta sẽ can thiệp bằng macro như sau:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveSheet.Calculate
End Sub
Bây giờ thì ổn rồi đấy, bạn click chuột vào đâu trên sheet thì sẽ có đường dóng màu. Thử xem nhé.

Giải thích một chút về công thức:
Mã:
CELL("row") ,      CELL("col")
Nó sẽ trả về giá trị dòng và cột của cells đang được click (active).
Mã:
ROW(Target) ,      COLUMN(Target)
Dòng Target và cột Target là đối tượng nhắm tới.
Như vậy công thức trên có nghĩa là: Dòng = dòng chứa cells active hoặc cột = cột chứa cells active thì sẽ bị tô màu.
Bài viết được tham khảo từ:
 
T

thanhphuongvip

Guest
Mình đã thử và thành công. Rất bổ ích nếu có bảng dữ liệu có quá nhiều dòng và nhiều cột thì sẽ rất tiện để tra cứu.
Tuy nhiên có thêm cải tiến này sẽ hay:
- Tạo một công cụ dạng hộp thoại checkbox trên thanh công cụ đặt tên là: Tô màu cột & dòng chọn chẳng hạn. Để lúc nào người ta cần chức năng này thì lấy ra bằng cách check vào công cụ trên, không thì bỏ check!

Có thể làm như vậy đc ko, và xin chỉ cách! Đa tạ!
 
Làm cái này cũng hay, chỉ cần viết add in thôi nhưng mà có nhược điểm là nó sẽ xóa đi dòng cột mà bạn đã tô màu trước đó
 

giaiphapvba

Administrator
Thành viên BQT
1. Trả lời @thanhphuongvip : Có thể làm được. Em sẽ hướng dẫn anh sau.
2. Trả lời @Thuyyeu99 : Giả sử cột hay dòng có màu vàng trươc đó. Nếu click vào thì nó thành màu xanh. Nếu click ra chỗ khác thì sẽ được trả lại màu vàng.
 

giaiphapvba

Administrator
Thành viên BQT
Trả lời @Thuyyeu99 : Ở đây lệnh tô màu là dùng Luật (rule). Nếu điều kiện thực thi luật không thỏa mãn thì nó không được thực thi.
Cho nên cách nghĩ sẽ không giống như chúng ta đang nghĩ để code macro.
Chỉ cần luật không thỏa mãn, thì trạng thái như thế nào vẫn như thế. Bạn cứ thử làm đi ạ.
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Calculate
End Sub

Chưa kể work book có nhieu sheet mà có công thức thì lag lắm
 

giaiphapvba

Administrator
Thành viên BQT
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Calculate
End Sub
Cái này chỉ để refresh lại thôi ạ.
Để thể hiện lag như thế nào, anh/chị có thể đưa ra file có nhiều công thức cho em test thử có được không ạ? Từ đó chúng ta có cơ sở để thảo luận hướng giải quyết tiếp theo.
 

phamthach

Yêu THVBA nhất
Mục đích: Tôi muốn thể hiện đường dóng ngang và dọc như sau.
Bạn cần đăng nhập để thấy đính kèm


Cách thức thực hiện:
Bạn click vào góc trên cùng của excel để chọn toàn bộ bảng tính:
Bạn cần đăng nhập để thấy đính kèm


Chọn New Rule:
Bạn cần đăng nhập để thấy đính kèm


Chọn Use a Formula...:
Bạn cần đăng nhập để thấy đính kèm

Nhập công thức sau:
=OR(ROW()=CELL("row"),COLUMN()=CELL("col"))

Sau đó click vào Format... :
Chọn thẻ Fill và sau đó chọn màu mà bạn muốn. Ấn OK.
Bạn cần đăng nhập để thấy đính kèm


Bây giờ bạn click vào đâu và ấn F9 thì sẽ có hiệu ứng dòng và cột được tô màu.
Tuy nhiên việc ấn F9 này thật là phiền phức. Vì vậy, chúng ta sẽ can thiệp bằng macro như sau:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveSheet.Calculate
End Sub
Bây giờ thì ổn rồi đấy, bạn click chuột vào đâu trên sheet thì sẽ có đường dóng màu. Thử xem nhé.

Giải thích một chút về công thức:
Mã:
CELL("row") ,      CELL("col")
Nó sẽ trả về giá trị dòng và cột của cells đang được click (active).
Mã:
ROW(Target) ,      COLUMN(Target)
Dòng Target và cột Target là đối tượng nhắm tới.
Như vậy công thức trên có nghĩa là: Dòng = dòng chứa cells active hoặc cột = cột chứa cells active thì sẽ bị tô màu.
Bài viết được tham khảo từ:
Cái này của bạn rất hữu ích. Mình muốn hỏi thêm, cái này bạn có thể tạo thành add-in dc k?
 

giaiphapvba

Administrator
Thành viên BQT
Chào @phamthach .
Trả lời bạn: Tôi có thẻ tạo thành add-in được.
Nếu nhận được ủng hộ tài chính của bạn giành cho diễn đàn, hãy cho phép tôi tạo add-in cho bạn.
 

thaipv

Mod
Thành viên BQT
Mục đích: Tôi muốn thể hiện đường dóng ngang và dọc như sau.
.....
Cách này của bạn cũng khá hay. Tôi tùy biến 1 chút để nhìn trông đẹp hơn và áp dụng cho 1 vùng chọn (code của bạn @giaiphapvba áp dụng cho 1 ô)
Bạn cần đăng nhập để thấy đính kèm


- Ưu điểm của cách này là không làm mất định dạng ban đầu của vùng (vì dùng Conditional Formatting - định dạng có điều kiện).

- Tuy nhiên, nhược điểm của cách này là :
+ Sẽ làm chương trình chạy chậm nếu file của các bạn có nhiều dữ liệu (Cách này đang áp dụng cho tất cả các ô trong bảng tính. Khi có 1 sự thay đổi về vùng được chọn thì tất cả các ô sẽ tính toán xem có thỏa điều kiện để định dạng lại hay không => Cần rất nhiều tài nguyên để tính toán. Đây chính là nhược điểm lớn nhất của cách làm này)
+ Nếu người dùng Cut hoặc Move vùng đi nơi khác thì vẫn xảy ra tình trạng mất định dạng.
+ Để phát triển lên cho cả bảng tính hoặc tạo thành addin thì cũng là 1 vấn đề rất lớn.

Các bạn có ý tưởng nào thì cùng trao đổi nhé.
Tải về tại :
 
Sửa lần cuối:

thaipv

Mod
Thành viên BQT
Mình chưa hiểu vấn đề lớn ở đây là vấn đề gì thế ạ?
Vấn đề lớn khi chúng ta tạo thành addin theo cách này (sử dụng Định dạng có điều kiện) là :
+ Chương trình sẽ chạy rất chậm nếu chúng ta áp dụng Định dạng có điều kiện cho các file đang mở (lý do như tôi đã nêu ra ở trên).
+ Để áp dụng được cách này chúng ta phải định dạng có điều kiện cho những Sheet của những file đang mở (= rất nhiều sheet) (tức là ta cần tác động vào file của người khác). Có 2 trường hợp xảy ra :
- Trường hợp 1 : Người dùng sẽ không thoải mái khi định dạng file của họ bị thay đối (file của người dùng sẽ phải cõng thêm 1 đống Định dạng có điều kiện nữa).​
- Trường hợp 2 : Giả sử bạn có thể trả lại định dạng ban đầu cho file của người dùng (file của người dùng sẽ được trả về nguyên trạng, không còn phải cõng thêm 1 đống Định dạng có điều kiện) thì vấn đề phát sinh là code sẽ phức tạp trong trường hợp này.​
+ Phải bẫy lỗi trường hợp người dùng Cut hoặc Move vùng đi nơi khác...
 
Sửa lần cuối:

giaiphapvba

Administrator
Thành viên BQT
Không, nếu là vậy, thì mình nghĩ bạn chỉ cần làm cho sheet đang active thôi. Trường hợp file khóa sheet, thậm chí chỉ cho đọc read only thì mình chưa nghĩ tới.
 

vbano1

SMod
Thành viên BQT
Đây là topic trong Box Những Vấn Đề Chung về Excel. Vì vậy khả năng trình diễn code VBA sẽ có nhiều hạn chế. Trong khuôn khổ topic khác, sử dụng hết thế mạnh của VBA, chúng ta sẽ xây dựng Add-in.
Việc làm ra một Add-in phục vụ cộng đồng là đáng quý, nhưng cũng cần thời gian. Các thành viên BQT không phải là những người có nhiều thời gian. Do đó, mọi người bình tĩnh và chờ đợi.
 
Trạng thái
Không mở trả lời sau này.
Top