Đếm số dòng hiển thị trong 1 ô

Liên hệ QC

Phuocam

Thành viên mới
Tham gia
16/5/13
Bài viết
4,707
Được thích
7,706
Chào các bạn.

Mình muốn đếm số dòng hiển thị trong một ô bằng VBA, như đếm số dòng trong ô B2, kết quả là 6. Số dòng trong ô B3, kết quả là 9

Mong các bạn giúp đỡ.

Cám ơn các bạn.
 

File đính kèm

  • 4Dong.xlsm
    9.1 KB · Đọc: 34
Lần chỉnh sửa cuối:
Chào các bạn.

Mình muốn đếm số dòng hiển thị trong một ô bằng VBA, như đếm số dòng trong ô B2, kết quả là 6. Số dòng trong ô B3, kết quả là 9

Mong các bạn giúp đỡ.

Cám ơn các bạn.
Chào các bạn.

Mình muốn đếm số dòng hiển thị trong một ô bằng VBA, như đếm số dòng trong ô B2, kết quả là 6. Số dòng trong ô B3, kết quả là 9

Mong các bạn giúp đỡ.

Cám ơn các bạn.
Nếu dữ liệu với cùng 1 font và size thì nó sẽ ra kết quả chính xác hơn.
 
Upvote 0
đếm số dòng hiển thị trong một ô bằng VBA
Oh, lúc sáng là chỉnh để số dòng trong 1 cell bằng số dòng cho trước mà. :)
Mình định nêu bài này chỉ cần xác định được số dòng trong 1 cell là giải quyết được.
Giải thuật đại khái như này:
- Merge = False -> xác định row height: h1
- Merge = True -> Xác định row height: h2
=> Số dòng hiện tại n_row = h2/ h1
- Chỉnh row.font.size = tăng/ giảm và quay lại xác định h1', h2' và n_row'.
So sánh n_row' với số dòng cần chỉnh --> Thỏa mãn.
Lưu ý: Chỉnh font.size của cả row.
 
Upvote 0
Oh, lúc sáng là chỉnh để số dòng trong 1 cell bằng số dòng cho trước mà. :)
Mình định nêu bài này chỉ cần xác định được số dòng trong 1 cell là giải quyết được.
Giải thuật đại khái như này:
- Merge = False -> xác định row height: h1
- Merge = True -> Xác định row height: h2
=> Số dòng hiện tại n_row = h2/ h1
- Chỉnh row.font.size = tăng/ giảm và quay lại xác định h1', h2' và n_row'.
So sánh n_row' với số dòng cần chỉnh --> Thỏa mãn.
Lưu ý: Chỉnh font.size của cả row.
Mình giảm yêu cầu xuống đếm số dòng trong 1 ô. Phần chỉnh dòng mình tự mò tiếp, he he...

Chỉ cần = SoDong(B2) có kết quả bằng 6 là đạt yêu cầu.
 
Upvote 0
Ở diễn đàn này có khoảng 2 hay 3 người chuyên vè mẫu mã phông và kích thước ô.
Bạn cứ tìm theo bài của mấy người ấy sẽ ra.

(nếu tôi dự đoán không lầm thì từ giờ đến tối một trong những người ấy sẽ vào giúp bạn)
 
Upvote 0
Nếu bác có khả năng tận dụng API thì keyword để giải bài này: WinApi Get Font Size

Cách khác sử dụng AutoFit: Lấy chiều cao của ô chứa chuỗi chia cho chiều cao AutoFit Row 1 ký tự

Cách khác sử dụng AutoSize của Label trong UserForm:

Tạo 2 label: Label1 có caption chứa 1 ký tự , Label2 chứa giá trị ô cần đếm.
Đặt các thuộc tính Font cho cả hai label là thuộc tính của ô. Đặt độ rộng của Label2 = độ rộng Ô.
Cuối cùng lấy chiều cao label2 chia cho chiều cao label1. Cần thêm tham số sai lệch để xử lý sai lệch nếu có.

Để viết thành hàm UDF thì bác có thể tham khảo phần API bài viết Hàm mảng động của tôi.
------------------------------------------

Cái này đếm cho vui thôi. Ứng dụng thực tế cho in ấn là hỏng.

Khi Chỉnh độ rộng cột thì các từ phía sau cũng sẽ dịch chuyển. Vì vậy cần lấy độ rộng của từng từ cộng lại nếu lớn hơn độ rộng cột thì chuyển xuống cộng dồn.

---------------------------------------------
dem_dong.gif


---------------------------------------------
Lỗi sẽ mắc phải:

Untitled.png
 
Upvote 0
Mình giảm yêu cầu xuống đếm số dòng trong 1 ô. Phần chỉnh dòng mình tự mò tiếp, he he...

Chỉ cần = SoDong(B2) có kết quả bằng 6 là đạt yêu cầu.
Anh phát triển theo ý tưởng sau thử nhé.

1587796324952.png

Mã:
Public Function SoDong(cll As Range, ChieuCao As Integer) As Integer
    Application.Volatile
    SoDong = cll.Height / ChieuCao
End Function
 
Upvote 0
Cám ơn các bạn đã giúp đỡ.

_)(#;
 
Upvote 0
Upvote 0
Công thức đếm dòng bằng cách tính LEN chỉ áp dụng được cho loại phông có độ rộng đồng nhất (monospaced/fixed-pitch/non-proportional)
Điển hình là Courier.
Các loại phông như Arial, Times New Roman chúng đâu có đồng bộ đâu. 100 dấu cách đâu có chiếm chỗ bằng 100 ký tự W.
 
Upvote 0
Web KT

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

Back
Top Bottom