2012-12-03 71 views
5

Được rồi, tôi đã cố tìm các câu hỏi tương tự nhưng tôi không hiểu nhiều về những gì đang được thảo luận vì đây là lần đầu tiên tôi xem trình soạn thảo VBA của Excel.Kết hợp các bảng tính excel vào một bảng tính

Trong thuật ngữ đơn giản, tôi có 2 bảng: "Sheet1" và "Sheet2"

Sheet 1:

A   B 
1 Header1 Header2 
2 Text1  Info1 
3 Text2  Info2 

Bảng 2:

A   B 
1 Header1 Header2 
2 Text3  Info3 
3 Text4  Info4 

Và tôi muốn có một macro để hợp nhất hai trang tính thành một trang tính mới (Sheet3), như sau:

A   B 
1 Header1 Header2 
2 Text1  Info1 
3 Text2  Info2 
4 Text3  Info3 
5 Text4  Info4 

Tôi đã thử ghi macro và lưu để sử dụng sau này. Để làm điều này, tôi đã tạo một trang tính mới, sao chép/dán mọi thứ từ Sheet1 đến Sheet3, sau đó sao chép tất cả thông tin ngoại trừ các tiêu đề từ Sheet2 đến Sheet3.

Vâng, macro hoạt động cho dữ liệu này, nhưng tôi thấy rằng mã được tạo bởi excel làm cho nó sao cho nó chọn ô A4 (ở đây) trước khi dán dữ liệu. Trong khi điều này làm việc cho dữ liệu này, nó sẽ không hoạt động nếu số lượng bản ghi trong mỗi tờ thay đổi ngay bây giờ và một lần nữa. Về cơ bản,

1) Tôi đã tự hỏi nếu có một chức năng tự động chuyển đến ô liên quan cuối cùng trước khi dán tập dữ liệu tiếp theo (trong ví dụ này, ô A4 và nếu tôi có thêm một bảng nữa, thì ô A6).

2) Tôi đã nhìn thấy hàm "ActiveCell.SpecialCells (xlLastCell) .Select" (được kích hoạt khi tôi sử dụng Ctrl + End) nhưng điều đó đưa tôi đến cuối trang tính. Tôi sẽ cần một cái gì đó tương tự như phím mũi tên "Home" và "Down" sau khi sử dụng chức năng đó để nó hoạt động tốt nhất.

Hoặc một trong các tùy chọn đó sẽ tốt với tôi.^_^

Dưới đây là code VBA hiện tại của tôi ghi lại từ ghi Macro trong excel 2010:

Sub Collate_Sheets() 

    Sheets.Add After:=Sheets(Sheets.Count) 
    Sheets(Sheets.Count).Select 
    Sheets(Sheets.Count).Name = "Sheet3" 
    Sheets("Sheet1").Select 
    Range("A1").Select 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
    Selection.Copy 
    Sheets("Sheet3").Select 
    ActiveSheet.Paste 
    ActiveCell.SpecialCells(xlLastCell).Select 
    ' I need to select one cell below, and the cell in column A at this point 
    Sheets("Sheet2").Select 
    Range("A2").Select 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet3").Select 
    ActiveSheet.Paste 
End Sub 

Tôi hy vọng tôi không quên bất cứ mẩu thông tin hữu ích. Hãy cho tôi biết nếu tôi đã làm!

+0

Oh cảm ơn Doug! Tôi không biết diễn đàn đã chọn cú pháp đầy đủ làm nổi bật^^; – Jerry

+0

Để lấy hàng bên dưới ô được sử dụng thực sự cuối cùng, bạn có thể viết 'Phạm vi (" A "& Rows.Count) .End (xlup) .Offset (1)'. Thay thế '" A "' bằng bất kỳ cột nào bạn cần. –

+0

Bạn đang chào đón Jerry. Để làm nổi bật, chỉ cần đánh dấu mã của bạn và sau đó nhấp vào biểu tượng mã ở trên cùng. Nó trông giống như '{}'. –

Trả lời

6

Jerry, hãy thử mã này. Tôi làm sạch mã của bạn một chút và làm cho nó hiệu quả hơn để có thể làm những gì bạn muốn. Tôi đã thực hiện một số giả định dựa trên những gì mã của bạn nói mà tôi nghĩ là đúng. Nếu không, hãy bình luận về câu trả lời này và tôi sẽ tinh chỉnh nếu cần.

Option Explicit 

Sub Collate_Sheets() 


    Sheets.Add After:=Sheets(Sheets.Count) 
    Dim wks As Worksheet 
    Set wks = Sheets(Sheets.Count) 

    wks.Name = "Sheet3" 

    With Sheets("Sheet1") 

    Dim lastrow As Long 
    lastrow = .Range("B" & .Rows.Count).End(xlUp).Row 

    .Range("A1:B" & lastrow).Copy wks.Range("A" & wks.Rows.Count).End(xlUp) 

    End With 

    With Sheets("Sheet2") 

    lastrow = .Range("B" & .Rows.Count).End(xlUp).Row 

    .Range("A2:B" & lastrow).Copy wks.Range("A" & wks.Rows.Count).End(xlUp).Offset(1) 

    End With 


End Sub 
+0

OK, tôi đã thử với dữ liệu mẫu tôi có ở trên (cùng một bản ghi) và nó cho tôi điều này: "Ô A2 = Tiêu đề1" "Ô A3 = Tiêu đề1" "Ô A4 = Text3" Và tất cả các ô trống khác Có hơi muộn ở đây và tôi sẽ đi ngủ. Tôi sẽ cố gắng để xem những gì có thể sai trong mã ngày mai nếu bạn chưa có nó. Cảm ơn sự giúp đỡ của bạn cho đến thời điểm này =) – Jerry

+0

@Jerry -> Tôi đã chỉnh sửa mã và làm cho mã hoạt động cho tập dữ liệu của bạn. Nếu bạn cần thổi nó ra cho tập dữ liệu thực của bạn, các thủ thuật chỉ để lấy tiêu đề trên bản sao/dán đầu tiên và để đảm bảo bạn đang sử dụng một cột không chứa khoảng trống trong tập dữ liệu của bạn để chụp hàng cuối cùng . –

+0

Xin cảm ơn! Nó hoạt động hoàn hảo ngay bây giờ và tôi đã điều chỉnh mã thành nhiều trang tính (số tôi cần) và số cột có liên quan. Cảm ơn một lần nữa!^_ ^ – Jerry

0

Trong trường hợp ai muốn xóa Shee3 trước khi tạo ra nó để tránh những lỗi

'Delete Sheet 3 
    Application.DisplayAlerts = False 
    Sheets("Sheet3").Delete 

Cảm ơn Scott Holtzman !!

Các vấn đề liên quan