Copy nối dữ liệu

  • Thread starter Thread starter ZzNHCzZ
  • Ngày gửi Ngày gửi
Liên hệ QC

ZzNHCzZ

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
8/5/08
Bài viết
166
Được thích
44
Nghề nghiệp
Hàng Không
Xin Chào GPE!
em có bài Copy bằng marco như sau:
Khi Click nút Copy thì sẽ copy dữ liệu tại Sheet Data Sang Báo Cáo Và Xóa dữ liệu tại Sheet Data.
Sau khi nhập dữ liệu lần 2 và Copy thì sẽ nối vào sheet báo cáo.

Em mới làm được 1/2 bài à. Nhờ anh chị chỉ giúp em cách làm để hoàn chỉnh bài này ạ.

Em chân thành cám ơn!
Thân!
 
Lần chỉnh sửa cuối:
Xin Chào GPE!
em có bài Copy bằng marco như sau:
Khi Click nút Copy thì sẽ copy dữ liệu tại Sheet Data Sang Báo Cáo Và Xóa dữ liệu tại Sheet Data.
Sau khi nhập dữ liệu lần 2 và Copy thì sẽ nối vào sheet báo cáo.

Em mới làm được 1/2 bài à. Nhờ anh chị chỉ giúp em cách làm để hoàn chỉnh bài này ạ.

Em chân thành cám ơn!
Thân!
Dùng tạm code sau:
PHP:
Sub Copy()
Dim NumRow As Integer, eR As Integer
    Sheets("Data").Select
    NumRow = [a65000].End(xlUp).Row
    If NumRow = 1 Then
        MsgBox "Co gi dau ma chep"
        Exit Sub
    End If
    With Sheets("BaoCao")
        eR = .[a65000].End(xlUp).Row + 1
        .Range("A" & eR & ":B" & NumRow + eR - 2).Value = Range("A2:B" & NumRow).Value
    End With
    Range("A2:B1000").ClearContents
    MsgBox "Vua long chua?"
End Sub
 
Upvote 0
Cho 1 code ngắn gọn thử xem nha:
PHP:
Option Explicit
Sub Copy()
    Dim Src As Range, Des As Range
    On Error Resume Next
    Set Src = Sheet1.[A2].Resize(Sheet1.[A65536].End(xlUp).Row-1, 2)
    Set Des = Sheet2.Cells(Sheet2.[A65536].End(xlUp).Row + 1, 1)
    Src.Copy Destination:=Des
    Src.Clear
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thêm 1 tham khảo, nha:

PHP:
Option Explicit
Sub Copy()
 Dim lRow As Long, Rng As Range
 
 Sheets("Data").Select
 lRow = [a65500].End(xlUp).Row
 Set Rng = [a2].Resize(lRow - 1, 2)
 Sheets("BaoCao").[a65500].End(xlUp).Offset(1).Resize(Rng.Rows.Count, 2).Value = Rng.Value
 Rng.ClearContents
End Sub
 
Upvote 0
PHP:
Option Explicit
Sub Copy()
 Dim lRow As Long, Rng As Range
 
 Sheets("Data").Select
 lRow = [a65500].End(xlUp).Row
 Set Rng = [a2].Resize(lRow - 1, 2)
 Sheets("BaoCao").[a65500].End(xlUp).Offset(1).Resize(Rng.Rows.Count, 2).Value = Rng.Value
 Rng.ClearContents
End Sub
Chặc... chặc... Sư phụ thiếu bẩy lổi!
 
Upvote 0
Em cám ơn các anh rất nhiều.

Em có thêm 2 câu hỏi phụ:
  • Nếu dòng dữ liệu của em khóa công thức thì làm sao xóa được ạ?
Range("A2:B1000").ClearContents
dòng lệnh này báo lổi
  • Em muốn dùng Msgbox dạng Yes/No khi Click button thì làm như thế nào ạh?
Chân thành Cám ơn GPE
Thân!
 
Lần chỉnh sửa cuối:
Upvote 0
Em cám ơn 2 vị rất nhiều.

Em có thêm 2 câu hỏi phụ:
  • Nếu dòng dữ liệu của em khóa công thức thì làm sao xóa được ạ?
!
Thì UnProtect sheet trước khi thực hiện xóa dử liệu!
Bạn thử record macro quá trình Protect sheet và Unprotect sheet xem nó viết cái gì... Từ đó chỉnh sửa lại theo ý muốn
  • Em muốn dùng Msgbox dạng Yes/No khi Click button thì làm như thế nào ạh?
Chân thành Cám ơn GPE
Thân!
Cụ thể bạn muốn Yes/No là để làm việc gì?
 
Upvote 0
Cụ thể bạn muốn Yes/No là để làm việc gì?

Em muốn chắc chắn khi Copy
Khi Click vào button thi se xuất hiện thông báo: "Ban da chac chua?"
Yes: Chac chan __--__
No: Suy nghi lai ;;;;;;;;;;;

Thân
 
Upvote 0
Vậy cho bạn 1 ví dụ nhỏ về MsgBox Yes No này nhé:
PHP:
Sub Test()
Chao = "Xin chao ban! Bam nut Yes hoac No di"
Kieu = vbYesNo
Tieude = "Bat dau thu nhe"
Response = MsgBox(Chao, Kieu, Tieude)
If Response = vbYes Then MsgBox "Ban vua chon Yes"
If Response = vbNo Then MsgBox "Ban vua chon No"
End Sub
Nếu bấm Yes thì làm cái gì đó: Thế code vào chổ MsgBox "Ban vua chon Yes"
Nếu bấm No thì làm việc khác: Thế code vào chổ MsgBox "Ban vua chon No"
Dể mà
 
Upvote 0
Tôi gữi cho bạn phần MsgBox kết hợp vào code copy... Bạn phát triển thêm nha!
PHP:
Option Explicit
Sub Copy()
   Dim Src As Range, Des As Range
   Dim Chao As String, Tieude As String
   Dim Kieu As Byte
   Dim Thihanh As Integer
   If Sheet1.[A65536].End(xlUp).Row = 1 Then MsgBox "Co coc kho gi dau ma copy !!!": Exit Sub
   Chao = "Có phai ban muôn copy du lieu không?"
   Kieu = vbYesNo
   Tieude = "Thuc hien copy du lieu"
   Thihanh = MsgBox(Chao, Kieu, Tieude)
   If Thihanh = vbYes Then
      MsgBox "Có chac chan khong?"
      Set Src = Sheet1.[A2].Resize(Sheet1.[A65536].End(xlUp).Row - 1, 2)
      Set Des = Sheet2.Cells(Sheet2.[A65536].End(xlUp).Row + 1, 1)
      Src.Copy Destination:=Des
      Src.Clear
   ElseIf Thihanh = vbNo Then
      MsgBox "Khong copy nua? Nghi khoe nhe?"
      Exit Sub
   End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Anh sửa giúp em đoạn code này cho minh bạch 1 chút được không?
Em không biết phát triển thêm.

vd: Em muốn copy và xóa cột A,B,E,H
Anh chỉ em thêm nhé.
Set Src = Sheet1.[A2].Resize(Sheet1.[A65536].End(xlUp).Row - 1, 2)
Set Des = Sheet2.Cells(Sheet2.[A65536].End(xlUp).Row + 1, 1)

Chân thành cám ơn anh.
Code anh hay lắm.

Thân!
 
Upvote 0
Anh sửa giúp em đoạn code này cho minh bạch 1 chút được không?
Em không biết phát triển thêm.

vd: Em muốn copy và xóa cột A,B,E,H
Anh chỉ em thêm nhé.


Chân thành cám ơn anh.
Code anh hay lắm.

Thân!
Copy và xóa cột A, B, E, H thì được rồi... nhưng paste vào đâu? Cũng paste vào cột A, B, E, H của sheet kia hay là cho 4 cột nằm liền nhau? Nói 1 lần làm luôn 1 lần!
Thông thương các Range nằm không liền kề nhau thì người ta dùng Union để kết hợp chúng, ví dụ ta có 2 range A2:B10E2:B10 thì người ta sẽ:
Set Rng = Union(Range("A2:B10"),Range("E2:H10"))
(Tốt nhất bạn đưa 1 ít dử liệu giã lập lên cho dể hình dung nhé)
 
Upvote 0
Tổng hợp dữ liệu theo ý muốn từ nhiều Sheet

Mình muốn hợp dữ liệu từ nhiều sheet có cấu trúc giống nhau. Kết quả là gộp nội dung của các sheet và dữ liệu được xắp theo một trật tự quy định (có file gửi kèm).

Cụ thể với ví dụ đưa ra là thế này: nếu làm thủ công ta phải lọc tên các chủ hộ tại 3 bảng (để không sót, không trùng), đưa vào bảng tổng hợp, sau đó chèn dòng và lần lượt copy dữ liệu của từng hộ tại các bảng để dán vào biểu tổng hợp (hộ đó có tên tại bao nhiêu bảng thì copy bấy nhiêu lần), hết hộ này làm sang hộ khác.

Sau khi đọc bài gộp dữ liệu trên diễn đàn và làm thử thì thấy đã chuyển được dữ liệu của các sheet vào chung một sheet tổng hợp tức là gộp dữ liệu của các sheet, vì vậy mình muốn xử lý tiếp để gộp dữ liệu của các nhóm (trong ví dụ này nhóm tức là hộ).
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Sau tổng cộng khoảng 6 giờ cật lực thao tác với VBA, xin mời các bạn xem kết quả

Mình muốn hợp dữ liệu từ nhiều sheet có cấu trúc giống nhau. Kết quả là gộp nội dung của các sheet và dữ liệu được xắp theo một trật tự quy định (có file gửi kèm).

PHP:
Option Explicit
Sub TongHop()
Dim Sh As Worksheet
 Dim Rng As Range, Clls As Range
 Dim bJ As Byte, DgCuoi As Long, Lrow As Long
 
 
 Application.ScreenUpdating = False
 Sheets("Tong Hop").[it1] = "ChuHo"
1 ' Them Cac Dong Phu Tro Vo Cac Sheet:'
 For Each Sh In Worksheets
   If Sh.Name <> "Tong hop" Then
      Sh.Select:  Lrow = [a65500].End(xlUp).Row
      Range("B2:B" & Lrow).Copy Destination:=Sheets("Tong hop").Range("IT" & _
         Sheets("Tong Hop").[it65500].End(xlUp).Row + 1)
'      ThemCotA Sh'
      Columns("A:A").Select
      Selection.SpecialCells(xlCellTypeConstants, 1).Select
      Set Rng = Selection
      For bJ = 1 To 2
         For Each Clls In Rng
            If bJ = 1 Then
               Clls.Offset(1).EntireRow.Insert
            Else
               Clls.Offset(1, 1) = Sh.Name
            End If
      Next Clls, bJ
   End If
 Next Sh
2 ' Tao Danh Sach Khach Hang Duy Nhat:'
 Sheets("Tong hop").Select:               DgCuoi = [b1].CurrentRegion.Rows.Count
 Range("A2:J" & DgCuoi + 9).Clear:        Columns("IT:IT").Select
 Selection.SpecialCells(xlCellTypeBlanks).Select
 Selection.Delete Shift:=xlUp
 Range("IT:IT").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
   "IV1"), Unique:=True
 Columns("IT:IT").Clear
3 ' Chep Du Lieu Vo Sheets("Tong hop"): '
 Lrow = [iV65500].End(xlUp).Row
 For bJ = 2 To Lrow    'Chu I bJ Khi Khach Hang Nhieu'
   For Each Sh In Worksheets
      If Sh.Name <> "Tong hop" Then
         Set Rng = Sh.Columns("B:B").Find(what:=Cells(bJ, "IV"), LookIn:=xlValues)
         If Not Rng Is Nothing Then
            DgCuoi = Rng.Offset(1).End(xlDown).Row
            If DgCuoi > 65500 Then DgCuoi = Sh.[a65500].End(xlUp).Row + 1
            Rng.Offset(, -1).Resize(DgCuoi - Rng.Row, 9).Copy _
               Destination:=[a65500].End(xlUp).Offset(1)
         End If
      End If
 Next Sh, bJ  '
 Columns("IV:Iv").Clear
4 ' Xoa Cac Dong Phu Tro:'
 For Each Sh In Worksheets
   If Sh.Name <> "Tong hop" Then
      Do
      Set Rng = Sh.Columns("B:B").Find(what:=Sh.Name, LookIn:=xlValues)
         If Rng Is Nothing Then
            Exit Do
         Else
            Rng.EntireRow.Delete
         End If
      Loop
   End If
 Next Sh
End Sub
 

File đính kèm

Upvote 0
Sau tổng cộng khoảng 6 giờ cật lực thao tác với VBA, xin mời các bạn xem kết quả

Cảm ơn bạn HYen17;93402 không ngờ bạn nhiệt tình đến vậy! Tôi đã chạy thử kết quả đạt 100% so yêu cầu đã đặt ra.

Do Tôi sơ xuất khi đưa bài lên là không đưa ra yêu cầu ở trên mỗi hộ thêm một dòng tổng cộng (tổng của khu A + B + C) rất mong được sự giúp đỡ của các bạn. Cảm ơn nhiều!
 
Upvote 0
Chưa hoàn toàn ưng ý, nhưng bạn tham khảo nha!

Do Tôi sơ xuất khi đưa bài lên là không đưa ra yêu cầu ở trên mỗi hộ thêm một dòng tổng cộng (tổng của khu A + B + C) rất mong được sự giúp đỡ của các bạn. Cảm ơn nhiều!
Bạn thay macro này vô cái cũ & chạy thử xem sao!
PHP:
Option Explicit
Sub TongHop()
Dim Sh As Worksheet
 Dim Rng As Range, Clls As Range, SRng As Range, bRng As Range
 Dim Tong As Single
 Dim bJ As Byte, DgCuoi As Long, Lrow As Long
 
 
 Application.ScreenUpdating = False
 Sheets("Tong Hop").[it1] = "ChuHo"
1 ' Them Cac Dong Phu Tro Vo Cac Sheet:'
 For Each Sh In Worksheets
   If Sh.Name <> "Tong hop" Then
      Sh.Select:  Lrow = [a65500].End(xlUp).Row
      Range("B2:B" & Lrow).Copy Destination:=Sheets("Tong hop").Range("IT" & _
         Sheets("Tong Hop").[it65500].End(xlUp).Row + 1)
      Columns("A:A").Select
      Selection.SpecialCells(xlCellTypeConstants, 1).Select
      Set Rng = Selection
      For bJ = 1 To 2
         For Each Clls In Rng
            If bJ = 1 Then
               Clls.Offset(1).EntireRow.Insert
            Else
               Clls.Offset(1, 1) = Sh.Name
               Clls.Offset(1, 6) = Clls.Offset(, 6)  '<<=='
            End If
      Next Clls, bJ
   End If
 Next Sh
2 ' Tao Danh Sach Khach Hang Duy Nhat:'
 Sheets("Tong hop").Select:               DgCuoi = [b1].CurrentRegion.Rows.Count
 Range("A2:J" & DgCuoi + 9).Clear:        Columns("IT:IT").Select
 Selection.SpecialCells(xlCellTypeBlanks).Select
 Selection.Delete Shift:=xlUp
 Range("IT:IT").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
   "IV1"), Unique:=True
 Columns("IT:IT").Clear
3 ' Chep Du Lieu Vo Sheets("Tong hop"): '
 Lrow = [iV65500].End(xlUp).Row
 For bJ = 2 To Lrow    'Chu I bJ Khi Khach Hang Nhieu'
   For Each Sh In Worksheets
      If Sh.Name <> "Tong hop" Then
         Set Rng = Sh.Columns("B:B").Find(what:=Cells(bJ, "IV"), LookIn:=xlValues)
         If Not Rng Is Nothing Then
            DgCuoi = Rng.Offset(1).End(xlDown).Row
            If DgCuoi > 65500 Then DgCuoi = Sh.[a65500].End(xlUp).Row + 1
 
            If Tong = 0 Then
               Set SRng = [a65500].End(xlUp).Offset(1, 6)  '<<=='
            Else
               Set bRng = [a65500].End(xlUp).Offset(1, 6)  '<<=='
            End If
            Rng.Offset(, -1).Resize(DgCuoi - Rng.Row, 9).Copy _
               Destination:=[a65500].End(xlUp).Offset(1)
            Tong = Tong + Rng.Offset(, 5)                   '<<=='
         End If
 
      End If
   Next Sh
   SRng.Value = Tong:               Tong = 0       '<<=='
   bRng.Value = ""                                 '<<=='
 Next bJ
 Columns("IV:Iv").Clear
4 ' Xoa Cac Dong Phu Tro:'
 For Each Sh In Worksheets
   If Sh.Name <> "Tong hop" Then
      Do
      Set Rng = Sh.Columns("B:B").Find(what:=Sh.Name, LookIn:=xlValues)
         If Rng Is Nothing Then
            Exit Do
         Else
            Rng.EntireRow.Delete
         End If
      Loop
   End If
 Next Sh
End Sub
 
Upvote 0
Chưa hoàn toàn ưng ý, nhưng bạn tham khảo nha!
Bạn thay macro này vô cái cũ & chạy thử xem sao!
PHP:
Cảm ơn Bác [B]HYen17;93576[/B] đã giúp! Em đã chạy thử, kết quả rất tốt. Tuy nhiên nếu chèn thêm được dòng tổng của từng hộ thì bảng tính sẽ đẹp hơn. 

Từ bài của Bác HYen17;93576 Mình muốn tạo thêm dòng tổng (ở phía trên) của từng hộ và ở trên cùng là dòng tổng cộng của tất cả các hộ trong danh sách, Bạn nào biết giúp mình với. Thanks!!!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom