Giúp code chỉnh độ rộng dòng theo ký tự trong ô

Liên hệ QC

minhtuan55

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
23/3/16
Bài viết
705
Được thích
52
Chào cả nhà GPE !
Em cần 1 đoạn code để chỉnh độ rộng dòng theo tổng ký tự trong ô
Ví dụ vùng cần chỉnh độ rộng: B6:B100
- Nếu ô đó có tổng ký tự >= 15 thì độ rộng 30 Pixel
- Còn tất cả trường hợp còn lại ( tổng ký tự < 15, ô trống, ô báo lỗi NA, Lồi NS....) thì độ rộng 15 Pixel

Mục đích làm: Em thường xuyên in báo cáo, do các tên hàng nó dài nên em muốn nó tự động xuống dòng đúng Chính xác do em quy định

Em đã tự viết code sau mà nó báo lỗi chẳng biết sao
Mã:
 Sub GPE()
Dim Cll As Range
For Each Cll In Range("B6:B25").Value
    If Len(Cll) >= 10 Then
       Cll.RowHeight = 14
    Else
       Cll.RowHeight = 30
    End If
    
Next Cll
End Sub

Xin chân thành cảm ơn !
 

File đính kèm

  • do rong hang.xls
    22.5 KB · Đọc: 37
Chào cả nhà GPE !
Em cần 1 đoạn code để chỉnh độ rộng dòng theo tổng ký tự trong ô
Ví dụ vùng cần chỉnh độ rộng: B6:B100
- Nếu ô đó có tổng ký tự >= 15 thì độ rộng 30 Pixel
- Còn tất cả trường hợp còn lại ( tổng ký tự < 15, ô trống, ô báo lỗi NA, Lồi NS....) thì độ rộng 15 Pixel

Mục đích làm: Em thường xuyên in báo cáo, do các tên hàng nó dài nên em muốn nó tự động xuống dòng đúng Chính xác do em quy định

Em đã tự viết code sau mà nó báo lỗi chẳng biết sao
Mã:
 Sub GPE()
Dim Cll As Range
For Each Cll In Range("B6:B25").Value
    If Len(Cll) >= 10 Then
       Cll.RowHeight = 14
    Else
       Cll.RowHeight = 30
    End If
   
Next Cll
End Sub

Xin chân thành cảm ơn !
Bạn thử nhé!
Mã:
Sub GPE()
    Dim i As Integer
    
    For i = 6 To 25
        If WorksheetFunction.IsError(Cells(i, 2).Value) = True Then
            Rows(i).RowHeight = 15
        ElseIf Len(Cells(i, 2).Value) >= 15 Then
            Rows(i).RowHeight = 30
        Else
            Rows(i).RowHeight = 15
        End If
    Next
End Sub
 
Upvote 0
Chào cả nhà GPE !
Em cần 1 đoạn code để chỉnh độ rộng dòng theo tổng ký tự trong ô
Ví dụ vùng cần chỉnh độ rộng: B6:B100
- Nếu ô đó có tổng ký tự >= 15 thì độ rộng 30 Pixel
- Còn tất cả trường hợp còn lại ( tổng ký tự < 15, ô trống, ô báo lỗi NA, Lồi NS....) thì độ rộng 15 Pixel

Mục đích làm: Em thường xuyên in báo cáo, do các tên hàng nó dài nên em muốn nó tự động xuống dòng đúng Chính xác do em quy định

Em đã tự viết code sau mà nó báo lỗi chẳng biết sao
Mã:
 Sub GPE()
Dim Cll As Range
For Each Cll In Range("B6:B25").Value
    If Len(Cll) >= 10 Then
       Cll.RowHeight = 14
    Else
       Cll.RowHeight = 30
    End If
   
Next Cll
End Sub

Xin chân thành cảm ơn !
Bạn thử:
PHP:
Sub abc()
    Dim Rng As Range, Cll As Range
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    With Sheets(1)
        Set Rng = .Range("b6", .Range("b" & Rows.Count).End(xlUp)).SpecialCells(2)
    End With
    For Each Cll In Rng
        If Len(Cll.Value) >= 10 Then
            Cll.EntireRow.RowHeight = 14
        Else
            Cll.EntireRow.RowHeight = 30
        End If
    Next Cll
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Chào cả nhà GPE !
Em cần 1 đoạn code để chỉnh độ rộng dòng theo tổng ký tự trong ô
Ví dụ vùng cần chỉnh độ rộng: B6:B100
- Nếu ô đó có tổng ký tự >= 15 thì độ rộng 30 Pixel
- Còn tất cả trường hợp còn lại ( tổng ký tự < 15, ô trống, ô báo lỗi NA, Lồi NS....) thì độ rộng 15 Pixel

Mục đích làm: Em thường xuyên in báo cáo, do các tên hàng nó dài nên em muốn nó tự động xuống dòng đúng Chính xác do em quy định

Em đã tự viết code sau mà nó báo lỗi chẳng biết sao
Mã:
 Sub GPE()
Dim Cll As Range
For Each Cll In Range("B6:B25").Value
    If Len(Cll) >= 10 Then
       Cll.RowHeight = 14
    Else
       Cll.RowHeight = 30
    End If
   
Next Cll
End Sub

Xin chân thành cảm ơn !
1/ Chiều cao dòng chẳng liên quan gì đến chuyện "tự động xuống dòng..."
2/ For Each Cll In Range("B6:B25").Value <--- Bỏ .Value
3/ Những ô bị lỗi sẽ gây lỗi cho Len(Cll)
Chuỗi >=10 thì cao 14 (ngược lại chỉ 1 vài ký tự thì cao 30)
Cuối cùng chẳng hiểu bạn muốn làm gì.
Thà bạn nói rõ mục đích muốn có, mọi người sẽ đưa ra nhiều lựa chọn cho bạn.
Tự bạn "nghĩ ra" cái con đường "ngoằn ngoèo lắt léo" rồi hỏi làm sao dọn dẹp sạch sẽ chướng ngại.
 
Upvote 0
Chào cả nhà GPE !


Mục đích làm: Em thường xuyên in báo cáo, do các tên hàng nó dài nên em muốn nó tự động xuống dòng đúng Chính xác do em quy định
Cái này đâu có gộp ô đâu mà cần phải định chiều cao cố định (14 hoặc 30). Để chữ vừa khít ô chỉ cần AutoFit Row Height là được rồi
 
Upvote 0
Cái này đâu có gộp ô đâu mà cần phải định chiều cao cố định (14 hoặc 30). Để chữ vừa khít ô chỉ cần AutoFit Row Height là được rồi
Chủ thớt yêu cầu chỉnh độ rộng của dòng và nói cái code bị lỗi nên không cần quan tâm tới cái code (có row height) nữa.
 
Upvote 0
Việc chỉnh kích thước của dòng/ cột về đơn vị pixel thì cũng còn xem cái vụ đơn vị tính...

"On a worksheet, you can specify a column width of 0 (zero) to 255. This value represents the number of characters that can be displayed in a cell that is formatted with the standard font. The default column width is 8.43 characters. If a column has a width of 0 (zero), the column is hidden.

You can specify a row height of 0 (zero) to 409. This value represents the height measurement in points (1 point equals approximately 1/72 inch or 0.035 cm). The default row height is 12.75 points (approximately 1/6 inch or 0.4 cm). If a row has a height of 0 (zero), the row is hidden."
------
Link: https://support.office.com/en-us/ar...w-height-72f5e3cc-994d-43e8-ae58-9774a0905f46

Unit of row height is point: 1 point = 1/72 inch = (1/72) x 96 PPI (giả thiết màn hình có độ phân giải 96 pixel per inch) = 4/3 pixel
Unit of column width: 1 column unit width = 7 + 5 pixel | n column unit width = 7n + 5 pixel (cái này thì không rõ).

------
https://social.msdn.microsoft.com/F...-setting-column-width-in-pixel?forum=exceldev


 
Lần chỉnh sửa cuối:
Upvote 0
1/ Chiều cao dòng chẳng liên quan gì đến chuyện "tự động xuống dòng..."
2/ For Each Cll In Range("B6:B25").Value <--- Bỏ .Value
3/ Những ô bị lỗi sẽ gây lỗi cho Len(Cll)
Chuỗi >=10 thì cao 14 (ngược lại chỉ 1 vài ký tự thì cao 30)
Cuối cùng chẳng hiểu bạn muốn làm gì.
Thà bạn nói rõ mục đích muốn có, mọi người sẽ đưa ra nhiều lựa chọn cho bạn.
Tự bạn "nghĩ ra" cái con đường "ngoằn ngoèo lắt léo" rồi hỏi làm sao dọn dẹp sạch sẽ chướng ngại.

Dạ. E nói 1 cách ngắn gọn. Ô nào có tổng ký tự >=15 thì dòng đó có chiều cao là 30 Pixel, còn Tất cả trường hợp còn lại thì 15 Pixel. Còn mục đích thì em áp dụng cho vấn đề in ấn. em có thử định dạng Wrap text rồi như chưa ưng ý lắm
 
Upvote 0
Hiện tại cty em cũng cần phải căn chỉnh trang giấy, nếu lặp theo công thức của bạn HieuCD, và mình muốn thêm ví dụ như là nếu ký tự ô đó là từ 1~88 thì rowheight=15,89~188=30,189~260=45,261~334=60 thì phải thêm code thế nào ah và nếu 1 file excel có nhiều sheet mình muốn chạy hết tất cả sheet trong file đó thì phải làm thế nào ah. Xin thỉnh giáo cao nhân
#14
HieuCD đã viết:
Mã:
Sub GPE()
Dim Cll As Range
For Each Cll In Range("B6:B25")
If Len(CStr(Cll)) >= 15 Then Cll.RowHeight = 30 Else Cll.RowHeight = 15
Next Cll
End Sub
 

File đính kèm

  • File Test.xls
    47 KB · Đọc: 13
Upvote 0
Hiện tại cty em cũng cần phải căn chỉnh trang giấy, nếu lặp theo công thức của bạn HieuCD, và mình muốn thêm ví dụ như là nếu ký tự ô đó là từ 1~88 thì rowheight=15,89~188=30,189~260=45,261~334=60 thì phải thêm code thế nào ah và nếu 1 file excel có nhiều sheet mình muốn chạy hết tất cả sheet trong file đó thì phải làm thế nào ah. Xin thỉnh giáo cao nhân
#14
HieuCD đã viết:
Mã:
Sub GPE()
Dim Cll As Range
For Each Cll In Range("B6:B25")
If Len(CStr(Cll)) >= 15 Then Cll.RowHeight = 30 Else Cll.RowHeight = 15
Next Cll
End Sub
Mã:
Sub GPE()
  Dim Sh As Worksheet, Cll As Range, StrLen As Double
  For Each Sh In Sheets
    For Each Cll In Sh.Range("C1", Sh.Range("C65500").End(xlUp))
      StrLen = Len(Cll.Value)
      Select Case StrLen
        Case 0 To 88:     Cll.RowHeight = 15
        Case 89 To 188:   Cll.RowHeight = 30
        Case 189 To 260:  Cll.RowHeight = 45
        Case 261 To 334:  Cll.RowHeight = 60
      End Select
    Next Cll
  Next Sh
End Sub
 
Upvote 0
Mã:
Sub GPE()
  Dim Sh As Worksheet, Cll As Range, StrLen As Double
  For Each Sh In Sheets
    For Each Cll In Sh.Range("C1", Sh.Range("C65500").End(xlUp))
      StrLen = Len(Cll.Value)
      Select Case StrLen
        Case 0 To 88:     Cll.RowHeight = 15
        Case 89 To 188:   Cll.RowHeight = 30
        Case 189 To 260:  Cll.RowHeight = 45
        Case 261 To 334:  Cll.RowHeight = 60
      End Select
    Next Cll
  Next Sh
End Sub
Code có vẻ ổn, nhưng có vấn đề là chữ và số thì khi mình cố định bằng công thức len có vẻ nó bị sai lệch khi ô đó có thể hiện chữ số và ký tự đặc biệt khi view nó sẽ không bị ẩn dòng , Bác có hàm nào để thay thế hàm len không ah
 
Upvote 0
Code có vẻ ổn, nhưng có vấn đề là chữ và số thì khi mình cố định bằng công thức len có vẻ nó bị sai lệch khi ô đó có thể hiện chữ số và ký tự đặc biệt khi view nó sẽ không bị ẩn dòng , Bác có hàm nào để thay thế hàm len không ah
Gởi file thật lên mới tính dùng cách nào
 
Upvote 0
Gởi file thật lên mới tính dùng cách nào
Bác xem giúp mình những dòng highlight màu vàng nhé, và bác xem giúp e nếu dòng STT 67 nếu cột B chữ bị cho xuống dòng, những vì cột C dòng đó không lớn 88 ký tự sẽ bị chuyển về dòng đó độ rộng 15 và cột B sẽ bị mất chữ
 

File đính kèm

  • Test 2.xls
    76 KB · Đọc: 13
Upvote 0
Web KT
Back
Top Bottom