Ẩn dòng, cột bằng VBA, Macro (4 người xem)

Liên hệ QC

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

levinhdacbtx

Thành viên mới
Tham gia
25/6/07
Bài viết
6
Được thích
1
mình muốn dùng macro hoặc VBA để ẩn một số dòng được chỉ định bởi tham số dong. Xin các bạn chỉ giúp. Cảm ơn
 
Bạn dùng macro này

PHP:
Option Explicit
Sub HideRow()
 Dim iRow As Long
 
 Randomize:     iRow = 9 + Int(9 * Rnd())
 Cells(iRow, 1).EntireRow.Hidden = True
 
End Sub
 
Upvote 0
Macro này không chạy được khi đến dòng
Cells(iRow, 1).EntireRow.Hidden = True
bị báo lỗi không phù hợp
 
Upvote 0
Macro này không chạy được khi đến dòng
Cells(iRow, 1).EntireRow.Hidden = True
bị báo lỗi không phù hợp
Chạy bình thường mà bạn! Vừa test xong!
Cụ thể bạn muốn ẩn như thế nào?
Chạy code này xem lổi ko:
PHP:
Option Explicit
Sub HideRow()
Dim iRow As Long
iRow = 9
Cells(iRow, 1).EntireRow.Hidden = True
End Sub
(Ẩn dòng thứ 9)
 
Upvote 0
Cho em hỏi thêm, nếu trong một báo cáo có nhiều dòng cách nhau mà rỗng (ko có thông tin trên dòng đó) thì làm thế nào để ẩn đi mà ko dùng đến filter.Với code trên thì cần bổ sung gì hả anh?
 
Upvote 0
Cho em hỏi thêm, nếu trong một báo cáo có nhiều dòng cách nhau mà rỗng (ko có thông tin trên dòng đó) thì làm thế nào để ẩn đi mà ko dùng đến filter.Với code trên thì cần bổ sung gì hả anh?

Bạn tham khảo nhé :

PHP:
Sub InBC
    Dim HC As Long, i As Long
    With Sheet1
    HC = .Range("A65000").End(xlUp).Row
        '.Range("A1:A" & HC).EntireRow.Hidden = False
        For i = 5 To .Range("A65000").End(xlUp).Row
            With .Range("H" & i)
                If .Value ="" Then .EntireRow.Hidden = True
            End With
        Next
        .Range("A1:A" & HC).EntireRow.Hidden = False
    End With
End Sub
Thân!
 
Upvote 0
Gửi Anh Okebab, em làm theo anh nhưng khi chạy nó lại trả về trạng thái ban đầu, tức là ko ẩn cho mình những dòng rỗng. Em gửi lại VD em làm cho anh xem và giải thích giúp em.tks
 

File đính kèm

Upvote 0
Tìm và trả lời giùm tác giả, kg hiểu có đúng kg nữa.
Mã:
[COLOR=#000000][COLOR=#0000BB]Sub InBC
    Dim HC [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long
    With Sheet1
    HC [/COLOR][COLOR=#007700]= .[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A65000"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row
        [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A1:A" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]HC[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]EntireRow[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Hidden [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]False
        [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]5 To [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A65000"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row
            With [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"H" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700])
                If .[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"" [/COLOR][COLOR=#0000BB]Then [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]EntireRow[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Hidden [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]True
            End With
        Next
        [COLOR=Blue][B]'[/B][/COLOR][/COLOR][COLOR=Blue][B][COLOR=#007700].[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A1:A" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]HC[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]EntireRow[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Hidden [/COLOR][COLOR=#007700]= [/COLOR][/B][/COLOR][COLOR=#0000BB][COLOR=Blue][B]False[/B][/COLOR]
    End With
End Sub  [/COLOR][/COLOR]

Em nghĩ nếu dùng lệnh With Sheet1 rồi thì chẳng lẽ vẫn phải dùng dấu chấm để rút gọn lệnh:
Sheet1.Range("A65000").End(xlUp).Row

Hay dấu chấm đó có ý nghĩa khác ạ ?
 
Upvote 0
Gửi Anh Okebab, em làm theo anh nhưng khi chạy nó lại trả về trạng thái ban đầu, tức là ko ẩn cho mình những dòng rỗng. Em gửi lại VD em làm cho anh xem và giải thích giúp em.tks
Em thử code này xem:
PHP:
Sub Andong()
    Dim Er, i As Long
    Er = Range("A65000").End(xlUp).Row
    For i = 1 To Er
      Cells(i, 8).EntireRow.Hidden = (Cells(i, 8) = "")
    Next
End Sub
Chú ý: Sub này nếu em cho vào trong sheet như file trên thì không cần dòng With... End With
 
Upvote 0
Em cũng thử code này của anh, nhưng nó chỉ cho ẩn một dòng rỗng ở trên thôi, ý của em là trong một báo cáo có rất nhiều trong rỗng, ko có dữ liệu, làm thế nào mà mình chỉ cần bôi đen một cái chạy macro là ẩn đi hết đc các dòng rỗng đó (dòng rỗng nằm rải rác trong báo cáo).tks
 
Upvote 0
Em cũng thử code này của anh, nhưng nó chỉ cho ẩn một dòng rỗng ở trên thôi, ý của em là trong một báo cáo có rất nhiều trong rỗng, ko có dữ liệu, làm thế nào mà mình chỉ cần bôi đen một cái chạy macro là ẩn đi hết đc các dòng rỗng đó (dòng rỗng nằm rải rác trong báo cáo).tks
Vậy là em sai chổ nào đó! Anh test bình thường mà!
Xem file
 

File đính kèm

Upvote 0
Gửi Anh Okebab, em làm theo anh nhưng khi chạy nó lại trả về trạng thái ban đầu, tức là ko ẩn cho mình những dòng rỗng. Em gửi lại VD em làm cho anh xem và giải thích giúp em.tks

Thêm vào 1 dòng nữa bạn nhé :

PHP:
Sub InBC()
    Dim HC As Long, i As Long
    With Sheet1
    HC = .Range("A65000").End(xlUp).Row
        .Range("A1:A" & HC).EntireRow.Hidden = False
        For i = 1 To HC
            With .Range("H" & i)
                If .Value = "" Then .EntireRow.Hidden = True
            End With
        Next
        .PrintPreview (False)
        .Range("A1:A" & HC).EntireRow.Hidden = False
    End With
End Sub

Thân!
 
Upvote 0
mình muốn cho ẩn một số dòng trong bảng tính với yêu cầu sau
từ dòng R1 dến dòng R2
từ dòng R3 đến dòng cuối bảng tính
xin các bạn giúp đỡ
 
Upvote 0
Em thử code này xem:
PHP:
Sub Andong()
    Dim Er, i As Long
    Er = Range("A65000").End(xlUp).Row
    For i = 1 To Er
      Cells(i, 8).EntireRow.Hidden = (Cells(i, 8) = "")
    Next
End Sub
Chú ý: Sub này nếu em cho vào trong sheet như file trên thì không cần dòng With... End With

Anh NDU cho em hỏi dòng Cells(i, 8).EntireRow.Hidden = (Cells(i, 8) = "") nghĩa là sao? em nghĩ .Hidden chỉ nhận True hoặc False thôi mà??. Em dùng code thấy ok
 
Upvote 0
Anh NDU cho em hỏi dòng Cells(i, 8).EntireRow.Hidden = (Cells(i, 8) = "") nghĩa là sao? em nghĩ .Hidden chỉ nhận True hoặc False thôi mà??. Em dùng code thấy ok
Không phải NDU trả lơì được ko?
Cells(i, 8) = "" là một mệnh đề, mà mệnh đề thì có thể đúng hoặc có thể sai!
 
Upvote 0
Anh NDU cho em hỏi dòng Cells(i, 8).EntireRow.Hidden = (Cells(i, 8) = "") nghĩa là sao? em nghĩ .Hidden chỉ nhận True hoặc False thôi mà??. Em dùng code thấy ok
Chính cái biểu thức Cells(i, 8) = "" ấy là một biểu thức logic, và đương nhiên kết quả của nó là True hoặc False rồi.
Vòng For trong code này có thể hiểu là: Dò từ hàng 1 đến hàng Er, nếu hàng nào bị trống ở cột H thì ẩn đi.
 
Upvote 0
Chính cái biểu thức Cells(i, 8) = "" ấy là một biểu thức logic.

Mình nghĩ rằng Phúc đã nhầm, (nếu đúng vậy, sáng nay có vẻ nhầm nhiều, hi hi). Theo mình thì:

Biểu thức logic thì phải có pháp toán logic: Not, Or, And, ... dùng để "tính toán" các mệnh để.
Còn một mệnh đề thì chưa thể gọi biểu thức được.
Vì dụ: Cells(i, 8) = "" Or Cells(i, 8) = "Phúc" là biểu thức logic.
 
Upvote 0
Mình nghĩ rằng Phúc đã nhầm, (nếu đúng vậy, sáng nay có vẻ nhầm nhiều, hi hi). Theo mình thì:

Biểu thức logic thì phải có pháp toán logic: Not, Or, And, ... dùng để "tính toán" các mệnh để.
Còn một mệnh đề thì chưa thể gọi biểu thức được.
Vì dụ: Cells(i, 8) = "" Or Cells(i, 8) = "Phúc" là biểu thức logic.
Hihi, dù là mệnh đề hay biểu thức logic thì kết quả của nó cũng là True, False thôi mà.
Ví dụ như anh dùng hàm IF trong Excel, tham số đầu tiên có tên là Logical_test, và trong thực tế thì chúng ta vẫn thường dùng những biểu thức có dạng như trên (chẳng hạn A1="GPE"). Vậy thì phải hiểu cái anh chàng Logical_test này là gì?
 
Upvote 0
Nói thế thì (Cells(i, 8) = "") tương đương với giá trị True sao? làm sao để VBA nhận ra "nghĩa" tương đương đó???
 
Upvote 0
Web KT

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

Back
Top Bottom