Xác định chiều dài của một chuỗi theo đơn vị độ rộng của cột

  • Thread starter Thread starter chibi
  • Ngày gửi Ngày gửi
Liên hệ QC

chibi

Thành viên tích cực
Thành viên danh dự
Tham gia
10/1/07
Bài viết
1,120
Được thích
623
Xin hỏi các bạn.
Độ rộng của cột trong Excel được tính theo đơn vị nào vậy?
Giả sử có một chuỗi "Ví dụ tính độ dài của chuỗi" với font và fontsize cho trước. Bằng cách nào tính được độ dài của chuỗi này theo đơn vị độ rộng của cột?
Xin cảm ơn
 
Theo em thấy, độ rộng của cột có thể tính bằng pixel, 0.1357 đơn vị độ rộng bằng 1 pixel. Nếu bác dùng VBA thì chắc chắn là dùng pixel. Tuy nhiên đo độ rộng một ký tự thì em thua. Không biết bác có quan tâm đến font VNI không chứ Font VNI có mấy ký tự chỉ dấu còn được viết lùi lại nữa (tương tự với Font Unicode tổ hơp).
 
Upvote 0
chibi đã viết:
Xin hỏi các bạn.
Độ rộng của cột trong Excel được tính theo đơn vị nào vậy?
Giả sử có một chuỗi "Ví dụ tính độ dài của chuỗi" với font và fontsize cho trước. Bằng cách nào tính được độ dài của chuỗi này theo đơn vị độ rộng của cột?
Xin cảm ơn
Với mỗi tên font, fontsize thì kích thước và độ rộng khác nhau. Ví dụ "i" phải ngắn hơn "w". Do đó không thể có một quy luật chung cho mọi loại font được. Muốn xác định, ta phải làm thủ công nhiều lần cho 1 loại font với 1 size cho trước, chỉnh cột cho vừa và tìm tỉ lệ độ_rộng_cột/số_ký_tự cho font&size đó. Ví dụ font Arial, size=10 có độ rộng (tương đối) 1 ký tự là 1,12.
Dưới dây là thủ tục viết thẳng trong sheet1, khi bạn nhập chữ vào 1 ô thì độ rộng cột sẽ co giãn vừa với nội dung vừa nhập.
Tùy yêu cầu, bạn chế biến lại theo ý mình.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
sokytu = Len(Target)
Columns(Target.Column).ColumnWidth = sokytu * 1.12
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Sao không là :

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Columns(Target.Column).AutoFit
End Sub

????
Thân!
 
Upvote 0
Mr Okebab đã viết:
Sao không là :

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Columns(Target.Column).AutoFit
End Sub

????
Thân!
Do yêu cầu của chibi là xác định độ rộng theo ô đang nhập.Do đó:
Mã:
 Columns(Target.Column).ColumnWidth = sokytu * 1.12
chỉnh độ rộng cột theo ô đó thôi, bất kể dữ liệu các ô khác dài hay ngắn.
Còn câu lệnh của Mr Okebab là:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Columns(Target.Column).AutoFit
End Sub
chỉnh độ rộng cột theo ô chứa nhiều ký tự nhất trong cột.
Đây chỉ là bài minh họa cho chibi. Chứ thực tế không ai chỉnh cột vậy bao giờ.
 
Upvote 0
phamduylong đã viết:
Với mỗi tên font, fontsize thì kích thước và độ rộng khác nhau. Ví dụ "i" phải ngắn hơn "w". Do đó không thể có một quy luật chung cho mọi loại font được. Muốn xác định, ta phải làm thủ công nhiều lần cho 1 loại font với 1 size cho trước, chỉnh cột cho vừa và tìm tỉ lệ độ_rộng_cột/số_ký_tự cho font&size đó. Ví dụ font Arial, size=10 có độ rộng (tương đối) 1 ký tự là 1,12.
Dưới dây là thủ tục viết thẳng trong sheet1, khi bạn nhập chữ vào 1 ô thì độ rộng cột sẽ co giãn vừa với nội dung vừa nhập.
Tùy yêu cầu, bạn chế biến lại theo ý mình.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
sokytu = Len(Target)
Columns(Target.Column).ColumnWidth = sokytu * 1.12
End Sub
Gởi anh Phạm Duy Long,
Việc gán ép 1 ký tự arial 10 tương đương 1.12 pixcel có phần hơi gượng ép. Liệu có cách nào tốt hơn không? Tính được độ dài lệ thuộc vào font chữ, phụ thuộc vào font size và thậm chí là máy in.
 
Upvote 0
Tại sao ta không copy ký tự đó qua 1 ô khác. Cho ô đó AutoFit. Sau đó tính chiều rộng của ô này sẽ ra ngay được chiều rộng của ký tự, bất kể là Font gì với Size bao nhiêu ???

Mã:
Option Explicit
------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$AA$1" Then
    Application.ScreenUpdating = False
    Target.Copy
    With Range("AA1")
        .PasteSpecial xlPasteAll
        .Columns.AutoFit
        .ClearContents
    End With
    MsgBox Columns("AA:AA").ColumnWidth
    Target.Select
    With Application
        .CutCopyMode = False
        .ScreenUpdating = False
    End With
End If
End Sub


Thân!
 
Upvote 0
OverAC đã viết:
Gởi anh Phạm Duy Long,
Việc gán ép 1 ký tự arial 10 tương đương 1.12 pixcel có phần hơi gượng ép. Liệu có cách nào tốt hơn không? Tính được độ dài lệ thuộc vào font chữ, phụ thuộc vào font size và thậm chí là máy in.
To OverAC,
Thực sự ra vấn đề này đâu cần thiết đến phải như vậy! Vấn đề là xác định độ rộng tương đối của cột, là người dùng "chấp nhận" được rồi. Đây thật sự ra không phải là vấn đề chỉ có chúng ta mới "có ý kiến". Em đọc quyển ADO Programming for DUMMIES" trang 145 nha.

Lê Văn Duyệt
 
Upvote 0
Web KT

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

Back
Top Bottom