Ẩn hiện dòng trống bằng VBA trong excel

Có ai biết code làm ẩn hiện dòng trống trong excel bằng VBA không giúp em với. Em lập trình ứng dụng kế toán nhưng phải để lại dòng trống. Khi in ra sẽ có dòng trống lên em muốn dòng đó sẽ ẩn đi sau khi chạy bằng VBA!
 
Xóa dòng & ẩn dòng trống câu lệnh sẽ na ná nhau

Có ai biết code làm ẩn hiện dòng trống trong excel bằng VBA không giúp em với. Em lập trình ứng dụng kế toán nhưng phải để lại dòng trống. Khi in ra sẽ có dòng trống lên em muốn dòng đó sẽ ẩn đi sau khi chạy bằng VBA!
Bạn tham khảo các macro để xóa dòng trống tại: http://webketoan.vn/forum/showthread.php?t=48089
Sau đó chỉ việc thay dòng lệnh xóa dòng bằng dòng lệnh ẩn dòng;
Còn thế nào là nội dung lệnh ẩn dòng nếu chưa rành, bạn có thể nhờ bộ thu macro giúp sức;
Nếu nó không giúp được cho bạn vì lý do gì đó, bạn hãy 'Kêu lên' nha!
 
ẩn dòng trống

bạn dùng lệnh vba sau đây nhé:
for i =1 to 5' có thể thay đổi 5 bằng bao nhiêu tùy bạn
if sheets("sheet1").Range("a1:c5").Cells(i, 1)="" then
sheets("sheet1").Range("a1:c5").Cells(i, 1).EntireRow.Hidden = True
end if
next i
'chúc bạn thành công
 
Ðề: ẩn dòng trống

bạn dùng lệnh vba sau đây nhé:
for i =1 to 5' có thể thay đổi 5 bằng bao nhiêu tùy bạn
if sheets("sheet1").Range("a1:c5").Cells(i, 1)="" then
sheets("sheet1").Range("a1:c5").Cells(i, 1).EntireRow.Hidden = True
end if
next i
'chúc bạn thành công
Cái này giải quyết được ý của mình nhưng chưa ổn ở chỗ nếu vùng cần ẩn nhiều dòng quá (khoảng vài nghìn dòng thì vòng for chạy hơi lâu, nó cứ ẩn từng dòng một.
Bài toán của mình là cũng ẩn dòng nhưng biết trước số dòng này rồi (ở đoạn code trên là 5) nhưng số dòng này lớn, bôi đen bằng chuột mất thời gian cuộn nên mình muốn truyền tham số dòng này vào thuộc tính Range hoặc Cell chứ không dùng vòng lặp for nhưng chưa biết cách làm VBA. Cao thủ nào biết VBA chỉ giáo giúp với? Xin cám ơn.
 
Ðề: Ẩn hiện dòng trống bằng VBA trong excel

Macro của bạn cần có thể là vầy:

PHP:
Sub Macro2()
 Columns("A:A").Select
 Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True    
End Sub

Chú í câu lệnh Columns("A:A").Select; Nếu cần thì chỉnh lại theo file của bạn.

Chúc vui nhân dịp năm mới!

Macro của bạn cần có thể là vầy:

Mã:
Sub Macro2()
 Columns("A:A").Select
 Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True    
End Sub

Chú í câu lệnh Columns("A:A").Select; Nếu cần thì chỉnh lại theo file của bạn.

Chúc vui nhân dịp năm mới!

Nhờ SMOD/MOD xóa giúp bài trên & rất cảm ơn!

Macro của bạn cần có thể là vầy:

Mã:
Option Explicit
[B]Sub Macro2()[/B]
 Columns("A:A").Select
 Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
[B]End Sub[/B]


Chú í câu lệnh Columns("A:A").Select; Nếu cần thì chỉnh lại theo file của bạn.

Chúc vui nhân dịp năm mới!



Chú í câu lệnh Columns("A:A").Select; Nếu cần thì chỉnh lại theo file của bạn.

Chúc vui nhân dịp năm mới!

Sao nút "Sửa bài" không làm việc vậy các MOD/SMOD?
 
Sửa lần cuối:
Ðề: Ẩn hiện dòng trống bằng VBA trong excel

Hình như macro bạn SA_DQ đưa ra bị lỗi gì đó không chạy được. Mình thử làm rồi nhưng không được. File mẫu mình gửi làm ví dụ nhé. Vì mình không biết được số người sẽ là bao nhiêu nhưng mình dự kiến tối đa không quá 20 nên để sẵn 20 dòng để sẵn đấy (thực tế số này lên tới vài chục nghìn). Do khi số người không đủ dòng mà phải ẩn đi để lấy phần Người lập biểu / Lãnh đạo và một số nội dung soạn sẵn ở dưới... nên phải ẩn các dòng trống từ 8 đến 21. Mình đọc tài liệu thì thấy có Range().Cells(8:21).entr....hidden gì gì đó là làm được việc ẩn nhưng họ lại chỉ hướng dẫn truyền tham số dòng phía sau: Cells("B8:B"&i) trong đó i là số dòng cuối. Tuy nhiên mình áp dụng truyền tham số i để làm dòng bắt đầu ẩn là Cells("B"&i&":B21") thì không được và báo lỗi.
SA_DQ biết thì hướng dẫn mình luôn nhé?
 
Ðề: Ẩn hiện dòng trống bằng VBA trong excel

Mình gửi thêm file đính kèm do lúc nãy quên không gửi.
 

Đính kèm

Ðề: Ẩn hiện dòng trống bằng VBA trong excel

(1) Hình như macro bạn SA_DQ đưa ra bị lỗi gì đó không chạy được. Mình thử làm rồi nhưng không được.

(..) File mẫu mình gửi làm ví dụ nhé. Vì mình không biết được số người sẽ là bao nhiêu nhưng mình dự kiến tối đa không quá 20 nên để sẵn 20 dòng để sẵn đấy (thực tế số này lên tới vài chục nghìn). Do khi số người không đủ dòng mà phải ẩn đi để lấy phần Người lập biểu / Lãnh đạo và một số nội dung soạn sẵn ở dưới... nên phải ẩn các dòng trống từ 8 đến 21.

(2) Mình đọc tài liệu thì thấy có Range().Cells(8:21).entr....hidden gì gì đó là làm được việc ẩn nhưng họ lại chỉ hướng dẫn truyền tham số dòng phía sau: Cells("B8:B"&i) trong đó i là số dòng cuối. Tuy nhiên mình áp dụng truyền tham số i để làm dòng bắt đầu ẩn là Cells("B"&i&":B21") thì không được và báo lỗi.

SA_DQ biết thì hướng dẫn mình luôn nhé?

(1) Bạn chép macro từ diễn đàn vô CS VBA, theo mình có lỗi như sau:
Tự nhiên các chức năng {code ]...[/code] hay [php ]. . .[/php] tạo trong dòng lệnh vài khoảng trắng mới;
Như vậy câu lệnh biến thành 2 mệnh đề vô nghĩa với VBA & nó báo lỗi!
(2) Bạn tham khảo cách viết trực tiếp như trong file của mình; Cách bạn học viết kể ra không sai; Nếu cần mình & bạn sẽ thảo luận tiếp sau này;

(3) Khuyến mãi thêm bạn macro hiện dòng bị ẩn; Hãy xem thử, thích thì xài & nhớ cảm ơn nha
 

Đính kèm

Ðề: Ẩn hiện dòng trống bằng VBA trong excel

Quá tuyệt vời ngoài cả sự mong đợi bác SA_QD à. E cũng đã mày mò làm được nhưng lệnh hơi dài chứ không ngắn gọn, xúc tích như của bác. Bác giải thích rõ thêm về câu lệnh giúp e được không?
 
Ðề: Ẩn hiện dòng trống bằng VBA trong excel

Thắc mắc thêm chút nữa với bác SA_DQ: 1. Sao file của bác có đuôi xls mà vẫn chạy được macro nhỉ (em toàn phải lưu thành đuôi xlsm mới chạy được) 2. Với trường hợp cột tên không có gì thì lệnh của bác chạy đúng ý em đưa ra, nhưng khi những dòng cần ẩn để tên là "" và điểm là 0 hết thì không ổn bác ạ. Vì em để công thức nếu nguồn không có tên thì cột tên đó là "" và cột điểm là 0.
 
Ðề: Ẩn hiện dòng trống bằng VBA trong excel

Gửi lại bác SA_DQ trường hợp của em, khi cột tên để ký tự "" thì không chạy được. Bác bớt chút thời gian giúp e với.
 

Đính kèm

Ðề: Sẵn lòng thôi

Quá tuyệt vời ngoài cả sự mong đợi bác SA_QD à. E cũng đã mày mò làm được nhưng lệnh hơi dài chứ không ngắn gọn, xúc tích như của bác. Bác giải thích rõ thêm về câu lệnh giúp e được không?
PHP:
Sub HiddRows()
 Range([B1].End(xlDown).Offset(1), [c2].End(xlDown).Offset(, -1)).Select
 Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub
Mã:
Sub UnhiddenRows()
 Sheet1.UsedRange.EntireRow.Hidden = False
End Sub

Mã:
[B1].End(xlDown).Offset(1)
Là ô trống đầu tiên liền kề với ô cuối cột chứa dữ liệu;
Mã:
 [c2].End(xlDown).Offset(, -1))
Là ô bên trái liền kề với ô cuối của cột [C] chứa dữ liệu

Toàn câu lệnh là ta ra lệnh chọn vùng thuộc cột bắt đầu từ dòng không dữ liệu của cột đến dòng không dữ liệu của cột [C]

Câu lệnh sau là vùng được chọn này sẽ ẩn đi nếu ô nào đó trong vùng không chứa dữ liệu.

;

Còn macro khuyến mãi: Hiện (Không ẩn) hết thẩy các dòng đã sử dụng.
 
Ðề: Sẵn lòng thôi

PHP:
Sub HiddRows()
 Range([B1].End(xlDown).Offset(1), [c2].End(xlDown).Offset(, -1)).Select
 Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub
Mã:
Sub UnhiddenRows()
 Sheet1.UsedRange.EntireRow.Hidden = False
End Sub

Mã:
[B1].End(xlDown).Offset(1)
Là ô trống đầu tiên liền kề với ô cuối cột chứa dữ liệu;
Mã:
 [c2].End(xlDown).Offset(, -1))
Là ô bên trái liền kề với ô cuối của cột [C] chứa dữ liệu

Toàn câu lệnh là ta ra lệnh chọn vùng thuộc cột bắt đầu từ dòng không dữ liệu của cột đến dòng không dữ liệu của cột [C]

Câu lệnh sau là vùng được chọn này sẽ ẩn đi nếu ô nào đó trong vùng không chứa dữ liệu.

;

Còn macro khuyến mãi: Hiện (Không ẩn) hết thẩy các dòng đã sử dụng.

Cám ơn bác SA_DQ, đúng là gặp cây đa cây đề như bác học hỏi được nhiều. Bác xem giúp em vụ tên là ký tự trắng chứ không phải là không nhập gì xem tại sao lệnh của bác không áp dụng được giúp e với nhé. File mẫu em gửi ở bài trước.
 
Sub HiddRows()Range([B1].End(xlDown).Offset(1), [c2].End(xlDown).Offset(, -1)).Select
Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub

E có tham khảo file của a. Vấn đề chổ c2 e không áp dụng được với file excel của mình.
E có các dòng từ C14 đến C413. Sẽ cố một số ô trong khoảng từ c14 - c413 bị trống nhưng tùy thuộc vào dữ liệu. Vậy chố C2 đó mình làm ntn vậy a. Mong a giúp đỡ. Xin cảm ơn
 
Sub Macro2()
columns("B:B").Select
Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = Not Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden
End Sub
Của bạn đây.
có thể thay đổi code cho phù hợp với y/c của bạn
bạn tìm hiểu thêm nhé!
 
Sửa lần cuối:
Sub tatmoDL2()
Application.ScreenUpdating = False
For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
If Range("B" & i + 1) <> "" Then
Range("D" & i + 1) = "Ok"
End If
Next i
Range("D1") = "Ok"
Range("D" & Range("A" & Rows.Count).End(xlUp).Row) = "Ok"
Columns("D:D").Select
Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = Not Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden
Columns("D").ClearContents
Range("A" & Range("A" & Rows.Count).End(xlUp).Row).Select
Application.ScreenUpdating = False
End Sub
 
như trường hợp ẩn dòng trống thì ở trên các bạn đã trả có câu trả lời tối ưu rồi, nhưng nếu bây giờ mình muốn ẩn dòng có một giá trị cho trước ví dụ như ẩn những dòng có giá trị là "ABC" hoặc "1 - 10" thì phải làm thế nào ah,mình tìm trên google thì thấy chỉ có cách sử dụng vòng lặp mà cái này thì chậm lắm, bạn nào biết cách nhanh hơn chỉ mình với.:(.(mình xin cảm ơn trước)
 
Sửa lần cuối:
Bác cho em hỏi chút nhé,
Cột của em toàn công thức thì dùng bằng cách nào bác ơi.
Em cám ơn!
Ðề: Sẵn lòng thôi


PHP:
Sub HiddRows()
Range([B1].End(xlDown).Offset(1), [c2].End(xlDown).Offset(, -1)).Select
Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub
Mã:
Sub UnhiddenRows()
Sheet1.UsedRange.EntireRow.Hidden = False
End Sub

Mã:
[B1].End(xlDown).Offset(1)
Là ô trống đầu tiên liền kề với ô cuối cột chứa dữ liệu;
Mã:
 [c2].End(xlDown).Offset(, -1))
Là ô bên trái liền kề với ô cuối của cột [C] chứa dữ liệu

Toàn câu lệnh là ta ra lệnh chọn vùng thuộc cột bắt đầu từ dòng không dữ liệu của cột đến dòng không dữ liệu của cột [C]

Câu lệnh sau là vùng được chọn này sẽ ẩn đi nếu ô nào đó trong vùng không chứa dữ liệu.

;

Còn macro khuyến mãi: Hiện (Không ẩn) hết thẩy các dòng đã sử dụng.
 
Ðề: Ẩn hiện dòng trống bằng VBA trong excel

Hình như macro bạn SA_DQ đưa ra bị lỗi gì đó không chạy được. Mình thử làm rồi nhưng không được. File mẫu mình gửi làm ví dụ nhé. Vì mình không biết được số người sẽ là bao nhiêu nhưng mình dự kiến tối đa không quá 20 nên để sẵn 20 dòng để sẵn đấy (thực tế số này lên tới vài chục nghìn). Do khi số người không đủ dòng mà phải ẩn đi để lấy phần Người lập biểu / Lãnh đạo và một số nội dung soạn sẵn ở dưới... nên phải ẩn các dòng trống từ 8 đến 21. Mình đọc tài liệu thì thấy có Range().Cells(8:21).entr....hidden gì gì đó là làm được việc ẩn nhưng họ lại chỉ hướng dẫn truyền tham số dòng phía sau: Cells("B8:B"&i) trong đó i là số dòng cuối. Tuy nhiên mình áp dụng truyền tham số i để làm dòng bắt đầu ẩn là Cells("B"&i&":B21") thì không được và báo lỗi.
SA_DQ biết thì hướng dẫn mình luôn nhé?
bạn ơi, bạn có thể hướng dẫn mình file này được ko ? cảm ơn bạn nhiều
 

Đính kèm

Ðề: Sẵn lòng thôi


PHP:
Sub HiddRows()
 Range([B1].End(xlDown).Offset(1), [c2].End(xlDown).Offset(, -1)).Select
 Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub
Mã:
Sub UnhiddenRows()
 Sheet1.UsedRange.EntireRow.Hidden = False
End Sub

Mã:
[B1].End(xlDown).Offset(1)
Là ô trống đầu tiên liền kề với ô cuối cột chứa dữ liệu;
Mã:
 [c2].End(xlDown).Offset(, -1))
Là ô bên trái liền kề với ô cuối của cột [C] chứa dữ liệu

Toàn câu lệnh là ta ra lệnh chọn vùng thuộc cột bắt đầu từ dòng không dữ liệu của cột đến dòng không dữ liệu của cột [C]

Câu lệnh sau là vùng được chọn này sẽ ẩn đi nếu ô nào đó trong vùng không chứa dữ liệu.

;

Còn macro khuyến mãi: Hiện (Không ẩn) hết thẩy các dòng đã sử dụng.
Bạn có thể hướng dẫn giúp mình file này được ko? cảm ơn bạn rất nhiều
 

Đính kèm

Back
Top