Nếu bạn nhập một danh sách dữ liệu vào Excel, không có gì lạ khi kết thúc với rất nhiều dữ liệu trong cột A. Trên thực tế, không có gì bất thường trong bất kỳ cột nào khác. (Tất cả điều này phụ thuộc vào bản chất của dữ liệu bạn đang nhập.) Là một phần của quá trình làm việc với dữ liệu trong Excel, bạn có thể muốn “tổ chức lại” dữ liệu để nó được kéo lên nhiều cột hơn là chỉ cột A .

Ví dụ, hãy tưởng tượng rằng bạn đã nhập dữ liệu của mình, và nó đã chiếm từ hàng 1 đến hàng 212 của cột A. Điều bạn thực sự muốn là dữ liệu sẽ chiếm các cột từ A đến F, tuy nhiên cần có nhiều hàng để chứa dữ liệu. Do đó, A2 cần được chuyển sang B1, A3 thành C1, A4, sang D1, A5 thành E1, A6 thành F1, rồi A7 thành A2, A8 thành B2, v.v.

Để tổ chức lại dữ liệu theo cách này, bạn có thể sử dụng macro sau.

Chọn dữ liệu bạn muốn sắp xếp lại, rồi chạy macro. Bạn được hỏi có bao nhiêu cột bạn muốn trong dữ liệu được tổ chức lại và sau đó quá trình chuyển đổi dữ liệu bắt đầu.

Sub CompressData()

Dim rSource As Range     Dim rTarget As Range     Dim iWriteRow As Integer     Dim iWriteCol As Integer     Dim iColCount As Integer     Dim iTargetCols As Integer     Dim J As Integer

iTargetCols = Val(InputBox("How many columns?"))

If iTargetCols > 1 Then         Set rSource = ActiveSheet.Range(ActiveWindow.Selection.Address)

If rSource.Columns.Count > 1 Then Exit Sub

iWriteRow = rSource.Row + (rSource.Cells.Count / iTargetCols)

iWriteCol = rSource.Column + iTargetCols - 1         Set rTarget = Range(Cells(rSource.Row, rSource.Column), _           Cells(iWriteRow, iWriteCol))



For J = 1 To rSource.Cells.Count             rTarget.Cells(J) = rSource.Cells(J)

If J > (rSource.Cells.Count / iTargetCols) Then _               rSource.Cells(J).Clear         Next J     End If End Sub

Macro chuyển thông tin bằng cách xác định hai phạm vi: phạm vi nguồn bạn đã chọn khi chạy macro và phạm vi mục tiêu được xác định theo kích thước được tính toán dựa trên số cột bạn muốn. Phạm vi nguồn được đại diện bởi đối tượng biến rSource và phạm vi mục tiêu bởi rTarget. Vòng lặp For …​ Next được sử dụng để thực sự chuyển các giá trị.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (2301) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: