Chuyển đổi cột sang trang tính Excel bằng VBA
Tình huống
Giả sử rằng bạn có một sổ làm việc excel. Nó có 3 tờ. Một trang tính có 5 cột. Mỗi cột có dữ liệu thành phố khác nhau. Mỗi trang tính chứa 5 cột tương tự với các dữ liệu khác nhau của các thành phố giống nhau.
Thách thức:
Chúng ta cần tạo một tệp chứa các trang tính khác nhau cho mỗi cột duy nhất. Mỗi trang tính phải chứa dữ liệu của cột tương ứng. Cuối cùng, chúng ta sẽ có 5 trang tính với 3 cột mỗi trang. Theo một cách nào đó, nó đang chuyển các cột thành các trang tính.
Logic:
Đầu tiên, chúng ta cần tạo một sổ làm việc chứa các trang tính khác nhau cho mỗi cột. Chúng ta có thể làm điều này bằng cách xem tiêu đề trang đầu tiên của tệp gốc.
Tiếp theo, chúng ta cần lặp qua từng trang tính của trang tính gốc để sao chép từng cột sang các trang tính tương ứng của sổ làm việc mới.
Mã VBA để chuyển các cột thành trang tính.
Trước tiên, hãy xem mã VBA để chuyển đổi các trang tính. Tôi giải thích nó dưới đây.
Sub TransposeColsToSheets() 'varibles Dim wb As Workbook Dim twb As Workbook Dim lstRw As Integer Dim lstCl As Integer Dim cols As Range With Application .DisplayAlerts = False .ScreenUpdating = False End With 'creating new file Set wb = Workbooks.Add 'saving the file. Replace the path with your destination. wb.SaveAs "C:\Users\Manish Singh\Desktop\Excel Tip\result.xlsx" Set twb = ThisWorkbook twb.Sheets(1).Activate lstCl = Cells(1, Columns.Count).End(xlToLeft).Column 'identfying headers for city names Set cols = Range(Cells(1, 1), Cells(1, lstCl)) 'loop to create sheets For x = 1 To cols.Count wb.Sheets.Add.Name = "page" & x Next 'loop to transpose columns to sheets For Each sh In twb.Sheets For x = 1 To cols.Count sh.Activate lstRw = Cells(Rows.Count, 1).End(xlUp).Row Range(Cells(1, x), Cells(lstRw, x)).Copy wb.Sheets("page" & x).Activate lstCl = Cells(1, Columns.Count).End(xlToLeft).Column + 1 Range(Cells(1, lstCl), Cells(1, lstCl)).PasteSpecial xlPasteAll Next x Next sh 'saving and closing the result workbook wb.Save wb.Close With Application .DisplayAlerts = True .ScreenUpdating = True End With End Sub
Bạn có thể tải xuống tập tin belove để sử dụng ngay lập tức hoặc sao chép mã để tùy chỉnh theo nhu cầu của bạn.
Sau khi bạn chạy mã, nó sẽ ngay lập tức tạo ra một tệp excel có 5 trang tính, mỗi trang tính chứa 3 cột dữ liệu của cùng một thành phố.
Transpose Column To Sheets]
Nó hoạt động như thế nào?
Trong đoạn mã ví dụ trên, chúng tôi đã giả định rằng tệp bắt đầu từ ô đầu tiên của mỗi trang tính và mỗi trang tính chứa cùng một số cột.
Trong vài dòng mã đầu tiên, chúng tôi đã khai báo các biến mà chúng tôi sẽ cần trong thủ tục. Chúng tôi đã lưu các tiêu đề cột trong một biến có tên là cols. Chúng tôi cũng đã tạo một tệp .xlsx, có tên là result.xlsx *.
Tiếp theo, chúng tôi đã sử dụng một vòng lặp để tạo cùng một số lượng trang tính trong result.xlsx như trong tập tiêu đề.
'loop to create sheets For x = 1 To cols.Count wb.Sheets.Add.Name = "page" & x Next
Tiếp theo, chúng tôi đã sử dụng một vòng lặp lồng nhau. Vòng lặp đầu tiên là lặp lại các trang tính trong tệp gốc. Vòng lặp tiếp theo để sao chép từng cột và dán vào từng trang tính trong tệp results.xlsx.
Cuối cùng, chúng tôi đang lưu kết quả sổ làm việc.xlsx và đóng nó. Và nó được thực hiện.
Vì vậy, các bạn, đây là cách bạn có thể sao chép từng cột sang một trang tính mới trong excel bằng VBA. Điều này đã được hỏi bởi userMahmoodin của chúng tôi trong phần nhận xét.
Tôi nghĩ nó xứng đáng có một bài báo để nó có thể có sẵn cho tất cả chúng ta. Ở đây bạn có nó. Tôi hy vọng nó đủ giải thích. Nếu bạn vẫn còn nghi ngờ hoặc bất kỳ câu hỏi nào khác, hãy hỏi trong phần nhận xét bên dưới.
Bài viết liên quan:
Tải xuống tệp làm việc.
Bài viết phổ biến:
Bạn không cần lọc dữ liệu của mình để đếm giá trị cụ thể. Chức năng Countif là cần thiết để chuẩn bị bảng điều khiển của bạn.