Một số vấn đề cần tư vấn giải quyết về Ẩn dòng và Copy dữ liệu bằng VBA (gửi lại) (1 người xem)

Liên hệ QC

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

Van Thai Su

Thành viên mới
Tham gia
6/5/14
Bài viết
24
Được thích
0
Mình gặp 1 bài toán hơi khó 1 chút đó là:
1/ Sau khi nhập liệu, nó sẽ tổng hợp 1 phần danh sách dài và có những dòng trống (cái này mình tách thành 1 dạng sheet đơn giản). Mình muốn ẩn các dòng trống đó đi (tự động thì phải làm thế nào)? Đã nghiên cứu 1 số bài viết nhưng ẩn 1 dòng thì được còn ẩn nhiều dòng thì ko biết cách giải.

Phương án đang suy nghĩ: Cho 1 ô đếm (G3, giả sử giá trị G3 = 12 thì bảng xuất ra chỉ có 12 dòng có dữ liệu, các dòng còn lại trống). Đề bài là ẩn đi các dòng trống (trong sheet ví dụ là dòng 18, 19, 20 (tương ứng với TT là 13, 14 & 15).

2/ Copy + paste tự động value của bảng tính sang 1 file khác.
Cái này kiểu sau khi làm hàm lọc VLOOKUP, HLOOKUP thì copy value trong bảng tính sang 1 sheet của 1 file khác, ở đây thì đúng là ko biết làm sao.

2 đề xuất giúp đỡ có vẻ dài dòng chẳng qua chỉ là giải trình cho a chị e nào giúp đỡ hiểu thêm ý đồ. Hy vọng đc sự hỗ trợ giúp đỡ của a chị e hảo tâm. Thú thực cái này dùng để ghi-xuất giá trị hàng xây dựng theo tháng mà viết tay xong ngồi thống kê ra thì nhiều quá làm ko nổi (mình làm đề-bô gia đình).

1 Bài viết phản hồi của bạn HYen17

Option Explicit
Sub gpeAnDong
()
Dim Rws As Long
Dim Rng
As Range, Cls As Range

Rws
= [C6].CurrentRegion.Rows.Count
Set Rng
= [C5].Resize(Rws).SpecialCells(xlCellTypeBlanks)
For
Each Cls In Rng
Cls
.EntireRow.Hidden = True
Next Cls
End Sub
Đã test thử nhưng ko thấy có tác dụng, ko biết mình có gõ sai gì ko???
Và ý 2 thì chắc phải tiếp tục nhờ a chị e tham gia tiếp.
 

File đính kèm

Mình gặp 1 bài toán hơi khó 1 chút đó là:
1/ Sau khi nhập liệu, nó sẽ tổng hợp 1 phần danh sách dài và có những dòng trống (cái này mình tách thành 1 dạng sheet đơn giản). Mình muốn ẩn các dòng trống đó đi (tự động thì phải làm thế nào)? Đã nghiên cứu 1 số bài viết nhưng ẩn 1 dòng thì được còn ẩn nhiều dòng thì ko biết cách giải.

Phương án đang suy nghĩ: Cho 1 ô đếm (G3, giả sử giá trị G3 = 12 thì bảng xuất ra chỉ có 12 dòng có dữ liệu, các dòng còn lại trống). Đề bài là ẩn đi các dòng trống (trong sheet ví dụ là dòng 18, 19, 20 (tương ứng với TT là 13, 14 & 15).

2/ Copy + paste tự động value của bảng tính sang 1 file khác.
Cái này kiểu sau khi làm hàm lọc VLOOKUP, HLOOKUP thì copy value trong bảng tính sang 1 sheet của 1 file khác, ở đây thì đúng là ko biết làm sao.

2 đề xuất giúp đỡ có vẻ dài dòng chẳng qua chỉ là giải trình cho a chị e nào giúp đỡ hiểu thêm ý đồ. Hy vọng đc sự hỗ trợ giúp đỡ của a chị e hảo tâm. Thú thực cái này dùng để ghi-xuất giá trị hàng xây dựng theo tháng mà viết tay xong ngồi thống kê ra thì nhiều quá làm ko nổi (mình làm đề-bô gia đình).

1 Bài viết phản hồi của bạn HYen17


Đã test thử nhưng ko thấy có tác dụng, ko biết mình có gõ sai gì ko???
Và ý 2 thì chắc phải tiếp tục nhờ a chị e tham gia tiếp.
Bạn chẳng gõ sai gì cả, có điều bạn có đưa đoạn code đó vào trong modul đâu mà nó chạy. Bạn chưa biết chút gì về VBA phải không?
Bạn ấn nút "ẩn dòng trống" và xem kết quả. Nhớ Ennab Macro trước khi mở File nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình gặp 1 bài toán hơi khó 1 chút đó là:
..............................................
1 Bài viết phản hồi của bạn HYen17


Đã test thử nhưng ko thấy có tác dụng, ko biết mình có gõ sai gì ko???
Và ý 2 thì chắc phải tiếp tục nhờ a chị e tham gia tiếp.
Đúng là bạn bạn viết dài dòng quá. Tôi chỉ quan tâm đến 2 dòng cuối cùng:
1. Dòng thứ nhất: Bạn đã làm như thế nào vậy? Tôi làm thế này và thấy bình thường:
- Mở cửa sổ soạn thảo VBA, chèn thêm một Module và dán đoạn code trên vào.
- Chạy đoạn code vừa dán: Bấm F5 trong cửa sổ VBA hoặc Alt+F8 trên Excel, chọn Macro, Enter.

2. Dòng thứ hai: Có thể viết đoạn code thực hiện những việc sau:
- Sử dụng FileDialog để chọn file đích.
- Mở file đích lên để làm việc: Sử dụng lệnh Workbooks.Open
- Đưa giá trị từ file nguồn qua file đích: Câu lệnh có dạng Vùng_đích.Value = Vùng_nguồn.Value
- Lưu và đóng file đích lại: Câu lệnh có dạng Workbooks(...).Close True
Cụ thể hơn thì bạn cần mô tả chi tiết hơn và có file mẫu.
 
Upvote 0
Bạn chẳng gõ sai gì cả, có điều bạn có đưa đoạn code đó vào trong modul đâu mà nó chạy. Bạn chưa biết chút gì về VBA phải không?
Bạn ấn nút "ẩn dòng trống" và xem kết quả. Nhớ Ennab Macro trước khi mở File nhé!
Không, đoạn để trong đó excel là khi copy xuống để tạm rồi từ đó copy sang VBA nhưng ko chạy đúng như ý định, đoạn VBA của module thì mình xóa đi rồi. Chứ VBA thì sau khi mình copy thả vào, thay đổi, đăng nhập vào file lại .v.v... thì ko thấy tác dụng gì cả. Tại VBA Excel chỉ tự mày mò học nên căn bản không có, làm kiểu mì ăn liền thì mình làm được còn bản chất thì lơ mơ lắm.
 
Lần chỉnh sửa cuối:
Upvote 0
1. Nhân tiện, làm button Unhide thế này được ko mọi người :)
Option Explicit
Sub gpeHienDong()
Dim Rws As Long
Dim Rng As Range, Cls As Range
Rws = [C6].CurrentRegion.Rows.Count
Set Rng = [C5].Resize(Rws).SpecialCells(xlCellTypeBlanks)
For Each Cls In Rng
Cls.EntireRow.Hidden = False
Next Cls
End Sub

2. Cái gợi ý của anh nghiaphuc đúng là... e bó tay. Chắc nhờ anh giúp nốt. Mỗi lần làm, lại học thêm được 1 lệnh mới thôi :)
 
Upvote 0
2. Tình huống của ý 2 này như thế này:
- Có 1 bảng tính FileNguon.xls (trong này có tính toán, có thể dài hàng trăm hàng).
- Khách hàng yêu cầu lọc lấy 1 đoạn và chuyển file cho họ. Ở đây file chuyển tên là FileDich.xls có format y hệt như filenguon.xls nhưng các giá trị đều là giá trị copy value, ko công thức (để giữ bảng quyền).

Có 2 hướng tùy a chị e xử lý:
- FileDich.xls có sẵn, có sẵn đường dẫn tại ô D2 của FileNguon.xls
- FileDich.xls chưa có, tạo luôn theo đường dẫn

Cái đầu đề nó hơi "buồn cười" tý vì có thể a chị e sẽ nói copy bằng tay nhanh hơn nhưng mà... yêu cầu nó hơi cầu kỳ xí, các bác thông cảm :D
 

File đính kèm

Upvote 0
Option Explicit
Sub gpeAnDong()
Dim Rws As Long
Dim Rng As Range, Cls As Range

Rws = [C6].CurrentRegion.Rows.Count
Set Rng = [C5].Resize(Rws).SpecialCells(xlCellTypeBlanks)
For Each Cls In Rng
Cls.EntireRow.Hidden = True
Next Cls
End Sub
À mà trường hợp ẩn dòng có giá trị xác định thì đổi khai báo làm sao, ví dụ ẩn dòng có chữ chẳng hạn.
 
Upvote 0
Có vẻ như bạn cũng đang tìm hiểu VBA nên tôi hướng dẫn bạn nhé.

Câu 1: ẩn dòng
Bạn đã đọc các bài về ẩn dòng và lựa chọn bài bác Sa làm Code mẫu, để áp dụng được trước tiên bạn phải hiều, vậy phân tích code bác Sa nhé
Mã:
Sub gpeAnDong()
    'Khai bao cac bien
    Dim Rws As Long
    Dim Rng As Range, Cls As Range
    
    'Xac dinh tong so Row trong vung du lieu CurrentRegion
    Rws = [C6].CurrentRegion.Rows.Count
    'Xac dinh vung can tac dong de an dong
    'Lenh nay tuong ung voi ban go phim Ctrl + G => Special => Blanks
    Set Rng = [C5].Resize(Rws).SpecialCells(xlCellTypeBlanks)
    'Duyet qua vung Blank vua chon
    For Each Cls In Rng
        'An cac dong trong vung do
        Cls.EntireRow.Hidden = True
    Next Cls
End Sub
Hoặc bạn có thể tham khảo Code
Mã:
Sub AnDong()
    Dim Cls As Range
    For Each Cls In [C5:C100]
        If Cls = "" Then
            Cls.EntireRow.Hidden
        End If
    Next
End Sub
Đây là dạng Code nghĩ sao làm vậy. Duyệt 1 vòng qua toàn bộ vùng chọn, nếu cell = trống hoặc bằng gì gì đó thì ẩn dòng.

Câu 2:

Về Copy value thì bạn thực hiện ghi macro copy paste value để có cái sườn
Về Copy sheet thành file khác cũng ghi tương tự
Kết hợp 2 cái macro xào xáo chút chút sẽ được một cái Macro tạm xài ví dụ như
Mã:
Sub Copy()
    Sheets("Sheet1").Copy
    ActiveSheet.Cells.Copy
    [A1].PasteSpecial xlPasteValues
    ActiveWorkbook.SaveAs "Ghi duong dan vao day"
End Sub

Như vậy là để thực hiện các yêu cầu của bạn bạn cần tìm hiểu
- Cách ghi Macro
- Vòng Lặp For

Chúc bạn áp dụng được vào công việc của mình!
 
Upvote 0
Vâng, cảm ơn anh dhn46. Cũng đang copy cái cuốn của ThS Huong để về tìm hiểu và học. Là dân kinh tế nên tiếp cận cái này cũng khá mới.
 
Upvote 0

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

Back
Top Bottom