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.

image

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.

image

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ố.

image 48Transpose 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.