VBA copy ô trong excel khi đang lọc filter (1 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

eagle12

Thành viên mới
Tham gia
18/12/13
Bài viết
19
Được thích
5
Chào các bác

Em có 1 code VBA đang thực hiện việc copy từ ô active kéo xuống 5 dòng --> được 6 dòng copy --> paste sang sheet2

Nhờ mọi người nâng cấp code lên việc nếu bảng giá trị đang bị filter thì vẫn copy được 6 dòng filter từ ô đang active

Vd: Bảng tính đang lọc tại cột F (lọc những ô màu vàng), để con chuột tại ô G5 ---> sẽ chọn được vùng G5:G21( vùng này có 6 dòng cần copy) ---> Selection.SpecialCells(xlCellTypeVisible).Copy copy được 6 dòng đang lọc ---> sang sheet2 paste vào D3
Thực hiên chọn vùng xong và copy, chuột sẽ nhảy xuông ô G25 - là giá trị lọc thứ 7, để nếu bấm chạy macro sẽ tiếp tục chọn xuông dưới 6 dòng

Cám ơn mọi người nhiều

1757577470781.png
Mã:
Sub Copy()

Sheets("Sheet1").Select

Dim rrow As Long
Dim Col As Long

    rrow = ActiveCell.Row
    Col = ActiveCell.Column

    Range(Cells(rrow, Col), Cells(rrow + 5, Col)).Copy
    Cells(rrow + 6, Col).Select
    
Sheets("Sheet2").Select
    Range("D3").PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    
Sheets("Sheet1").Select

End Sub
 

File đính kèm

- Cột Amt đang lọc theo màu và bạn đang muốn copy cột Mã sang sheet 2 bắt đầu từ ô D3, vậy tại sao bạn không copy cả cột mà phải copy 6 dòng rồi lại copy 6 dòng tiếp?
- Copy đoạn G5:G21 paste vào Sheet2 D3 xong chạy macro tiếp đoạn G25:G36 thì paste tiếp vào đâu vậy bạn?
 
- Cột Amt đang lọc theo màu và bạn đang muốn copy cột Mã sang sheet 2 bắt đầu từ ô D3, vậy tại sao bạn không copy cả cột mà phải copy 6 dòng rồi lại copy 6 dòng tiếp?
Mỗi lần chạy, mình cần copy từ ô đặt chuột cột tại cột G (lần đầu mình có thể chọn đặt từ G5, G12 .. hoặc G17 ) và chỉ copy 6 dòng trở xuống thôi bạn, vì nó liên quan đến mảng check mỗi lần 6 mã bên sheet 2 sau này, nên không cần copy cả cột bạn ạ

Sau mỗi lần chạy, quay lại sheet1 sẽ để chuột tại dòng thứ 7 tính từ lần chạy trước đó

- Copy đoạn G5:G21 paste vào Sheet2 D3 xong chạy macro tiếp đoạn G25:G36 thì paste tiếp vào đâu vậy bạn?

Mỗi lần chạy copy đều dán đè lên sheet2-D3 1 lần bạn ạ
 
Vậy bạn thử dùng code này nhé, hy vọng giúp được bạn:
Mã:
Dim StartIndex As Long

Sub CopyFilteredRows()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim cell As Range
    Dim visibleCells As Range
    Dim cellArr As Collection
    Dim i As Long, cnt As Long
    Dim lastCopyRow As Long, PasteRow As Long
    
    Set ws1 = ThisWorkbook.Sheets("Sheet1")
    Set ws2 = ThisWorkbook.Sheets("Sheet2")
    
    lastCopyRow = ws1.Cells(ws1.Rows.Count, "G").End(xlUp).Row
    
    
    On Error Resume Next
    Set visibleCells = ws1.Range("G5:G" & lastCopyRow).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    
    If visibleCells Is Nothing Then Exit Sub
    
    Set cellArr = New Collection
    For Each cell In visibleCells
        cellArr.Add cell
    Next cell
    
    If StartIndex = 0 Then StartIndex = 1
    
    If StartIndex > cellArr.Count Then
        MsgBox "copy xong"
        StartIndex = 1
        Exit Sub
    End If
    
    PasteRow = 3
    ws2.Range("D3:D8").ClearContents
    
    cnt = 0
    For i = StartIndex To cellArr.Count
        ws2.Cells(PasteRow + cnt, "D").Value = cellArr(i).Value
        cnt = cnt + 1
        If cnt = 6 Then Exit For
    Next i
    
    StartIndex = StartIndex + cnt
End Sub
 

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

Back
Top Bottom