copy & past dữ liệu visible

Liên hệ QC

duyhoa83

Thành viên chính thức
Tham gia
8/2/07
Bài viết
73
Được thích
10
Hi cả nhà,

Ai biết chỉ giúp: Mình muốn copy những dữ liệu visible (không bị hide)rồi paste vào những ô visible thì làm thế nào nhỉ? Vì hiện tại khi mình paste vào thì hình như nó cũng paste luôn cả vào những ô đã bị hide.

Nhân tiện có bạn nào nói cụ thể hộ mấy chức năng trong Goto/Special được không? Không hiểu sao phần "Tìm kiếm" trên diễn đàn không thực hiện được.

Cám ơn mọi người nhiều. Chúc cả nhà 1 kì cuối tuần vui vẻ.--=--
 
Bạn vào sheet cần copy các ô visible, nhấn F5 chọn Special... chọn Visible cells only | OK.

Vào sheet khác Paste vào.

TP.
 
Khái niệm của bạn nghe giống trong Yahoo Mes quá . Trong Excel có sự lựa chọn khi Paste special . Khi sử dụng chức năng này bạn có thể chọn 17 cách paste
1. Tất cả
2. Công thức
3.Giá trị
4 Định dạng
5. Chú thích

6. Không có thao tác
7. Thêm
8 . Bớt
9 . Nhân
10. chia

11. Các thông tin hợp lệ
12. Tất cả trừ khung viên
13. Độ rộng cột
14. Công thức và số
15. Giá trị và đinh dạng số

16 . Bỏ qua ô trắng
17 .Xoay chiều hoán đổi .

Hình như không có lựa chọn nào cho dữ "liệu visible " của bạn :p

Hì hì Viết xong bài thì thấy bài TTPhong .... Mắc cỡ quá . Đúng là Goto Special cho phép chọn chỉ nhứng Cell không ẩn . Cảm ơn Phong đã nhắc nhở .
 
Lần chỉnh sửa cuối:
kongcom đã viết:
Khái niệm của bạn nghe giống trong Yahoo Mes quá . Trong Excel có sự lựa chọn khi Paste special . Khi sử dụng chức năng này bạn có thể chọn 17 cách paste
1. Tất cả
2. Công thức
3.Giá trị
4 Định dạng
5. Chú thích

6. Không có thao tác
7. Thêm
8 . Bớt
9 . Nhân
10. chia

11. Các thông tin hợp lệ
12. Tất cả trừ khung viên
13. Độ rộng cột
14. Công thức và số
15. Giá trị và đinh dạng số

16 . Bỏ qua ô trắng
17 .Xoay chiều hoán đổi .

Hình như không có lựa chọn nào cho dữ "liệu visible " của bạn :p

Hi hi bạn đang nói tới Paste Special mà, trong khi mình nói đến Go To/ Special...

TP.
 
Cám ơn các bạn, nhưng như mình đã nói: cái này chỉ giải quyết được vấn đề copy visable cell, nhưng còn paste?? Liệu mình có thể paste visable cell only?

Cám ơn mọi người nhiều.--=0
 
Cám ơn các bạn, nhưng như mình đã nói: cái này chỉ giải quyết được vấn đề copy visable cell, nhưng còn paste?? Liệu mình có thể paste visable cell only?

Cám ơn mọi người nhiều.--=0

Paste thì quá dễ, sau khi copy bạn chọn 1 ô đầu vùng đích tới (đừng chọn vùng) sau đó paste (ctrl+V) bình thường

thế là nó sẽ xuyên qua các ô ẩn (invisible) chỉ vào cac ô visible thế là OK
.
 
tigertiger đã viết:
Paste thì quá dễ, sau khi copy bạn chọn 1 ô đầu vùng đích tới (đừng chọn vùng) sau đó paste (ctrl+V) bình thường

thế là nó sẽ xuyên qua các ô ẩn (invisible) chỉ vào cac ô visible thế là OK
.
hình như ko dc... Tigertiger xem lại... theo tôi hiểu là thế này, ví dụ:
Từ A1 đến A5 có dử liệu... giờ bạn ấy ẩn A2 và A3.. sau khi copy visible cell only, tức A1, A4 và A5... giờ bạn ấy muốn paste vào B1 sao cho B1 là copy cũa A1, B4 là copy cũa A4 và B5 là copy cũa A5... tức xuyên qua vùng ẫn chứ ko dc paste vào vùng ẫn...
ANH TUẤN
 
Tôi nghĩ chắc phải dùng VBA thôi...
Giã sử vùng copy là A1 đến A10, trong đó có A2 đến A7 là đang ẫn...
Và giã sữ vùng paste là từ B1:B10 thì ta dùng code sau:
PHP:
Sub Paste_VisibleCell()
    For Each Clls In Range("A1:A10").SpecialCells(xlCellTypeVisible)
            Cells(Clls.Row, 2) = Clls
    Next
End Sub
Như vậy có dc ko?
ANH TUẤN
 
Bạn cho hỏi thêm,bạn copy vào cùng trên một dòng phải ko? hay copy vào khác dòng có đc không? VD copy data từ A1:A4 mà copy xuống A6:A10 đc ko? hay bạn lại copy sang B1:B4?
 
Lúc đầu tôi cũng nghĩ như các bạn... Copy Visible Cell only thì đương nhiên khi paste nó sẽ chỉ Paste nhưng cell đã copy thôi... Vâng, đúng vậy... Có điều là thế này đây:
1> Từ A1:A20 chứa đang chứa dữ liệu.
2> Tiếp theo ta Hide dòng 5 đến 15
3> Copy Visible cell only (là copy A1:A4 và A16:A20)
4> Chọn B1 và Ctrl + V... thì.. điều gì sẽ xãy ra ???
Thưa các đồng chí rằng nó sẽ paste những gì nó đã copy nhưng có điều nó paste luôn vào vùng ẩn, tức từ B1 đến B9.. (Các bạn có thễ tự kiễm chứng điều này)... Và đây chính là điều mà bạn Duyhoa83 muốn tránh... Theo tôi nghĩ thì bạn ấy muốn A1:A4 sẽ dc paste vào B1:B4 và A16:A20 sẽ dc paste vào B16:B20....
Thế thì chỉ có nước VBA thôi... thử hết các kiểu vẫn ko ăn thua...
Như code tôi đã đưa ở trên chỉ là gợi ý... Nếu kỹ hơn thì nên đưa InputBox vào đễ chọn vùng copy và paste... Tôi đã cãi tiến nó lại như sau:
PHP:
Sub Paste_Visible()
    Dim NGUON As Range, DICH As Range, Clls As Range
    Set NGUON = Application.InputBox(prompt:="Chon vung can copy", Type:=8)
    Set DICH = Application.InputBox(prompt:="Chon cell can paste", Type:=8)
    If NGUON.Count = 1 Then
       Cells(NGUON.Row, DICH.Column) = NGUON
    Else:
       For Each Clls In NGUON.SpecialCells(xlCellTypeVisible)
          Cells(Clls.Row, DICH.Column).Value = Clls.Value
       Next
    End If
End Sub
Trong đoạn code trên tôi cũng ko hiễu tại sao khi chọn NGUON là 1 cell thì For có vấn đề (đã kiểm tra).. vì thế mà tôi phải thêm IF vào...
Các bạn xem file và cho biết lý do tại sao lại như vậy nhé...
Nói chung file này đã hoàn toàn làm dc điều mà bạn Duyhoa83 cần... Có điều tôi muốn hõi các bạn về trục trặc cũa For Each khi làm việc với 1 cell
Mến
ANH TUẤN
 

File đính kèm

  • Paste_VisibleCell.zip
    7.6 KB · Đọc: 124
Công thức của anh rất hay nhưng em muốn xin thêm chút nữa được không?
Em chuyển dữ liệu qua Sheet khác luôn nhưng khi em chọn Sheet2 thì trên ô nhập dữ liệu paste vẫn thấy Sheet2!$D$2 nhưng khi nhấn OK thì lại paste lên Sheet1. Vậy xin hỏi có cách nào khắc phục không.
 
hauomdldgh đã viết:
Công thức của anh rất hay nhưng em muốn xin thêm chút nữa được không?
Em chuyển dữ liệu qua Sheet khác luôn nhưng khi em chọn Sheet2 thì trên ô nhập dữ liệu paste vẫn thấy Sheet2!$D$2 nhưng khi nhấn OK thì lại paste lên Sheet1. Vậy xin hỏi có cách nào khắc phục không.
Muốn chuyễn sang sheet 2 thì bạn cứ copy và paste bình thường thôi... đâu cần dùng code này...
Ở đây chỉ là copy những vùng ko ẩn, rồi paste sang cột khác với dòng tương ứng mà vẫn ko đụng chạm gì đến vùng ẫn
ANH TUẤN
 
anhtuan1066 đã viết:
Tôi nghĩ chắc phải dùng VBA thôi...
Giã sử vùng copy là A1 đến A10, trong đó có A2 đến A7 là đang ẫn...
Và giã sữ vùng paste là từ B1:B10 thì ta dùng code sau:
PHP:
Sub Paste_VisibleCell()
For Each Clls In Range("A1:A10").SpecialCells(xlCellTypeVisible)
Cells(Clls.Row, 2) = Clls
Next
End Sub
Như vậy có dc ko?
ANH TUẤN
Em biết đề tài này đang nói việc Copy những Cell hiển thị thôi nhưng nó có một phần em đang cần là copy dữ liệu từ nơi này sang nơi khác bằng dòng lệnh nên em muốn dùng chung tiêu đề này để đở choán chổ sẳng đây có đoạn code của anh dùng để copy dữ liệu từ vị trí này sang vị trí khác, nhưng lại muốn sang Sheet khác luôn cơ mong anh phát triển thêm.
À, còn 1 cái nửa là đang đứng ở Sheet2 mở Macro nay thì không thấy hiện Sheet1 (chớp tắt) giống như khi tạo Record New Macro... chỉ là copy dữ liệu qua (Value) thôi.
Không phải em không tự mò mà tìm kiểu này giống mò kim đáy bể quá, tìm xuốt 2 ngày rồi mà chẳng có tài liệu nào nói vậy cả. Xin anh giúp giùm.
 
Trong file đính kèm có đủ thông tin rồi đó. Em rằng hơi khó đó phải không? !$@!! !$@!! !$@!! !$@!!
 

File đính kèm

  • SupperCopy-Paste.xls
    15.5 KB · Đọc: 51
Oh... thế thì quá dễ mà... như file này đây!
Mến
ANH TUẤN
 

File đính kèm

  • SupperCopy-Paste.zip
    6.7 KB · Đọc: 86
Thực ra không cần dùng Marco hay VBA trong vđ này .
Có một mẹo nhỏ mà chúng ta hay dùng khi không muốn Paste đè lên dữ liệu cũ có thể áp dụng ở đây .
  1. Nhấn F5 Chọn những ô mà bạn muốn copy --> bấm chuột phải vào vùng này --> chọn Copy
  2. Chọn vùng trên trang làm việc mà ở đó bạn muốn đặt phần dữ liệu sẽ dán
  3. Bấm tổ hợp phím CTRL-SHIFT- + ( dấu cộng )
  4. Xuất hiện hộp Insert , bạn lựa chọn cho dịch lên hoặc dịch xuống
Enter ----->Các cell có dữ liệu sẽ tự động tìm chỗ thích hợp mà không chèn lên dữ liệu qúy giá của chúng ta .
 
Mới có phần Paste lên vùng có hàng ẩn mà thôi!

PHP:
Option Explicit
Dim Rng As Range
Dim lRow As Long:                       Dim iCol As Integer

Sub CopyToVisible()
 Dim vRng As Range
 Dim lRowV As Long:                     Dim iColV As Integer
 
 Set Rng = Selection
 lRow = Rng.Rows.Count:                 iCol = Rng.Columns.Count
   
 Set vRng = Range("D5").Resize(lRow, iCol).SpecialCells(xlCellTypeVisible)
 lRowV = vRng.Rows.Count:               iColV = vRng.Columns.Count
 
 If lRowV < lRow And iColV = iCol Then
    Dim tDong As Long:                  Dim dRng As Range
    
    Set vRng = Range("D5"):             tDong = 1
    Do
        Set dRng = vRng.Resize(lRow, iCol).SpecialCells(xlCellTypeVisible).Cells(1, 1)
        lRowV = vRng.Resize(lRow, iCol).SpecialCells(xlCellTypeVisible).Rows.Count
        
        If tDong + lRowV > lRow Then lRowV = lRow - tDong + 1
        Rng.Cells(tDong, 1).Resize(lRowV, iCol).Copy Destination:=dRng
        
        tDong = tDong + lRowV
        Set vRng = vRng.Offset(1 + lRowV)
        If tDong > lRow Then Exit Do
    Loop
 ElseIf lRowV = lRow And iColV < iCol Then
    
 ElseIf lRowV = lRow And iColV = iCol Then
    Rng.Copy Destination:=Range("D5")
 Else
    MsgBox "CHUA LAM DUOC"
 End If
 Set Rng = Nothing
End Sub
 

File đính kèm

  • CopyToVisible.rar
    7.7 KB · Đọc: 72
Lần chỉnh sửa cuối:
Hi Anhtuân1066,

Hình như đoạn code của bạn chỉ dùng được trong phạm vi 1 file thôi hay sao ấy, nếu tớ muốn copy visable cell từ file này và paste sang file khác thì làm thế nào nhỉ?

Thanks nhiều nhé.
 
Web KT
Back
Top Bottom