Tăng tốc độ xác lập độ cao các dòng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Vo Duy Minh

Thành viên hoạt động
Tham gia
21/3/19
Bài viết
113
Được thích
32
Chào các bạn,
Tôi viết code để xác lập độ cao của các dòng trong chuỗi khoảng 10.000 dòng như sau

Sub Fixrows()
Dim Cls As Range
For Each Cls In Range("a1:a10000")
If Cls.Value <> "" Then Cls.RowHeight = 100
End Sub

Tốc độ nói chung cũng chấp nhận được vì số lượng cells cần xác lập độ cao không nhiều.
Tôi muốn thêm Else với điều kiện là khi cell value là "" (Cls.Value = "") thì RowHeight là 20 thì code For ... Next chạy rất chậm vì số lượng cells trống quá nhiều.
Trước đây bạn batman1 có giúp tôi cái tốc độ ẩn hành bằng cách gom chung thay vì For ... next từ row. Nhưng tôi thử áp dụng mà không được.
Rất mong nhận được sự giúp đỡ của các bạn với code này.
Cụ thể
Nếu cells.value <> "" thì rowheight là 100
Ngược lại (cells value = "") thì
rowheight là 20

Rất cám ơn các bạn.
 
Chào các bạn,
Tôi viết code để xác lập độ cao của các dòng trong chuỗi khoảng 10.000 dòng như sau

Sub Fixrows()
Dim Cls As Range
For Each Cls In Range("a1:a10000")
If Cls.Value <> "" Then Cls.RowHeight = 100
End Sub

Tốc độ nói chung cũng chấp nhận được vì số lượng cells cần xác lập độ cao không nhiều.
Tôi muốn thêm Else với điều kiện là khi cell value là "" (Cls.Value = "") thì RowHeight là 20 thì code For ... Next chạy rất chậm vì số lượng cells trống quá nhiều.
Trước đây bạn batman1 có giúp tôi cái tốc độ ẩn hành bằng cách gom chung thay vì For ... next từ row. Nhưng tôi thử áp dụng mà không được.
Rất mong nhận được sự giúp đỡ của các bạn với code này.
Cụ thể
Nếu cells.value <> "" thì rowheight là 100
Ngược lại (cells value = "") thì
rowheight là 20

Rất cám ơn các bạn.
Gửi bạn :
Mã:
Option Explicit

Sub Fixrows()
Dim Cls As Range, H100 As Range, H20 As Range
For Each Cls In Range("a1:a10000")
    If Cls.Value <> "" Then
        If H100 Is Nothing Then
            Set H100 = Cls
        Else
            Set H100 = Union(H100, Cls)
        End If
    Else
         If H20 Is Nothing Then
            Set H20 = Cls
        Else
            Set H20 = Union(H20, Cls)
        End If
    End If
Next
H100.RowHeight = 100
H20.RowHeight = 20
End Sub
 
Upvote 0
Cám ơn bạn Nhattanktnn rất nhiều
Tôi sẽ áp dụng xem kết quả thế nào.
Chắc chắn là tốt hơn code tôi viết nhiều rồi.
 
Upvote 0
Chào các bạn,
Tôi viết code để xác lập độ cao của các dòng trong chuỗi khoảng 10.000 dòng như sau

Sub Fixrows()
Dim Cls As Range
For Each Cls In Range("a1:a10000")
If Cls.Value <> "" Then Cls.RowHeight = 100
End Sub

Tốc độ nói chung cũng chấp nhận được vì số lượng cells cần xác lập độ cao không nhiều.
Tôi muốn thêm Else với điều kiện là khi cell value là "" (Cls.Value = "") thì RowHeight là 20 thì code For ... Next chạy rất chậm vì số lượng cells trống quá nhiều.
Trước đây bạn batman1 có giúp tôi cái tốc độ ẩn hành bằng cách gom chung thay vì For ... next từ row. Nhưng tôi thử áp dụng mà không được.
Rất mong nhận được sự giúp đỡ của các bạn với code này.
Cụ thể
Nếu cells.value <> "" thì rowheight là 100
Ngược lại (cells value = "") thì
rowheight là 20

Rất cám ơn các bạn.
Thử code
Mã:
Sub Fixrows()
  Dim Cls As Range, rng As Range
  Range("a1:a10000").RowHeight = 20
  For Each Cls In Range("a1:a10000")
    If Cls.Value <> "" Then
      If rng Is Nothing Then
        Set rng = Cls
      Else
        Set rng = Union(rng, Cls)
      End If
    End If
  Next
  If Not rng Is Nothing Then rng.RowHeight = 100
End Sub
 
Upvote 0
Thử code
Mã:
Sub Fixrows()
  Dim Cls As Range, rng As Range
  Range("a1:a10000").RowHeight = 20
  For Each Cls In Range("a1:a10000")
    If Cls.Value <> "" Then
      If rng Is Nothing Then
        Set rng = Cls
      Else
        Set rng = Union(rng, Cls)
      End If
    End If
  Next
  If Not rng Is Nothing Then rng.RowHeight = 100
End Sub
Hợp lý quá bác ơi :D
 
Upvote 0
Cám ơn các bạn đã giúp đỡ.
Cả ba mã của ba bạn đều chạy tuyệt với.
Tuy nhiên, mã của bạn Nhattanktnn thì có bất tiện là không thể chỉnh độ cao với số lẻ (như 20.5).
Mã của bạn "giaiphap" thì rất ngắn (cái này thì hay quá), nhưng có bất tiện là nếu cell trống do hàm thì nó không hiểu và cũng mở rộng luôn. Tôi viết thêm cái mã clearcontent cho những cell trống để gọi nó trước khi chạy mã này thì nó chạy rất ngon. Nhưng như thế thì chỉ xài một lần thôi vì cột đó lấy dữ liệu từ chỗ khác.
Về tốc độ thì mã của các bạn đều chạy rất tuyệt vời.

Một lần nữa, xin chân thành cám ơn sự giúp đỡ của các bạn.
 
Upvote 0
mã của bạn Nhattanktnn thì có bất tiện là không thể chỉnh độ cao với số lẻ (như 20.5)
Bạn căn cứ thế nào mà nói như vậy nhỉ?
Mã của bạn "giaiphap" thì rất ngắn (cái này thì hay quá), nhưng có bất tiện là nếu cell trống do hàm thì nó không hiểu và cũng mở rộng luôn
Vấn đề này là do bạn không nói rõ từ đầu
 
Upvote 0
Xin lỗi bạn Nhattanktnn do tôi không nói rõ từ đầu.
Chỉ là do tình cờ tôi gõ có số lẻ thì không được chấp nhận.
Nhưng vấn đề này cũng không lớn vì thật sự số lẻ 19.5 với 20 cũng chẳng bao nhiêu và việc đưa vào tròn số cũng không gây phức tap gì cho vấn đề.
Ngoại trừ cái điểm nhỏ đó (thường cũng không gậy vấn đề gì cả, chỉ do tôi tình cờ ghi nhận thôi), thì code của bạn cũng chạy rất tốt.
Một lần nữa, xin lỗi đã không nói rõ với bạn ngay từ đầu.
Dù sao thì việc đó cũng giúp chúng ta hiểu nhiều hơn về các mã mà bạn và hai bạn "HieuCD", "giaiphap" đưa ra.
Rất cám ơn các bạn.
 
Upvote 0
Xin lỗi bạn Nhattanktnn do tôi không nói rõ từ đầu.
Chỉ là do tình cờ tôi gõ có số lẻ thì không được chấp nhận.
Nhưng vấn đề này cũng không lớn vì thật sự số lẻ 19.5 với 20 cũng chẳng bao nhiêu và việc đưa vào tròn số cũng không gây phức tap gì cho vấn đề.
Ngoại trừ cái điểm nhỏ đó (thường cũng không gậy vấn đề gì cả, chỉ do tôi tình cờ ghi nhận thôi), thì code của bạn cũng chạy rất tốt.
Một lần nữa, xin lỗi đã không nói rõ với bạn ngay từ đầu.
Dù sao thì việc đó cũng giúp chúng ta hiểu nhiều hơn về các mã mà bạn và hai bạn "HieuCD", "giaiphap" đưa ra.
Rất cám ơn các bạn.
Chẵn hay lẻ gì cũng được hết, vấn đề ở bạn sửa lại thành thế nào thôi.
Gửi code mà bạn nói không được lên đây mình xem
 
Upvote 0
Gửi bạn Nhattanktnn
Như bạn yêu cầu, tôi gửi file với mã của bạn.
Nếu như thay 20 bằng số lẻ thì nó báo đỏ ngay.
Thật ra chuyện này cũng chằng quan trọng.
Cái quan trọng là mã của bạn chạy rất tuyệt.
Một lần nữa tôi xin lỗi đã không nói rõ từ đầu.
 

File đính kèm

Upvote 0
Gửi bạn Nhattanktnn
Như bạn yêu cầu, tôi gửi file với mã của bạn.
Nếu như thay 20 bằng số lẻ thì nó báo đỏ ngay.
Thật ra chuyện này cũng chằng quan trọng.
Cái quan trọng là mã của bạn chạy rất tuyệt.
Một lần nữa tôi xin lỗi đã không nói rõ từ đầu.
Hỏi code mới bạn sửa thế nào thì bạn lại gửi ngay cái code tôi viết cho bạn.
Theo như bạn nói, "Nếu như thay 20 bằng số lẻ thì nó báo đỏ ngay" thì tôi nghi ngờ rằng bạn chưa biết sửa code mà vội nhận định là không sử dụng được.
Khả năng lớn là bạn sửa biến H20 thành H20.5
Nếu vậy thì bạn phải đọc lại phần cơ bản này trước:
1637127366828.png
Và sau đó, để sửa code, bạn chỉ cần sửa chỗ này thành số mong muốn của bạn

1637127417451.png
 
Upvote 0
Cám ơn bạn đã hướng dẫn
Tôi cũng nhìn nhận là mình chưa có nhiều kiến thức về viết code, chỉ cố gắng vận dụng vba cho việc của mình đang cần mà thôi.
Tôi sẽ tham khảo hướng dẫn của bạn thêm.
Một lần nữa xin cám ơn bạn đã hổ trợ.
 
Upvote 0
Thớt thử các code với dữ liệu trong file này thử xem thế nào.
 

File đính kèm

Upvote 0
Cám ơn bạn "huuthang_bd".
Công việc của tôi thì chỉ cần mở rộng chiều cao khoảng tối đa 100 dòng trong tổng số trên dưới 5000 dòng nên cả ba code không cho thấy khác biệt lớn về tốc độ xử lý khi tôi thực hiện kiểm tra tốc độ xử lý.
Với file của bạn thì có đến 50% dòng cần mở rộng thì code của bạn "giaiphap" chạy nhanh chóng mặt so với hai code kia (tôi bấm chuột là xong ngay).
Như trước đây bạn "batman1" có cho tôi biết việc dùng vòng lặp với dạng yêu cầu này thì chậm hơn so với gom chung lại (tôi có đề cập trong bài gửi đầu tiên).
Vấn đề là tôi không hiểu sao trong file tôi cần thực hiện thì khi có hàm trả về "trống" thì lệnh cũng mở rộng dòng luôn (xoá lệnh thành trống thì được). Trong file bạn gửi thì hàm trả về "trống" vẫn chạy tốt với mã này.
Tôi sẽ nghiên cứu lại cách viết hàm trả về "trống" để có thể sử dụng với mã này dù rằng hai mã được bạn "Nhattanktnn" và "HieuCD" rất hữu ích cho tôi.
Rất cám ơn bạn.
Nhân đây tôi cũng xin lỗi bạn "giaiphap" khi chưa nghiên cứu kỹ mã bạn đã hỗ trợ tôi nên cứ nghĩ là cell phải hoàn toàn trống thì mã mới xử lý.
 
Upvote 0
Với file của bạn thì có đến 50% dòng cần mở rộng thì code của bạn "giaiphap" chạy nhanh chóng mặt so với hai code kia (tôi bấm chuột là xong ngay)
Code chạy xong nhưng việc có xong không mới là vấn đề.
Vấn đề là tôi không hiểu sao trong file tôi cần thực hiện thì khi có hàm trả về "trống" thì lệnh cũng mở rộng dòng luôn (xoá lệnh thành trống thì được).
Đôi khi nhìn thấy rõ ràng là "trống" nhưng thực ra lại là "mái". Ngoài đời cũng vậy thôi, nhưng trường hợp nhìn thấy tưởng là mái nhưng thực ra lại là trống nhiều hơn :D
 
Upvote 0
Thử cái tà đạo này xem:
PHP:
Sub Height()
Application.ScreenUpdating = False
Range("A1:A10000").RowHeight = 100
With Range("XFD1:XFD10000")
.Value = Range("A1:A10000").Value
.SpecialCells(xlCellTypeBlanks).RowHeight = 20
.Clear
Application.ScreenUpdating = True
End With
End Sub
 
Upvote 0
Cám ơn bạn "bebo021999" đã giúp tôi thêm một code.
Tôi đã thử áp dụng thì thấy code của bạn cũng rất tốt, chạy cũng rất nhanh.

Với bạn "befaint" thì tôi rất muốn xem coi có gì mới, nhưng laptop của tôi chẳng có phím End nên không thể thực hiện được.
Tôi sẽ dùng laptop khác khi có thể để xem kết quả thể náo.
Rất cám ơn hai bạn đã quan tâm đến vấn đề của tôi.
 
Upvote 0
Web KT

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

Back
Top Bottom