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

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

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.
    • 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.
  6. Vì dùng hàm UDF nên rất tối ưu, tiết kiệm CPU.
  7. Chỉ cần gõ một biểu thức FITROW cho cả vùng cần co giãn.
  8. 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à có nhập thêm bổ trợ fit_Auto() thì hàm nhập tự động chạy, khi giá trị tham chiếu thay đổi.
Nếu không sẽ tạo nút nhấn, để nhấn giãn dòng.


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ạnVì khi giãn dòng, sẽ có sai số độ lệch nhất định nên cần đặt thông số này.
Thông số tỉ lệ chiều rộng và cao quyết định độ chính xác khi giãn dòng.
Cho ô chiều cao vượt giới hạn. Và ô gộp có nhiều cột.
Ví dụ:
Đặt ScaleWidth = 0.0245 hiểu là tăng độ rộng ban đầu 1 * 0.0245 để thực hiện fit.
Đặt ScaleHeight = 0.0145 hiểu là tăng thêm chiều cao sau khi fit là 1 * 0.0145 để đặt cho dòng.

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 ô, nếu đang ở trang tính đã đặt vùng in
=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, nếu đang ở trang tính đã đặt 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().

***Sao chép mã vào dự án của bạn phải bao gồm 1 module + mã trong ThisWorkbook
--------------------------------------------------------------------------------------

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

355273851-8b02c95c-4ae3-4cd2-8d0e-e57c3d97a468.jpg
 

File đính kèm

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.
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:

  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 ô cùng dòng.
  4. Hoạt động cả ở chế độ Xem In Ấn
  5. Thêm một chiều cao nhất định sau khi giản dòng.
  6. 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, [Margin], [defaultHeight], [HeightOfRowNull], [IncludeNoWrap], [OnlySheetVisible], [Title])

Vị tríTham sốKiểuChức năng
1​
TargetVùng cần giãn dòngNhận vùng cần co giãn
2​
MarginKiểu sốTăng chiều cao thêm một số
3​
defaultHeightKiểu sốChiều cao mặc định nếu giá trị rỗng
4​
HeightOfRowNullKiểu sốĐặt chiều cao cho cả dòng rỗng
5​
IncludeNoWrapCó/KhôngCo giãn kể cả ô không WapText
6​
OnlySheetVisibleCó/KhôngChỉ giãn dòng khi Vùng tham chiếu nằm tại Trang hiện hành
7​
TitleChuỗiChuỗ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:

  1. 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.
  2. Nếu có hai hàm có tham chiếu là hai vùng giao nhau có thể xảy ra lỗi.
  3. Nếu trang tính hoặc ô tham chiếu đang khóa, cũng có thể xảy ra lỗi.
  4. 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.
Anh ơi em áp dụng nhưng hàm không hiệu quả với những ô chứa hàm VLookup, Hlookup có cách nào khắc phục không ạ. Em cảm ơn
 
Upvote 0
Khi soi kính lúp trang in xong hiện ra viền định dạng in làm code chậm đi nhiều.
em cho thêm đoạn code vào đầu chạy nuột luôn:
ActiveSheet.DisplayPageBreaks = False
Bài đã được tự động gộp:


Chắc dính trường hợp giống bài #18
bác ơi em hỏi chút. em cũng bị chạy chậm khi chọn vùng in. đoạn code bác chỉ cho thêm đặt vào đoạn nào vậy ạ
 
Upvote 0
Anh ơi em áp dụng nhưng hàm không hiệu quả với những ô chứa hàm VLookup, Hlookup có cách nào khắc phục không ạ. Em cảm ơn
không phải không dùng được đâu mà n sẽ không tự động giãn khi thay đổi tham số bác chọn vd bác bấm nâng +1 số n sẽ không hiểu. nhưng bác ghi trực tiếp lên tham số tiếp theo hàm sẽ hiểu và tự động giãn dòng
 
Upvote 0
Anh ơi em áp dụng nhưng hàm không hiệu quả với những ô chứa hàm VLookup, Hlookup có cách nào khắc phục không ạ. Em cảm ơn
không phải không dùng được đâu mà n sẽ không tự động giãn khi thay đổi tham số bác chọn vd bác bấm nâng +1 số n sẽ không hiểu. nhưng bác ghi trực tiếp lên tham số tiếp theo hàm sẽ hiểu và tự động giãn dòng

Không phải lỗi nha các bạn.
Các ô WrapText tắt, nếu các bạn đặt đối số IncludeNoWrap là true thì chạy bình thường.
Tôi đã xóa bỏ đối số này để thuận tiện, các bạn có thể tải lại tạm thời bản ở trên.

Bản sắp tới sẽ đổi giải thuật Giãn dòng và tận dụng Classes để tiết kiệm bộ nhớ.
Đồng thời thêm nút nhấn để thuận tiện hơn.
 
Upvote 0
Không phải lỗi nha các bạn.
Các ô WrapText tắt, nếu các bạn đặt đối số IncludeNoWrap là true thì chạy bình thường.
Tôi đã xóa bỏ đối số này để thuận tiện, các bạn có thể tải lại tạm thời bản ở trên.

Bản sắp tới sẽ đổi giải thuật Giãn dòng và tận dụng Classes để tiết kiệm bộ nhớ.
Đồng thời thêm nút nhấn để thuận tiện hơn.
1688548419697.png
e dùng thì nó bị ntn e đã gộp B8:L11,B14:L17 nhưng khi giãn n lại chỉ giãn thằng 1 dòng đầu là thằng B8 và thằng B14 có cách nào để cho mấy thằng gộp kia n cũng giãn đều không ạ?? e cảm ơn trên là giải pháp tạm thời của e nhưng khi tới dòng rỗng thì nó sẽ thừa ra mấy đoạn rất chướng mắt1688548462925.png
 
Upvote 0
@jerryhg Bạn gộp đến dòng 12 hoặc chỉnh chiều cao dòng 12.
Chia đều chiều cao có ở phiên bản cũ, phiên bản mới tôi đã đổi giải thuật giãn dòng. Có thời gian tôi sẽ cập nhật lại
 
Lần chỉnh sửa cuối:
Upvote 0
***** SIÊU CẬP NHẬT - v2.2 *****
  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ô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 FITROW - TỰ ĐỘNG GIÃN DÒNG

Chức năng ưu việt:
  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.

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

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
ff_Padding(Height)SốTăng chiều cao thêm một số
ff_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.
ff_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)
ff_AllSheets()Giãn dòng kể cả vùng ở trang tính không hiện hành.
ff_AutoFit()Bật tự động Fit khi ô tham chiếu thay đổi giá trị
ff_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.
ff_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
Ví dụ: giãn dòng A1 và đối số, gõ =FITROW(A1,ff_Padding(5))
Các hàm với các ký tự đầu là ff_... 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

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


Viết hàm nhanh: =FITROW(A2:F1000)
Viết hàm có cài đặt đối số: =FITROW(A2:F1000,ff_defaultHeight(40),ff_Padding(5))
Cách nhập nhiều vùng cần co giãn dòng:

=FITROW(A1:C9,D2:F3,E5:E6)
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, không nên sử dụng hàm RandBetween, và các hàm random.

***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.
e cảm ơn bác nhé
 
Upvote 0
Bác cho e hỏi chút với, e đang dùng bản V1 của bác, có cách nào để khi mở file hàm S_FitRow không tự động chạy không vậy, mỗi lần mở file ngồi đợi hơi sốt ruột vì file của e có nhiều sheet
 
Upvote 0
Các bạn đã biết bỗ trợ ff_Indexes cho hàm FitRow hoạt động như thế nào hay chưa?

ff_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.

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 ff_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 ff_Indexes vào hàm FitRow là ff_Indexes(A100:Z110)
Và nhập nhiều vùng ff_Indexes(A100:Z110,A115:Z120)
Ảnh 1 và ảnh 2:

1726811522233.png1726811745720.png
 
Lần chỉnh sửa cuối:
Upvote 0
*** 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.
 
Lần chỉnh sửa cuối:
Upvote 0
Giải pháp
Web KT

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

Back
Top Bottom