Siêu hàm Excel – Tự động co giãn dòng tối ưu nhất cho Văn bản và Biên bản
Hôm nay tôi lại chia sẻ cho các bạn một Hàm VBA UDF có chức năng tự động co giãn dòng khi giá trị trong bảng tính thay đổi, thì quá trình co giãn dòng cũng tự động thay đổi theo.
Code bên dưới là phiên bản đầu nên có thể gặp một số lỗi nhất định, nên khi tham khảo thì các bạn nên kiểm trước, nếu code hoạt động ổn định thì các bạn có thể sử dụng.
Tôi quyết định viết code này bỡi vì trên diễn đàn có nhiều bài viết hỏi về co giãn dòng tự động, và khi tôi đọc qua các bài viết đó thì không thấy ai có thể xử lý vấn đề triệt để, hoặc là code chưa tối ưu, hoặc code chưa xử lý được nhiều vùng đã gộp cùng dòng.
Và hàm UDF là một cách tối ưu nhất giúp các bạn không phải code lại, mà chỉ cần viết Hàm như một hàm Excel bình thường để thực hiện tác vụ co giãn dòng.
HÀM UDF TỰ ĐỘNG CO GIÃN DÒNG
với Hàm S_FitRow
Chức năng ưu việt của hàm:
- Co giãn dòng hoàn toàn tự động.
- Co giãn dòng kể cả các ô đã được gộp.
- Co giãn dòng với các giá trị nhiều ô cùng dòng.
- Hoạt động cả ở chế độ Xem In Ấn
- Thêm một chiều cao nhất định sau khi giản dòng.
- Vì dùng hàm UDF nên rất tối ưu, tiết kiệm CPU.
Hướng dẫn sử dụng hàm:
Hàm đầy đủ: S_FitRow(Target, , , , , , )
Vị trí
Tham số
Kiểu
Chức năng
1
Target
Vùng cần giãn dòng
Nhận vùng cần co giãn
2
Margin
Kiểu số
Tăng chiều cao thêm một số
3
defaultHeight
Kiểu số
Chiều cao mặc định nếu giá trị rỗng
4
HeightOfRowNull
Kiểu số
Đặt chiều cao cho cả dòng rỗng
5
IncludeNoWrap
Có/Không
Co giãn kể cả ô không WapText
6
OnlySheetVisible
Có/Không
Chỉ giãn dòng khi Vùng tham chiếu nằm tại Trang hiện hành
7
Title
Chuỗi
Chuỗi bất kì do người dùng đặt (Nếu không thì trả về giá trị là Fit:{vùng})
Cách viết hàm nhanh, gõ vào ô chuỗi =S_FitRow và ấn tổ hợp phím Ctrl+Shift+A. Sẽ tự động nhập hàm và có gợi ý nhập đối số.
Viết hàm nhanh: =S_FitRow(A2)
Viết hàm có cài đặt đối số: =S_FitRow(A2,5,40,15,FALSE,TRUE)
Ví dụ: =S_FitRow(A1:E9,5, 40,15,FALSE,TRUE)
- A1:E9 là vùng cần co giãn
- 5 là tăng thêm chiều cao 5 đơn vị
- 40 là chiều cao mặc định nếu tất cả dòng giá trị rỗng
- 15 là chiều cao mặc định dòng giá trị rỗng
- FALSE thì ô không WapText thì không co giãn
- TRUE thì nếu vùng cần co giãn nằm khác Trang hiện hành thì sẽ chờ thực thi sau.
Cũng có thể gõ nhanh =S_FitRow(A1:E9) bỏ qua các cài đặt
Cách viết hàm như sau sẽ co giãn chính ô viết hàm:
1. Khi nhập chuỗi:
=S_FitRow("Chuỗi",5)
2. Khi tham chiếu giá trị thì đóng dấu ngoặc tròn ô tham chiếu:
=S_FitRow((A2),5)
Cách viết hàm như sau sẽ co giãn vùng tham chiếu:
=S_FitRow(B26: D35,5)
Ví dụ: Cần co giãn các ô như sau: B28:C31, D28:E28, D29: D30, E29:E31, D31
Thì viết hàm: =S_FitRow(B28:E31,5)
Để có thể co giãn các ô cùng dòng và đã gộp ô
Các phương thức Bổ trợ:
1. Gõ hàm S_FitRow_OFF: nếu đang chỉnh sửa trang tính hãy tắt chế độ co giãn dòng hoặc bật chế độ Design Mode trong Tab Developer.
2. Gõ hàm S_FitRow_ON: Nếu đã tắt chế độ co giãn dòng tự động thì bật lên.
3. Thủ tục S_FitRow_Toggle + Check box có tên là chxAutoFitRow dùng để bật tắt chế độ co giãn dòng nếu muốn (Ví dụ nằm ở Sheet1 trong tập tin đính kèm bên dưới).
Bước 3 này là một thủ thuật để ngăn chặn code tính toán lúc ứng dụng vừa khởi động, vì có thể sẽ gặp phải tình trạng code sẽ làm chậm quá trình khởi động.
Hãy để dòng code sau vào sự kiện Workbook_Open: Call S_FitRow_Off
Hãy mở lại bằng bước 2 hoặc bước 3.
*** Nếu bạn viết quá nhiều công thức hàm S_FitRow thì không thể thiếu bước 3 này
Cách nhập nhiều mảng:
Sử dụng hàm S_Cells hàm tự tạo: =S_FitRow(S_Cells(A1:C9,D2: D3,E5:E6), 5, 40)
Hướng dẫn tận dụng hàm:
Với 2 ví dụ sau:
1. Cách viết hàm tổng quát như sau sẽ gây chậm và tiêu tốn CPU:
=S_FitRow(A1:Z500)
2. Cách viết hàm đơn lẻ cho từng vùng sẽ tiết kiệm, và code sẽ chạy nhanh hơn:
=S_FitRow(A1:Z1)
=S_FitRow(A2:Z2)
=S_FitRow(A3:Z4)
Tức là hãy nhập vùng cho hàm sao cho vùng đó tương ứng với số dòng ô được gộp lớn nhất của dòng tương ứng.
Nếu ta có các vùng được gộp là A1:C9, D2: D3, E5:E6, thì rõ ràng là A1:C9 có các dòng chứa hết các vùng còn lại,
nên ta viết: =S_FitRow(A1:E9)
Những lỗi có thể xảy ra:
- Vì code sẽ mượn một ô trong trang tính làm ô để giãn dòng, vì vậy nếu hàm có vùng tham chiếu giao với ô được mượn thì xảy ra lỗi.
- Nếu có hai hàm có tham chiếu là hai vùng giao nhau có thể xảy ra lỗi.
- Nếu trang tính hoặc ô tham chiếu đang khóa, cũng có thể xảy ra lỗi.
- Nếu trong trang tính có hàm giãn dòng có sử dụng hàm RandBetween.
*** Các bạn lưu ý code có thể chưa được tối ưu nhất, nên có thể cập nhật lại nhiều lần, nên nếu các bạn có sử dụng code thì nên thường xuyên xem lại bài viết, sẽ có thông báo cập nhật nếu có ở đầu bài viết.
www.giaiphapexcel.com/diendan/threads/si%C3%AAu-h%C3%A0m-excel-t%E1%BB%B1-%C4%91%E1%BB%99ng-co-gi%C3%A3n-d%C3%B2ng-t%E1%BB%91i-%C6%B0u-nh%E1%BA%A5t-cho-v%C4%83n-b%E1%BA%A3n-v%C3%A0-bi%C3%AAn-b%E1%BA%A3n.155161/
Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...
Xem khóa học
Bình luận