Paste dữ liệu, bỏ qua các cell ẩn (2 người xem)

Liên hệ QC

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

doi_trai_co_don

Thành viên chính thức
Tham gia
27/1/07
Bài viết
52
Được thích
5
Xin chào mọi người.
Tôi có việc này xin mọi người chỉ giáo.
Giả sử tôi có 10 dòng dữ liệu từ 1-10. Bây giờ tôi muốn Paste vào dòng 11-22 mà trong đó có 2 dòng ẩn. Ý tôi là không Paste dữ liệu vào dòng ẩn.
Xin cảm ơn.
 
Xin chào mọi người.
Tôi có việc này xin mọi người chỉ giáo.
Giả sử tôi có 10 dòng dữ liệu từ 1-10. Bây giờ tôi muốn Paste vào dòng 11-22 mà trong đó có 2 dòng ẩn. Ý tôi là không Paste dữ liệu vào dòng ẩn.
Xin cảm ơn.
Chọn khối muốn copy
Bấm Alt+;
Copy & paste
 
Chọn khối muốn copy
Bấm Alt+;
Copy & paste

Cái người ta cần là PASTE BỎ QUA CÁC CELL ẨN chứ không phải là COPY BỎ QUA CÁC CELL ẨN
Theo như tôi biết thì không có thao tác bằng tay nào làm được điều này ngoại trừ dùng công thức hoặc code VBA
 
Thế là không ai giúp được tôi àh. Buồn quá! hic!
VBA cũng được. Vì số liệu của tôi rất nhiều các Pro ơi.
 
trong khi đợi cao thủ giúp bạn code, bạn dùng mẹo sao đây.
bạn chọn từ A11:A22 (trong đó có 2 dòng đã ẩn).
nhấn F5--->chọn Special----> chọn Visible cell only.
nhấn = ở cell đâu tiên (A1).
nhấn Ctrl enter
nó sẻ bỏ qua 2 dòng bị hide cho bạn
 
trong khi đợi cao thủ giúp bạn code, bạn dùng mẹo sao đây.
bạn chọn từ A11:A22 (trong đó có 2 dòng đã ẩn).
nhấn F5--->chọn Special----> chọn Visible cell only.
nhấn = ở cell đâu tiên (A1).
nhấn Ctrl enter
nó sẻ bỏ qua 2 dòng bị hide cho bạn

Nhưng kết quả nhận được cũng đâu có đúng (thiếu mất 2 giá trị)
 
Thế là không ai giúp được tôi àh. Buồn quá! hic!
VBA cũng được. Vì số liệu của tôi rất nhiều các Pro ơi.

thui thì bạn thử đoạn code này vậy.

Sub Paste_to_Visible_Rows()

Dim Nguon As Range, Dich As Range
Dim i As Long, r As Long
Set Nguon = Application.InputBox(prompt:="Chon Vung Copy ", Type:=8)
Set Dich = Application.InputBox(prompt:="Chep Den ", Type:=8)
For i = 1 To Nguon.Rows.Count
Do Until Not Dich.Offset(r).Rows.Hidden
r = r + 1
Loop
Nguon.Rows(i).Copy Destination:=Dich.Offset(r)
r = r + 1
Next i

End Sub
 
nhapmon cho mình hỏi: Nếu copy cột có những dòng bị ẩn và past vào cột cũng có dòng bị ẩn thì có được kết quả như hiển thị ở cột nguồn không?
 
Bạn dùng cách sort rồi paste là nhanh nhất.
Hoắc sử dụng cột phụ để paste giá trị hoặc công thức sau đó xoá cột phụ đi là xong
Mình vừa làm cho qui ước sp của mình xong, tới 10.000 dòng lận. mà chính xác khỏi phải nói hihi!
Thân!
 
Bạn dùng cách sort rồi paste là nhanh nhất.
Hoắc sử dụng cột phụ để paste giá trị hoặc công thức sau đó xoá cột phụ đi là xong
Mình vừa làm cho qui ước sp của mình xong, tới 10.000 dòng lận. mà chính xác khỏi phải nói hihi!
Thân!
b cho mình hỏi cách của b là làm như thế nào,mình cảm ơn
 
thui thì bạn thử đoạn code này vậy.

Sub Paste_to_Visible_Rows()

Dim Nguon As Range, Dich As Range
Dim i As Long, r As Long
Set Nguon = Application.InputBox(prompt:="Chon Vung Copy ", Type:=8)
Set Dich = Application.InputBox(prompt:="Chep Den ", Type:=8)
For i = 1 To Nguon.Rows.Count
Do Until Not Dich.Offset(r).Rows.Hidden
r = r + 1
Loop
Nguon.Rows(i).Copy Destination:=Dich.Offset(r)
r = r + 1
Next i

End Sub
Hướng dẫn cách dùng code rõ hơn được không bạn, sau khi mình chèn VBA vào excel rồi sau đó làm gì tiếp theo, gõ lệnh gì để thực hiện. Tks nhiều
 
Hướng dẫn cách dùng code rõ hơn được không bạn, sau khi mình chèn VBA vào excel rồi sau đó làm gì tiếp theo, gõ lệnh gì để thực hiện. Tks nhiều
Cụ thể nhé:
1. Mở File Excel của bạn ra.
2. Copy Code
3.Gõ Alt +F11, vào Inser ---> Module
4. Paste Code vào Module
5.Ghi lại
Để chạy Code bấm Run Macro( hoặc F5)
Chỉ có vậy thôi.
 
Cụ thể nhé:
1. Mở File Excel của bạn ra.
2. Copy Code
3.Gõ Alt +F11, vào Inser ---> Module
4. Paste Code vào Module
5.Ghi lại
Để chạy Code bấm Run Macro( hoặc F5)
Chỉ có vậy thôi.
Cảm ơn bạn, nhưng không phải mình hỏi cách cài code, mình cài rồi. Mình hỏi là cách dùng sau khi cài code, ấn F5 thì vẫn chưa dùng được. Bạn thử cài rồi ấn F5 xem, ở đây mình muốn làm sao để mục đích cuối cùng thực hiện việc "Paste dữ liệu bỏ qua các dòng ẩn"
 
Bạn bấm F5 thế nào mà không được. Nếu muốn duyệt qua từng dong lệnh thì bấm F8. Muốn nó ngưng ở dòng nào thì bấm F9 vào dòng đó
 
Lần chỉnh sửa cuối:
Cảm ơn bạn, nhưng không phải mình hỏi cách cài code, mình cài rồi. Mình hỏi là cách dùng sau khi cài code, ấn F5 thì vẫn chưa dùng được. Bạn thử cài rồi ấn F5 xem, ở đây mình muốn làm sao để mục đích cuối cùng thực hiện việc "Paste dữ liệu bỏ qua các dòng ẩn"
Tham khảo bài viết ở Link sau:
https://www.giaiphapexcel.com/diend...l-hiện-không-paste-các-cell-ẩn-filter.137815/
 
Thấy nhiều hướng dẫn không chi tiết và rõ ràng.
Gửi mọi người 2 link để tự xem nhu cầu và cách sử dụng sao cho phù hợp với yêu cầu của mình nhé:
Hầu hết mọi người thường có nhu cầu theo cách 2.
Link rút gọn:
youtu.be/mrDhkClPXEM
youtu.be/frvrev_vSrM
Link dài:

 

File đính kèm

Lần chỉnh sửa cuối:
Thấy nhiều hướng dẫn không chi tiết và rõ ràng.
Gửi mọi người 2 link để tự xem nhu cầu và cách sử dụng sao cho phù hợp với yêu cầu của mình nhé:
Hầu hết mọi người thường có nhu cầu theo cách 2.
Link rút gọn:
youtu.be/mrDhkClPXEM
youtu.be/frvrev_vSrM
Link dài:

Video của anh chia sẻ rất hay ạ
anh chỉ giúp em làm sao mình lấy mục XL campus và paste invible trong excel để thực hiện như video thứ nhất.
Em cám ơn
 
Sub Paste_to_Visible_Rows()

Dim Nguon As Range, Dich As Range
Dim i As Long, r As Long
Set Nguon = Application.InputBox(prompt:="Chon Vung Copy ", Type:=8)
Set Dich = Application.InputBox(prompt:="Chep Den ", Type:=8)
For i = 1 To Nguon.Rows.Count
Do Until Not Dich.Offset(r).Rows.Hidden
r = r + 1
Loop
Nguon.Rows(i).Copy Destination:=Dich.Offset(r)
r = r + 1
Next i

End Sub

anh/chị cho hỏi cái này khi dòng ẩn thì giải quyết được tốt, nhưng cột ẩn thì khi paste ra vẫn hiện dữ liệu đã ẩn. vậy mình có khắc phục được không anh/chị?
 
Sub Paste_to_Visible_Rows()
...
End Sub

anh/chị cho hỏi cái này khi dòng ẩn thì giải quyết được tốt, nhưng cột ẩn thì khi paste ra vẫn hiện dữ liệu đã ẩn. vậy mình có khắc phục được không anh/chị?
Anh dùng phương thức PasteSpecial để copy các ô hiển thị (Visible) là được:
Mã:
Range(vùng cần copy).SpecialCells(xlCellTypeVisible).Copy
Range(ô cần paste).PasteSpecial xlPasteValues
 
Anh dùng phương thức PasteSpecial để copy các ô hiển thị (Visible) là được:
Mã:
Range(vùng cần copy).SpecialCells(xlCellTypeVisible).Copy
Range(ô cần paste).PasteSpecial xlPasteValues
sub copypaste
Dim Nguon As Range, Dich As Range
Dim i, j As Long, r, k As Long
Set Nguon = Application.InputBox(prompt:="Chon Vung Copy ", Type:=8)
Set Dich = Application.InputBox(prompt:="Chep Den ", Type:=8)
Nguon.Value = Nguon.Value
Dich.Value = Dich.Value
For i = 1 To Nguon.Rows.Count
For j = 1 To Nguon.Columns.Count
Nguon.SpecialCells(xlCellTypeVisible).Copy
Dich.PasteSpecial xlPasteValues
Next j
Next i
end sub

bảng dữ liệu 2000 dòng, 10 cột thì sub chạy chậm và giật thì anh chị có cách nào giúp cho chạy nhanh và không giật không? xin cám ơn
 
bảng dữ liệu 2000 dòng, 10 cột thì sub chạy chậm
Nếu đã viết code thì dùng mảng nhặt ra các dòng muốn filter, sao đó gán xuống sheet 1 lần ... thay vì copy từng cell như vậy...
Tóm lại attach file lên (chỉ cần chừng 20 dòng), kết quả mong muốn, các thành viên sẽ có code cho bạn.
 
Nếu đã viết code thì dùng mảng nhặt ra các dòng muốn filter, sao đó gán xuống sheet 1 lần ... thay vì copy từng cell như vậy...
Tóm lại attach file lên (chỉ cần chừng 20 dòng), kết quả mong muốn, các thành viên sẽ có code cho bạn.
đây là bảng nhờ anh chị giúp viết code, mình cần lấy dữ liệu cần, những cột, dòng không cần mình ẩn nó đi và khi mình dán ra bảng mình không có những dòng và cột đã ẩn
 

File đính kèm

đây là bảng nhờ anh chị giúp viết code, mình cần lấy dữ liệu cần, những cột, dòng không cần mình ẩn nó đi và khi mình dán ra bảng mình không có những dòng và cột đã ẩn
Tham khảo code (vẫn là code cũ) và file đính kèm.
Mã:
Sub copypaste()
Dim Nguon As Range, Dich As Range

Set Nguon = Application.InputBox(prompt:="Chon Vung Copy ", Type:=8)
Set Dich = Application.InputBox(prompt:="Chep Den ", Type:=8)
Nguon.Value = Nguon.Value
Nguon.SpecialCells(xlCellTypeVisible).Copy
Dich.PasteSpecial xlPasteValues
End Sub

Cột ABC là cột tôi thêm số thứ tự để thử.
 

File đính kèm

Thay đổi các cột muốn copy theo thứ tự trong mảng cột mCot + Đánh dấu x các dòng cần lấy…

Mã:
Sub BasicCopy() 'Copy nhung dong danh dau x
    Dim mNguon() ' mang Copy
    Dim mCot()  'mang cot
    Dim mDich() ' mang Paste
   
    mNguon = Sheet2.Range("b3:p500").Value
    mCot = [{1,2,11,9,14,7}] 'Index bat dau bang 0
    ReDim mDich(1 To UBound(mNguon, 1), 1 To UBound(mCot))
   
    Dim i, j, k As Long ' bien tang vong lap
   
    For i = 1 To UBound(mNguon)
        If mNguon(i, 1) = "x" Then  ' neu cot B danh dau x
           
            k = k + 1
            For j = 1 To UBound(mCot)
                mDich(k, j) = mNguon(i, mCot(j) + 1)
            Next
           
        End If
    Next i
   
'Xoa du lieu cu
    Call Xoa
'Gan ket qua moi xuong sheet
    Sheet2.Range("s3").Resize(k, UBound(mCot)).Value = mDich

End Sub

Sub Xoa()
    Sheet2.Range("s3:az500").ClearContents
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Bác @DeTong không ngủ hay sao 3h:21 AM đã dậy gõ cọc cọc rồi ạ. hi
 
@DeTong Nếu như muốn sao chép mà vẫn giữ các ô có định dạng số, màu phông chữ, thì mã này không phù hợp. Nếu ghi bị lỗi cần chạy lại, lúc cần Undo thì bó tay.

Tham khảo thêm phương pháp xử lý XML và dán xem bạn nhé.
 
@A HOANG 620
Bạn có thể thử phiên bản sao chép mảng bằng cách xử lý XML này

Gán vào một nút nhấn:
'CopyDataTable [A1:N51],[R53]'
Gán đối số, có xác định cột:
'CopyDataTable [A1:N51],[R53], ListColumns(1,3,4,5,7, 8)'
Gán đối số tùy chọn, các đối số sau mặc định đều là xóa bỏ, muốn giữ lại thì nhập vào sau:
keepFormulas - Giữ lại biểu thức​
keepRowHidden - Giữ lại dòng ẩn​
keepColumnHidden - Giữ lại cột ẩn​
keepRowMerge - Giữ lại ô đã gộp theo dòng​
keepColumnMerge - Giữ lại ô đã gộp theo cột​
keepRowBlank - Giữ lại dòng trống​
'CopyDataTable [A1:N51],[R53], keepRowHidden(), ListColumns(1,3,4,5,7, 8)'

Nếu đặt nút nhấn ở trang tính khác trang tính dữ liệu hãy thêm CodeName Worksheet: Sheet1.[A1:N51]

Để tiết kiệm bộ nhớ, bạn cần sửa mã và đặt mã vào một Class Module.
 

File đính kèm

Lần chỉnh sửa cuối:
@A HOANG 620
Bạn có thể thử phiên bản sao chép mảng bằng cách xử lý XML này

Gán vào một nút nhấn:

Gán đối số, có xác định cột:

Gán đối số tùy chọn, các đối số sau mặc định đều là xóa bỏ, muốn giữ lại thì nhập vào sau:
keepFormulas - Giữ lại biểu thức​
keepRowHidden - Giữ lại dòng ẩn​
keepColumnHidden - Giữ lại cột ẩn​
keepRowMerge - Giữ lại ô đã gộp theo dòng​
keepColumnMerge - Giữ lại ô đã gộp theo cột​
keepRowBlank - Giữ lại dòng trống​


Nếu đặt nút nhấn ở trang tính khác trang tính dữ liệu hãy thêm CodeName Worksheet: Sheet1.[A1:N51]

Để tiết kiệm bộ nhớ, bạn cần sửa mã và đặt mã vào một Class Module.
dạ cám ơn bạn đã chỉ dẫn ạ
Bài đã được tự động gộp:

Tham khảo code (vẫn là code cũ) và file đính kèm.
Mã:
Sub copypaste()
Dim Nguon As Range, Dich As Range

Set Nguon = Application.InputBox(prompt:="Chon Vung Copy ", Type:=8)
Set Dich = Application.InputBox(prompt:="Chep Den ", Type:=8)
Nguon.Value = Nguon.Value
Nguon.SpecialCells(xlCellTypeVisible).Copy
Dich.PasteSpecial xlPasteValues
End Sub

Cột ABC là cột tôi thêm số thứ tự để thử.
thay đổi nhỏ là được kết quả tốt hơn, cám ơn bạn giúp
Bài đã được tự động gộp:

Thay đổi các cột muốn copy theo thứ tự trong mảng cột mCot + Đánh dấu x các dòng cần lấy…

Mã:
Sub BasicCopy() 'Copy nhung dong danh dau x
    Dim mNguon() ' mang Copy
    Dim mCot()  'mang cot
    Dim mDich() ' mang Paste
  
    mNguon = Sheet2.Range("b3:p500").Value
    mCot = [{1,2,11,9,14,7}] 'Index bat dau bang 0
    ReDim mDich(1 To UBound(mNguon, 1), 1 To UBound(mCot))
  
    Dim i, j, k As Long ' bien tang vong lap
  
    For i = 1 To UBound(mNguon)
        If mNguon(i, 1) = "x" Then  ' neu cot B danh dau x
          
            k = k + 1
            For j = 1 To UBound(mCot)
                mDich(k, j) = mNguon(i, mCot(j) + 1)
            Next
          
        End If
    Next i
  
'Xoa du lieu cu
    Call Xoa
'Gan ket qua moi xuong sheet
    Sheet2.Range("s3").Resize(k, UBound(mCot)).Value = mDich

End Sub

Sub Xoa()
    Sheet2.Range("s3:az500").ClearContents
End Sub
cám ơn bạn đã hổ trợ mình. cách thêm 1 cách giải quyết nhanh hơn cho dữ liệu nhiều dòng, nhiều cột
 
Lần chỉnh sửa cuối:
dạ cám ơn bạn đã chỉ dẫn ạ
Bài đã được tự động gộp:


thay đổi nhỏ là được kết quả tốt hơn, cám ơn bạn giúp
Nhìn chung chỉ gỡ bỏ 2 vòng lặp vô ích trong code thôi là code sẽ chạy nhanh hơn mà vẫn cho ra kết quả đúng ý định.
 

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

Back
Top Bottom