Chuyển vị ba chiều (Microsoft Excel)
Là một cựu người dùng Lotus 1-2-3 hạng nặng ở công việc trước đây, Patti đã RẤT gắn bó với một tính năng mà Excel rất thiếu: khả năng chuyển dữ liệu theo ba chiều. Chuyển vị hai chiều được hỗ trợ trong Excel, nhưng Patti chưa tìm ra cách lấy một hàng hoặc cột hoặc bảng và trải nó qua một chồng trang tính. Đây là một chức năng được mọi người trong văn phòng tài chính của cô ấy sử dụng hàng ngày và cô ấy thực sự nhớ nó.
Patti đúng; không có chức năng tích hợp nào để thực hiện việc này trong Excel. Tùy chọn gần nhất là sử dụng PivotTable và các khả năng “Hiển thị trang” mà nó bao gồm. Nói chung, bạn làm theo các bước sau:
-
Tạo PivotTable từ dữ liệu của bạn như bình thường.
-
Đặt cột mà bạn muốn trang tính được tạo vào phần “Trang” của PivotTable.
-
Trên thanh công cụ PivotTable, bấm vào tùy chọn PivotTable ở bên trái thanh công cụ. Excel hiển thị một số tùy chọn bạn có thể chọn.
-
Chọn Hiển thị Trang. Excel yêu cầu bạn xác nhận rằng bạn muốn hiển thị các trang.
-
Bấm OK.
Những gì bạn kết thúc là một loạt các bảng tính, mỗi bảng tính cho mỗi mục nhập cột bạn đã chỉ định ở bước 2. Mỗi bảng tính đó chứa một “trang”
của PivotTable.
Nếu điều này vẫn không thực hiện được những gì bạn muốn, thì bạn sẽ cần phải sử dụng macro để chuyển đổi dữ liệu. Một macro như vậy có thể khá phức tạp, nhưng về cơ bản tất cả những gì nó cần làm là lướt qua bảng dữ liệu của bạn và di chuyển từng hàng (hoặc cột) dữ liệu sang trang tính của chính nó.
Ví dụ: macro sau (Transpose3D) sẽ lấy từng hàng từ một phạm vi ô đã chọn và đặt hàng đó trên trang tính mới được tạo của chính nó.
Sub Transpose3D() Dim rngTbl As Range Dim wsName As String Dim R As Integer Dim C As Integer Dim i As Integer Dim j As Integer Dim Killit As Integer Dim RCount As Integer Dim CCount As Integer Dim Table1() As Variant Dim Row1() As Variant RCount = Selection.Rows.Count CCount = Selection.Columns.Count If RCount < 2 Then MsgBox ("Error; Select a range with more than one row.") GoTo EndItAll End If wsName = ActiveSheet.Name R = ActiveCell.Row C = ActiveCell.Column Set rngTbl = Selection ReDim Table1(1 To RCount, 1 To CCount) ReDim Row1(1 To 1, 1 To CCount) Table1() = rngTbl.Value On Error GoTo Abend For i = 1 To RCount If SheetExists(wsName & "_Row_" & i) Then Killit = MsgBox("Sheet " & wsName & "_Row_" & i & _ " Already Exists!" & vbCrLf & _ " Cancel: Stop Transposition" & vbCrLf & _ " OK: Delete Sheet and Continue", vbOKCancel) If Killit = vbCancel Then GoTo EndItAll Application.DisplayAlerts = False Sheets(wsName & "_Row_" & i).Delete Application.DisplayAlerts = True End If Sheets.Add ActiveSheet.Name = wsName & "_Row_" & i Cells(R, C).Select For j = 1 To CCount Row1(1, j) = Table1(i, j) Next j Range(ActiveCell, ActiveCell.Offset(0, CCount - 1)) = Row1() Sheets(wsName).Select Next i GoTo EndItAll Abend: MsgBox ("Error in Routine Transpose3D.") EndItAll: Application.DisplayAlerts = True End Sub
Function SheetExists(SheetName As String) As Boolean Dim ws As Worksheet SheetExists = False For Each ws In ThisWorkbook.Worksheets If ws.Name = SheetName Then SheetExists = True Exit For End If Next ws End Function
_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 (11245) á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: