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

  • Thread starter nguyenminhxiem
  • Ngày gửi
N

nguyenminhxiem

Cao cấp
20/2/08
215
8
0
Ha Long
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!
 
Khóa học Quản trị dòng tiền
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
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!
 
V

vinhandvinh

Guest
23/10/07
1
0
0
hcm
ẩ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
 
H

hungpa

Sơ cấp
9/9/09
9
0
0
Son La
Ðề: ẩ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.
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
582
103
43
67
HCM city
Ðề: Ẩ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:
H

hungpa

Sơ cấp
9/9/09
9
0
0
Son La
Ðề: Ẩ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é?
 
H

hungpa

Sơ cấp
9/9/09
9
0
0
Son La
Ðề: Ẩ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

  • Book2.xlsx
    11.4 KB · Lượt xem: 1,373
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
582
103
43
67
HCM city
Ðề: Ẩ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

  • gpeThuThuat.rar
    12.1 KB · Lượt xem: 1,988
H

hungpa

Sơ cấp
9/9/09
9
0
0
Son La
Ðề: Ẩ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?
 
H

hungpa

Sơ cấp
9/9/09
9
0
0
Son La
Ðề: Ẩ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.
 
H

hungpa

Sơ cấp
9/9/09
9
0
0
Son La
Ðề: Ẩ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

  • Cac vi du Excel.xlsx
    12.6 KB · Lượt xem: 706
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
582
103
43
67
HCM city
Ðề: 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.
 
H

hungpa

Sơ cấp
9/9/09
9
0
0
Son La
Ðề: 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.
 
M

mtlup4ever

Guest
7/2/15
1
0
1
33
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
 
A

alodie123

Guest
11/3/15
4
0
1
38
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:
A

alodie123

Guest
11/3/15
4
0
1
38
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
 
C

cartoon18

Guest
28/10/11
3
0
1
qingdao
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:
L

letrinh258

Guest
23/10/15
1
0
1
35
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.
 
thanhdong09121989

thanhdong09121989

Guest
16/2/17
2
0
1
34
Ðề: Ẩ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

  • Tổng công ty cà phê Việt Nam (2) (4).xls
    2.7 MB · Lượt xem: 180
thanhdong09121989

thanhdong09121989

Guest
16/2/17
2
0
1
34
Ðề: 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

  • Tổng công ty cà phê Việt Nam (2) (4).xls
    2.7 MB · Lượt xem: 201

Xem nhiều

Webketoan Zalo OA