PDA

View Full Version : Tự động tinh chỉnh chiều cao dòng so với text trong ô đó!



ducbeohn
19-12-08, 11:40 AM
Hôm nay, mình có một việc rất khó giải quyết. Mình đã tìm hết cả google rùi, cả tiếng anh lẫn tiếng việt (chắc trình độ search hơi kém) mà vẫn không tìm ra cách giải quyết vấn đề này. Bây giờ bạn có một sheet gồm rất nhiều trang phải in (hơn 100 trang), mà phải thay đổi format cho chuẩn. Yêu cầu của sếp mình là thế này, khoảng cách từ text trong ô 1 ô cell đến dòng kẻ trên và dòng kẻ dưới của ô đó phải giống nhau trong tất cả các dòng (tất nhiên các text trong ô cell đó đã căn giữa theo phương đứng rùi). Nếu làm bằng tay thì die luồn vì sheet này có hơn 3000 dòng, chỉnh từng tí một vừa lâu lại còn không chính xác.
Các bạn giúp mình nha.
Mình cảm ơn rất nhiều.

ndu96081631
19-12-08, 11:47 AM
Hôm nay, mình có một việc rất khó giải quyết. Mình đã tìm hết cả google rùi, cả tiếng anh lẫn tiếng việt (chắc trình độ search hơi kém) mà vẫn không tìm ra cách giải quyết vấn đề này. Bây giờ bạn có một sheet gồm rất nhiều trang phải in (hơn 100 trang), mà phải thay đổi format cho chuẩn. Yêu cầu của sếp mình là thế này, khoảng cách từ text trong ô 1 ô cell đến dòng kẻ trên và dòng kẻ dưới của ô đó phải giống nhau trong tất cả các dòng (tất nhiên các text trong ô cell đó đã căn giữa theo phương đứng rùi). Nếu làm bằng tay thì die luồn vì sheet này có hơn 3000 dòng, chỉnh từng tí một vừa lâu lại còn không chính xác.
Các bạn giúp mình nha.
Mình cảm ơn rất nhiều.
Chưa hiểu lắm ??
Nếu bạn đã canh giữa theo chiều dọc rồi thì chỉ việc:
- Click chọn vào tiêu đề dòng của dòng đầu tiên
- Kéo thanh trượt xuống, bấm giữa phím Shift rồi dùng chuột chọn vào tiêu đề dòng của dòng cuối
- Canh độ rộng của dòng 1 lần cho 3000 dòng (dùng chuột chỉnh hoặc vào menu Format\Row\Height)
Có vấn đề gì đâu chứ

xichdragon
19-12-08, 12:27 PM
Bạn Ctr A, đưa con trỏ đến lề bên trái cho đến khi nó hiện ra mũi tên 2 chiều lên xuống rồi nháy đúp
Nó sẽ tự căn lề trên dưới đều nhau cho bạn
Have fun

npv
19-12-08, 12:36 PM
Bạn vào format=>cell trong tab alignment phần vertical chọn center là ok.

ducbeohn
19-12-08, 12:42 PM
Nếu đơn giản thế thì mình đâu cần hỏi. Cái mình hỏi ở đây là: sau khi đã bôi đen hàng, rùi autofit, lúc này cái format của excel không được đẹp lắm vì đường kẻ dưới rất sát với chữ. Mình muốn là đường kẻ dưới nó cách chữ một khoảng cách nào đó (có thể do mình tự đặt ra). Bình thường, mình phải vào ô đó, rùi dùng chuột kéo xuống một khoảng thì nó sẽ đẹp hơn. Nhưng để làm cho rất nhiều dòng thì thật là mệt.

npv
19-12-08, 01:01 PM
Vậy thì vào format=>row=>height. Thích cao thấp bao nhiêu là tuỳ.

salam
19-12-08, 01:05 PM
Nếu đơn giản thế thì mình đâu cần hỏi. Cái mình hỏi ở đây là: sau khi đã bôi đen hàng, rùi autofit, lúc này cái format của excel không được đẹp lắm vì đường kẻ dưới rất sát với chữ. Mình muốn là đường kẻ dưới nó cách chữ một khoảng cách nào đó (có thể do mình tự đặt ra). Bình thường, mình phải vào ô đó, rùi dùng chuột kéo xuống một khoảng thì nó sẽ đẹp hơn. Nhưng để làm cho rất nhiều dòng thì thật là mệt.
Theo mình biết thì trong excel không có chức năng cách trên, dưới như trong word mà chỉ có chức năng căn giữa thôi.

ndu96081631
19-12-08, 01:05 PM
Nếu đơn giản thế thì mình đâu cần hỏi. Cái mình hỏi ở đây là: sau khi đã bôi đen hàng, rùi autofit, lúc này cái format của excel không được đẹp lắm vì đường kẻ dưới rất sát với chữ. Mình muốn là đường kẻ dưới nó cách chữ một khoảng cách nào đó (có thể do mình tự đặt ra). Bình thường, mình phải vào ô đó, rùi dùng chuột kéo xuống một khoảng thì nó sẽ đẹp hơn. Nhưng để làm cho rất nhiều dòng thì thật là mệt.
Không hiểu chổ tôi tô đỏ
Bạn kéo thế nào? Bạn thử làm 1 file với Format như ý mình rồi đưa lên đây xem thử

huuthang_bd
19-12-08, 01:21 PM
Theo mình biết thì trong excel không có chức năng cách trên, dưới như trong word mà chỉ có chức năng căn giữa thôi.
Đây là chức năng căn đều trên dưới:

Bạn vào format=>cell trong tab alignment phần vertical chọn center là ok.
Tôi thấy cách làm của các bạn trong topic này đã đáp ứng được yêu cầu của bạn ducbeohn rồi. Tôi nghĩ là bạn chưa hiểu bản chất chứ ko phải là:

Nếu đơn giản thế thì mình đâu cần hỏi.
Lúc đầu bạn muốn

khoảng cách từ text trong ô 1 ô cell đến dòng kẻ trên và dòng kẻ dưới của ô đó phải giống nhau trong tất cả các dòng
Thì npv đã giúp bạn đây:

Bạn vào format=>cell trong tab alignment phần vertical chọn center là ok.
Rồi bạn lại muốn:

Mình muốn là đường kẻ dưới nó cách chữ một khoảng cách nào đó (có thể do mình tự đặt ra). Bình thường, mình phải vào ô đó, rùi dùng chuột kéo xuống một khoảng thì nó sẽ đẹp hơn.
Thì ndu96081631 đã giúp bạn đây:

Chưa hiểu lắm ??
Nếu bạn đã canh giữa theo chiều dọc rồi thì chỉ việc:
- Click chọn vào tiêu đề dòng của dòng đầu tiên
- Kéo thanh trượt xuống, bấm giữa phím Shift rồi dùng chuột chọn vào tiêu đề dòng của dòng cuối
- Canh độ rộng của dòng 1 lần cho 3000 dòng (dùng chuột chỉnh hoặc vào menu Format\Row\Height)
Có vấn đề gì đâu chứ

ducbeohn
19-12-08, 03:22 PM
Theo mình biết thì trong excel không có chức năng cách trên, dưới như trong word mà chỉ có chức năng căn giữa thôi.
Bạn mới là người hiểu vấn đề của tôi! Trong Word có phần: Paragraph --> Before, After nhung trong excel không có!

Thật ra, trong excel không có chức năng này, thế tôi mới hỏi để nhờ mọi người viết giúp một Macro để có thể tự động làm công việc trên.
Ví dụ thế này:
Chiều cao của hàng = "Chiều cao tự động autofit của hàng đó" + "Khoảng cách từ text trong ô đó đến đường kẻ dưới" + "Khoảng cách từ text trong ô đó đến đường kẻ trên"

"Khoảng cách từ text trong ô đó đến đường kẻ dưới" là một số mình phải nhập.
"Khoảng cách từ text trong ô đó đến đường kẻ trên" là một số mình phải nhập

Khi bạn lập được Macro như thế, bạn sẽ vô cùng dễ dàng chỉnh sửa khoảng cách các hàng nhanh chóng mà không bị mất chữ.

BNTT
19-12-08, 03:48 PM
CÓ CẦN THIẾT PHẢI NHƯ VẬY KHÔNG BẠN? Nói bạn đừng buồn.
Word là Word, mà Excel là Excel. Không thể bắt Excel làm chuyện của Word được!

Nói vậy, nhưng cũng còn một cách, là trước khi in cho sếp coi, bạn copy cái bảng tính đó, dán sang bên Word, thành một cái bảng của Word, rồi khi đó thì tha hồ mà chỉnh Before Paragraph và After Paragraph.

npv
19-12-08, 04:31 PM
Bạn mới là người hiểu vấn đề của tôi! Trong Word có phần: Paragraph --> Before, After nhung trong excel không có!

Thật ra, trong excel không có chức năng này, thế tôi mới hỏi để nhờ mọi người viết giúp một Macro để có thể tự động làm công việc trên.
Ví dụ thế này:
Chiều cao của hàng = "Chiều cao tự động autofit của hàng đó" + "Khoảng cách từ text trong ô đó đến đường kẻ dưới" + "Khoảng cách từ text trong ô đó đến đường kẻ trên"

"Khoảng cách từ text trong ô đó đến đường kẻ dưới" là một số mình phải nhập.
"Khoảng cách từ text trong ô đó đến đường kẻ trên" là một số mình phải nhập

Khi bạn lập được Macro như thế, bạn sẽ vô cùng dễ dàng chỉnh sửa khoảng cách các hàng nhanh chóng mà không bị mất chữ.Theo tôi excel vẫn làm được đấy. Sử dụng cách của anh OverAC chèn thêm dòng trống vào trước mỗi ô. Sử dụng Condition format để định dạng dòng trống này là bạn được kq như ý.

npv
22-12-08, 08:06 AM
Giờ rỗi rỗi ngồi xem lại yêu cầu của bạn ducbeohn, mới thấy như sau: Đầu tiên bạn ducbeohn hỏi:
Yêu cầu của sếp mình là thế này, khoảng cách từ text trong ô 1 ô cell đến dòng kẻ trên và dòng kẻ dưới của ô đó phải giống nhau trong tất cả các dòng (tất nhiên các text trong ô cell đó đã căn giữa theo phương đứng rùi). Nếu làm bằng tay thì die luồn vì sheet này có hơn 3000 dòng Sau đó bạn đó viết

Nếu đơn giản thế thì mình đâu cần hỏi. Cái mình hỏi ở đây là: sau khi đã bôi đen hàng, rùi autofit, lúc này cái format của excel không được đẹp lắm vì đường kẻ dưới rất sát với chữ. Mình muốn là đường kẻ dưới nó cách chữ một khoảng cách nào đó (có thể do mình tự đặt ra). Bình thường, mình phải vào ô đó, rùi dùng chuột kéo xuống một khoảng thì nó sẽ đẹp hơn. Nhưng để làm cho rất nhiều dòng thì thật là mệt. Và:
Chiều cao của hàng = "Chiều cao tự động autofit của hàng đó" + "Khoảng cách từ text trong ô đó đến đường kẻ dưới" + "Khoảng cách từ text trong ô đó đến đường kẻ trên"
Đúng là trong excel không có chức năng after/before paragraph mà chỉ có Top,center,Botton,justify,contributed. Nhưng xin hỏi bạn là khi bạn làm bằng tay bạn căn chỉnh như thế nào vì khi bạn kéo dòng thực chất là bạn đang đặt độ cao của dòng đó mà thôi. Tóm lại mọi thứ mà bạn đang có thể chỉnh bằng tay thì excel có thể làm tự động được.
Thân.

lypt
22-12-08, 09:47 AM
Bạn thử cái này xem có được không?

Sub ChieuCao()
HangDau = 1
HangCuoi = [A65000].End(xlUp).Row
TruocSau = 10
With Rows(HangDau & ":" & HangCuoi)
.VerticalAlignment = xlCenter
.WrapText = True
.EntireRow.AutoFit
.RowHeight = .RowHeight + TruocSau
End With
End Sub

tytao
16-12-10, 08:48 AM
Cái này mình đang rất cần, mình hiểu bạn.
Vì khi ta xem trên cửa sổ Excel thì là đẹp, nhưng khi in ra, dòng kẻ dưới rất sát với text.
Mình cũng đã đọc bên tiếng Anh và họ có viết vài Macro!

Cheer!

hieuxd
10-01-13, 10:45 AM
Việc làm này rất cần thiết. Thông thường mình cũng hay sử dụng 3 thao tác để định dạng cho các ô excel có nhiều dòng text vì sợ dòng chữ bị che khuất khi in ra không đọc được hết nội dung và không cách đều dòng kẻ trên và dưới
1. Chọn định dạng Format\Cells\Alignment\Wrap Text
2. Chọn định dạng Format\Cells\Alignment\Vertical\Center
3. Chọn định dạng Format\Row\Autofit
4. Để nét kẻ không bị sát dòng chữ thì lại phải kéo rộng thêm cho dòng rộng thêm ra
Ví dụ sau khi làm song bước 3 chiều cao dòng là 30 nhưng đến bước 4 thì kéo rộng cho mỗi dòng thêm 5 tức cho thành 35. Chiều cao của dòng ở bước 4 = chiều cao Autofit của dòng + 5

hieuxd
10-01-13, 11:05 AM
Bạn thử cái này xem có được không?

Sub ChieuCao()
HangDau = 1
HangCuoi = [A65000].End(xlUp).Row
TruocSau = 10
With Rows(HangDau & ":" & HangCuoi)
.VerticalAlignment = xlCenter
.WrapText = True
.EntireRow.AutoFit
.RowHeight = .RowHeight + TruocSau
End With
End Sub

Code của Lypt Giải quyết được 3 bước của mình bước 4 thì chưa được Khi thay TruocSau = 10 thành TruocSau = 20 và chạy lại Code thì không thấy chiều cao dòng tăng lên 10 thấy chiều cao dòng trước và sau khi chạy Code không đổi. Rất mong bạn hoàn thiện thêm một bước nữa

ptm0412
10-01-13, 11:07 AM
Ví dụ sau khi làm xong bước 3 chiều cao dòng là 30 nhưng đến bước 4 thì kéo rộng cho mỗi dòng thêm 5 tức cho thành 35. Chiều cao của dòng ở bước 4 = chiều cao Autofit của dòng + 5
Vậy thì bạn đọc bài 14.

hieuxd
10-01-13, 02:05 PM
Vậy thì bạn đọc bài 14.
em có đọc bài 14 và chạy thử Code trên thấy chiều cao dòng không thay đổi chỉ bằng chiều cao dòng Autofit. Hình như biến số Truocsau=10 chưa được cộng thêm (chưa có tác dụng). chiều cao dòng trước và sau khi chạy code trên vẫn chỉ bằng chiều cao Autofit. Về thuật toán ở bài 14 là đúng nhưng minh nghĩ khai báo biên truocsau có lỗi gì đó

ptm0412
10-01-13, 03:08 PM
Tôi cũng đã xem lại. Code chạy lần 1 thì ok. Chạy lần sau thì không thực hiện được như mong muốn.
Lý do là sau khi set Autofit thì sau bất kỳ sự thay đổi nào, Excel cũng Autofit lại như cũ. Thực tế code có chạy, chiều cao có tăng, nhưng anh Bill lôi lại như cũ.

hieuxd
21-01-13, 10:44 AM
Tôi cũng đã xem lại. Code chạy lần 1 thì ok. Chạy lần sau thì không thực hiện được như mong muốn.
Lý do là sau khi set Autofit thì sau bất kỳ sự thay đổi nào, Excel cũng Autofit lại như cũ. Thực tế code có chạy, chiều cao có tăng, nhưng anh Bill lôi lại như cũ.

Cảm ơn sư phụ Phạm Thành Mỹ. Sư phụ rất hiểu vòng lặp For .... Next mong sư phụ tối ưu vòng lặp For .... Next với. Code này chạy được nhưng chậm quá
Nếu anh Bill lôi lại như cũ thì có thể Autofit qua một Sheet trung gian. em thấy không bị lôi lại. Code này chỉnh được chiều cao dòng nhưng với số dòng lớn thì chạy quá chậm. Mong sư phụ cùng mọi người chỉnh giúp code bên trong để chạy nhanh hơn.
Sub RoswHeight()
Application.ScreenUpdating = False
Dim i As Long
Sheets("Chinh04").Select
Range("A16:A345").Select
With Selection
.WrapText = True
End With
Selection.Rows.AutoFit
For i = 16 To 345

Sheet2.Rows(i).RowHeight = Sheet5.Rows(i).RowHeight + 2
Next
Sheets("In 04 A").Select
Range("B18").Select
Application.ScreenUpdating = True
End Sub

File Đính kèm:
http://www.mediafire.com/?844zjx363ca3ss9

nttcntn
04-04-14, 10:27 PM
Mình xin điều chỉnh chút code các bác xem có ổn không nhe, mình đac test thử chạy khá ổn

Sub RowHeight()
Dim i, n, RH As Long
Application.ScreenUpdating = False
n = Selection.Rows.Count
RH = Application.InputBox("Row hight to add! Input here!", "ROW HIGHT ADD", , , , , , 1)
With Selection
.WrapText = True
.Rows.AutoFit
End With
For i = 1 To n
Selection.Rows(i).RowHeight = Selection.Rows(i).RowHeight + RH
Next
Application.ScreenUpdating = True
End Sub

hieuxd
05-04-14, 08:21 AM
Mình xin điều chỉnh chút code các bác xem có ổn không nhe, mình đac test thử chạy khá ổn

Sub RowHeight()
Dim i, n, RH As Long
Application.ScreenUpdating = False
n = Selection.Rows.Count
RH = Application.InputBox("Row hight to add! Input here!", "ROW HIGHT ADD", , , , , , 1)
With Selection
.WrapText = True
.Rows.AutoFit
End With
For i = 1 To n
Selection.Rows(i).RowHeight = Selection.Rows(i).RowHeight + RH
Next
Application.ScreenUpdating = True
End Sub

Code của bạn theo mình thì đã ổn so với mong muốn của mình
Nhìn Code thấy bạn nghiên cứu VBA rất có bài bản