Tìm kích thước của trang tính riêng lẻ (Microsoft Excel)
Maarten tự hỏi liệu có cách nào để tìm ra kích thước của mỗi trang tính trong sổ làm việc không. Anh ta có một sổ làm việc với gần 100 trang tính và anh ta muốn giảm kích thước của tệp sổ làm việc. Tuy nhiên, anh ấy không biết trang tính nào có kích thước lớn nhất.
Việc tìm ra “kích thước” của từng trang tính phụ thuộc phần lớn vào ý nghĩa của “kích thước”. Nó có nghĩa là số lượng ô được sử dụng? Các cột và hàng được sử dụng? Bao nhiêu văn bản được lưu trữ trong trang tính? Danh sách các số liệu có thể tiếp tục lặp lại.
Vấn đề là những câu hỏi như thế này sai dấu; một trang tính có thể có rất nhiều mục được lưu trữ trên đó. Ví dụ, nó có thể chứa nhận xét, công thức, văn bản, biểu đồ, tệp âm thanh và bất kỳ số lượng mục nào khác. Một biểu đồ có thể lớn hơn biểu đồ khác về số lượng ô, nhưng biểu đồ kia có thể lớn hơn về đối tượng (chẳng hạn như biểu đồ hoặc PivotTable).
Cách thực sự duy nhất để so sánh kích thước tương đối của các trang tính là lưu từng trang tính vào sổ làm việc của chính nó và sau đó kiểm tra kích thước của từng sổ làm việc kết quả. Điều này rõ ràng không trả lời chính xác kích thước của từng trang tính riêng lẻ vì hành động lưu sổ làm việc đưa thêm chi phí vào tệp đã lưu. Tuy nhiên, nếu mỗi trang tính được lưu theo cùng một cách, mỗi trang sẽ có chi phí tương đương và do đó có thể so sánh với nhau để xem cái nào lớn hơn.
Macro sau đây thêm một trang tính vào sổ làm việc hiện tại để ghi lại kích thước của từng sổ làm việc được tạo. Sau đó, nó bước qua từng trang tính và lưu nó vào một sổ làm việc riêng lẻ. Kích thước của sổ làm việc sau đó được xác định, ghi lại và xóa sổ làm việc mới.
Sub WorksheetSizes() Dim wks As Worksheet Dim c As Range Dim sFullFile As String Dim sReport As String Dim sWBName As String sReport = "Size Report" sWBName = "Erase Me.xls" sFullFile = ThisWorkbook.Path & _ Application.PathSeparator & sWBName ' Add new worksheet to record sizes On Error Resume Next Set wks = Worksheets(sReport) If wks Is Nothing Then With ThisWorkbook.Worksheets.Add(Before:=Worksheets(1)) .Name = sReport .Range("A1").Value = "Worksheet Name" .Range("B1").Value = "Approximate Size" End With End If On Error GoTo 0 With ThisWorkbook.Worksheets(sReport) .Select .Range("A1").CurrentRegion.Offset(1, 0).ClearContents Set c = .Range("A2") End With Application.ScreenUpdating = False ' Loop through worksheets For Each wks In ActiveWorkbook.Worksheets If wks.Name <> sReport Then wks.Copy Application.DisplayAlerts = False ActiveWorkbook.SaveAs sFullFile ActiveWorkbook.Close SaveChanges:=False Application.DisplayAlerts = True c.Offset(0, 0).Value = wks.Name c.Offset(0, 1).Value = FileLen(sFullFile) Set c = c.Offset(1, 0) Kill sFullFile End If Next wks Application.ScreenUpdating = True End Sub
_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 (11113) áp dụng cho Microsoft Excel 2007 và 2010. Bạn có thể tìm phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: