HÀM - Co giãn dòng tự động tối ưu nhất cho Excel v2.42 (*14/10/2024)

Liên hệ QC
***** CẬP NHẬT - v2.42 *****

Cập nhật 2.42 sửa một số lỗi trong mã và tăng tốc giãn dòng bằng cách giãn đồng thời các ô giá trị cùng cột
Và thêm các hàm bổ trợ giãn dòng cho Bảng để tiết kiệm hơn trong quá trình giãn dòng, với hàm bổ trợ fit_Tables()

Dự kiến bản cập nhật tiếp theo
Thêm hàm chức năng bổ trợ giãn dòng trước khi in.​
-------------------------------------------------------------------

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.

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 FITROW - TỰ ĐỘNG GIÃN DÒNG

Chức năng của hàm:
  1. Co giãn dòng hoàn toàn tự động.
  2. Co giãn dòng kể cả các ô đã được gộp.
  3. Co giãn dòng với các giá trị nhiều ô gộp cùng dòng.
  4. Co giãn dòng kể cả chiều cao vượt giới hạn của Excel là 409.5
  5. Hoạt động cả ở chế độ Xem In Ấn.
  6. Cách gõ hàm cài đặt đối số tùy chỉnh ưu việt:
    • Thêm chiều cao nhất định cho dòng đã giãn.
    • Đặt chiều cao mặc định cho vùng trống.
    • Đặt chiều cao mặc định cho dòng trống.
    • Tự đặt tỉ lệ giãn chiều rộng, chiều cao và thụt đầu dòng, khi chiều cao dòng vượt giới hạn.
  7. Vì dùng hàm UDF nên rất tối ưu, tiết kiệm CPU.
  8. Chỉ cần gõ một biểu thức FITROW cho cả vùng cần co giãn.
  9. Tự động dịch chuyển lề trên hoặc lề dưới của trang để chỉ mục nằm vị trí tốt nhất để in ấn.
Các cập nhật thêm
  1. Đã tạo Add-in cho hàm giãn dòng, thêm phím tắt giãn dòng CTRL+SHIFT+ALT+R.
  2. Thay đổi giải thuật giãn dòng chính xác hơn.
  3. Cách viết hàm khác hoàn toàn so với trước, đối số nhập vào phải là một hàm.
  4. Giãn dòng kể cả ô vượt giới hạn 409.5 đơn vị chiều cao ô Excel.
  5. Giãn dòng biên bản tự động dịch chuyển và canh trang để chỉ mục không bị trồi lên hoặc thụt xuống trang khác.
  6. Chỉ cần gõ 1 biểu thức FITROW duy nhất cho cả vùng ô cần giãn dòng.
  7. Có hai phiên bản ứng dụng của hàm FITROW:
  • Mã viết trong 1 module duy nhất (tốn kém bộ nhớ khi ứng dụng hoạt động).
  • Sử dụng mã trong Classes (tiết kiệm bộ nhớ).

Hướng dẫn sử dụng hàm:

Hàm FITROW có 2 chế độ, là tạo nút nhấn để dùng tay và tự động chạy.
Nếu nhập hàm mà không có nhập thêm bổ trợ fit_Auto() thì tự động chạy.


Hàm FITROW được viết theo phương pháp mới nên cách nhập đối số là gõ hàm như dưới đây:

Hàm cài đặt và bổ trợKiểuChức năng
fit_Padding(Height)SốTăng chiều cao thêm một số
fit_defaultHeight(Height)SốChiều cao mặc định nếu giá trị rỗng, dễ hiểu, nếu co giãn vùng ô A1:C20, mà cả vùng đó rỗng, thì chỉnh về chiều cao mặc định.
fit_HeightOfRowNull(Height)SốĐặt chiều cao mặc định cho cả dòng rỗng (giãn vùng A1:Z20, dòng A2:Z2 rỗng)
fit_AllSheets()Giãn dòng kể cả vùng ở trang tính không hiện hành.
fit_Auto()Bật tự động Fit khi ô tham chiếu thay đổi giá trị
Vì hàm FITROW có thể chạy bất kỳ khi nào gây tốn kém, mất thời gian khi các hàm nhạy như ToDay, Now, Rand, RandBetween, ... nằm cùng trang tính. Nên cần hàm bổ trợ này.
fit_Tables(table, ....)Vùng ôNhập một vùng dữ liệu kiểu bảng để tiết kiệm thời gian giãn dòng
fit_Indexes(cell1,cell2,...)Vùng chứa nhóm văn bảnCăn chỉnh biên bản ở chế độ PrintView, khi giãn dòng, chiều cao trang in có thể cao hơn hoặc thấp hơn, làm cho trang in bị xê dịch, nên cần điều chỉnh để phù hợp.
fit_Scale(scaleWidth,scaleHeight,indentWidth)Đặt tỉ lệ giãn chiều rộng, chiều cao và thụt đầu dòng, khi chiều cao dòng vượt giới hạn

Viết hàm nhanh: =FITROW(A2:F1000)
Viết hàm có cài đặt đối số: =FITROW(A2:F1000,fit_defaultHeight(40),fit_Padding(5))
Cách nhập nhiều vùng cần co giãn dòng:
=FITROW(A1:C9,D2:F3,E5:E6)
Ví dụ: giãn dòng A1 và đối số, gõ =FITROW(A1,fit_Padding(5))
Các hàm với các ký tự đầu là fit_... Chính là các hàm cài đặt và bổ trợ cho hàm chính FITROW
Ví dụ: gõ =FITROW(A1,B4,C5), sẽ co giãn các ô A1, B4, C5, các cài đặt là mặc định


Hàm bỗ trợ fit_Indexes cho hàm FitRow hoạt động như sau:

Hãy xem ảnh minh họa 1 bên dưới, các bạn sẽ thấy lề dưới canh trang mục 4.2 có vùng bảng dữ liệu được tự động chuyển xuống trang mới, lúc này in ra sẽ hoàn hảo. Nhưng nếu mục 4.2 bị dịch lên trên trang trên như hình ảnh thứ 2 thì làm cho trang in khó đọc và không tích hợp để xem.​
Chính vì vậy sự bổ trợ của fit_Indexes sẽ giúp khắc phục điều này, mã sẽ chạy để dịch chuyển vùng đã đặt lên xuống sao cho trang in phù hợp.

Ví dụ nếu mục 4.2 bắt đầu từ A100 và hết bảng dữ liệu Z110 thì nhập fit_Indexes vào hàm FitRow là fit_Indexes(A100:Z110)
Và nhập nhiều vùng fit_Indexes(A100:Z110,A115:Z120)


Ảnh 1 và ảnh 2:

1726811522233-png.304101
1726811745720-png.304102





CÁC HÀM LỆNH TẠO NÚT VÀ BIỂU THỨC NHANH:

HÀMChức năng
=FITROW_AddFX()
Tạo nhanh biểu thức FITROW vào ô
=FITROW_AddFXPrintArea()
Tạo nhanh biểu thức FITROW vùng in vào ô
=FITROW_AddButton()
Tạo nút nhấn để giãn dòng
=FITROW_AddButtonPrintArea()
Tạo nút nhấn để giãn dòng vùng in
=FitRow_Off()
Tắt chế độ tự động giãn dòng
=FitRow_On()
Bật chế độ tự động giãn dòng


Phím tắt giãn dòng: CTRL+SHIFT+ALT+R

Các hàm Bổ trợ:
1. Gõ hàm 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 FITROW_ON: Bật chế độ co giãn dòng tự động.
3. Thủ tục 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 FITROW_Off
Hãy mở lại bằng bước 2 hoặc bước 3.


****Lưu ý:
  1. Code sẽ tạo trang tính ẩn có tên __CELLFIXING__ để giãn dòng.
  2. Khi giãn dòng tự động chế độ Undo và Redo của trang tính sẽ không hoạt động.
  3. Nếu trong trang tính có hàm giãn dòng, khi sử dụng hàm nhạy như RandBetween, ToDay, Now,... và các hàm random, thì không thêm hàm bổ trợ tự động chạy fit_Auto().

***Mã 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.
--------------------------------------------------------------------------------------

Liên hệ Facebook Messenger: Vo Truong Anh Tuan
Liên hệ Zalo: 0384170514
Quét QRCode Zalo:

z4135340916408_08dfdd87080de540fdaecdacb9209bd3.jpg
 

File đính kèm

  • FitRow_(Module)_v2.42.xlsm
    510.9 KB · Đọc: 17
Lần chỉnh sửa cuối:
Giải pháp
*** CẬP NHẬT 2.42: 14/10/2024 ***
Cập nhật mới này sửa một số lỗi trong mã và tăng tốc giãn dòng bằng cách giãn đồng thời các ô giá trị cùng cột
Và thêm các hàm bổ trợ giãn dòng cho Bảng để tiết kiệm hơn trong quá trình giãn dòng, với hàm bổ trợ fit_Tables()

Dự kiến bản cập nhật tiếp theo

Thêm hàm chức năng bổ trợ giãn dòng trước khi in.
Web KT

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

Back
Top Bottom